7#ifndef BOOST_REDIS_RESOLVER_HPP
8#define BOOST_REDIS_RESOLVER_HPP
10#include <boost/redis/config.hpp>
11#include <boost/redis/detail/helper.hpp>
12#include <boost/redis/error.hpp>
13#include <boost/asio/compose.hpp>
14#include <boost/asio/coroutine.hpp>
15#include <boost/asio/ip/tcp.hpp>
16#include <boost/asio/cancel_after.hpp>
20namespace boost::redis::detail
23template <
class Resolver>
25 Resolver* resv_ =
nullptr;
26 asio::coroutine coro{};
29 void operator()( Self& self
30 , system::error_code ec = {}
31 , asio::ip::tcp::resolver::results_type res = {})
33 BOOST_ASIO_CORO_REENTER (coro)
36 resv_->resv_.async_resolve(
39 asio::cancel_after(resv_->timeout_, std::move(self)));
41 resv_->results_ = res;
43 if (ec == asio::error::operation_aborted) {
52template <
class Executor>
55 resolver(Executor ex) : resv_{ex} {}
57 template <
class CompletionToken>
58 auto async_resolve(CompletionToken&& token)
60 return asio::async_compose
62 , void(system::error_code)
63 >(resolve_op<resolver>{
this}, token, resv_);
79 auto const& results() const noexcept
82 void set_config(config
const& cfg)
85 timeout_ = cfg.resolve_timeout;
89 using resolver_type = asio::ip::basic_resolver<asio::ip::tcp, Executor>;
90 template <
class>
friend struct resolve_op;
94 std::chrono::steady_clock::duration timeout_;
95 asio::ip::tcp::resolver::results_type results_;
operation
Connection operations that can be cancelled.
@ resolve_timeout
Resolve timeout.
@ resolve
Resolve operation.
@ all
Refers to all operations.