7#ifndef BOOST_REDIS_RESOLVER_HPP
8#define BOOST_REDIS_RESOLVER_HPP
10#include <boost/redis/config.hpp>
11#include <boost/redis/error.hpp>
12#include <boost/asio/compose.hpp>
13#include <boost/asio/coroutine.hpp>
14#include <boost/asio/ip/tcp.hpp>
15#include <boost/asio/cancel_after.hpp>
19namespace boost::redis::detail
22template <
class Resolver>
24 Resolver* resv_ =
nullptr;
25 asio::coroutine coro{};
28 void operator()( Self& self
29 , system::error_code ec = {}
30 , asio::ip::tcp::resolver::results_type res = {})
32 BOOST_ASIO_CORO_REENTER (coro)
35 resv_->resv_.async_resolve(
38 asio::cancel_after(resv_->timeout_, std::move(self)));
40 resv_->results_ = res;
42 if (ec == asio::error::operation_aborted) {
51template <
class Executor>
54 resolver(Executor ex) : resv_{ex} {}
56 template <
class CompletionToken>
57 auto async_resolve(CompletionToken&& token)
59 return asio::async_compose
61 , void(system::error_code)
62 >(resolve_op<resolver>{
this}, token, resv_);
68 auto const& results() const noexcept
71 void set_config(config
const& cfg)
74 timeout_ = cfg.resolve_timeout;
78 using resolver_type = asio::ip::basic_resolver<asio::ip::tcp, Executor>;
79 template <
class>
friend struct resolve_op;
83 std::chrono::steady_clock::duration timeout_;
84 asio::ip::tcp::resolver::results_type results_;
@ resolve_timeout
Resolve timeout.