diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:11:01 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:11:01 +0900 |
commit | 3fdc3e5ee96dca5b11d1694975a65200787eab86 (patch) | |
tree | 5c1733853892b8397d67706fa453a9bd978d2102 /boost/asio/detail/resolver_service.hpp | |
parent | 88e602c57797660ebe0f9e15dbd64c1ff16dead3 (diff) | |
download | boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.tar.gz boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.tar.bz2 boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.zip |
Imported Upstream version 1.66.0upstream/1.66.0
Diffstat (limited to 'boost/asio/detail/resolver_service.hpp')
-rw-r--r-- | boost/asio/detail/resolver_service.hpp | 58 |
1 files changed, 37 insertions, 21 deletions
diff --git a/boost/asio/detail/resolver_service.hpp b/boost/asio/detail/resolver_service.hpp index f73742e9b0..bda1139eb7 100644 --- a/boost/asio/detail/resolver_service.hpp +++ b/boost/asio/detail/resolver_service.hpp @@ -19,11 +19,12 @@ #if !defined(BOOST_ASIO_WINDOWS_RUNTIME) -#include <boost/asio/ip/basic_resolver_iterator.hpp> #include <boost/asio/ip/basic_resolver_query.hpp> -#include <boost/asio/detail/addressof.hpp> +#include <boost/asio/ip/basic_resolver_results.hpp> +#include <boost/asio/detail/concurrency_hint.hpp> +#include <boost/asio/detail/memory.hpp> #include <boost/asio/detail/resolve_endpoint_op.hpp> -#include <boost/asio/detail/resolve_op.hpp> +#include <boost/asio/detail/resolve_query_op.hpp> #include <boost/asio/detail/resolver_service_base.hpp> #include <boost/asio/detail/push_options.hpp> @@ -33,7 +34,9 @@ namespace asio { namespace detail { template <typename Protocol> -class resolver_service : public resolver_service_base +class resolver_service : + public service_base<resolver_service<Protocol> >, + public resolver_service_base { public: // The implementation type of the resolver. A cancellation token is used to @@ -46,17 +49,30 @@ public: // The query type. typedef boost::asio::ip::basic_resolver_query<Protocol> query_type; - // The iterator type. - typedef boost::asio::ip::basic_resolver_iterator<Protocol> iterator_type; + // The results type. + typedef boost::asio::ip::basic_resolver_results<Protocol> results_type; // Constructor. - resolver_service(boost::asio::io_service& io_service) - : resolver_service_base(io_service) + resolver_service(boost::asio::io_context& io_context) + : service_base<resolver_service<Protocol> >(io_context), + resolver_service_base(io_context) { } + // Destroy all user-defined handler objects owned by the service. + void shutdown() + { + this->base_shutdown(); + } + + // Perform any fork-related housekeeping. + void notify_fork(boost::asio::io_context::fork_event fork_ev) + { + this->base_notify_fork(fork_ev); + } + // Resolve a query to a list of entries. - iterator_type resolve(implementation_type&, const query_type& query, + results_type resolve(implementation_type&, const query_type& query, boost::system::error_code& ec) { boost::asio::detail::addrinfo_type* address_info = 0; @@ -65,7 +81,7 @@ public: query.service_name().c_str(), query.hints(), &address_info, ec); auto_addrinfo auto_address_info(address_info); - return ec ? iterator_type() : iterator_type::create( + return ec ? results_type() : results_type::create( address_info, query.host_name(), query.service_name()); } @@ -75,20 +91,20 @@ public: const query_type& query, Handler& handler) { // Allocate and construct an operation to wrap the handler. - typedef resolve_op<Protocol, Handler> op; + typedef resolve_query_op<Protocol, Handler> op; typename op::ptr p = { boost::asio::detail::addressof(handler), - boost_asio_handler_alloc_helpers::allocate( - sizeof(op), handler), 0 }; - p.p = new (p.v) op(impl, query, io_service_impl_, handler); + op::ptr::allocate(handler), 0 }; + p.p = new (p.v) op(impl, query, io_context_impl_, handler); - BOOST_ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve")); + BOOST_ASIO_HANDLER_CREATION((io_context_impl_.context(), + *p.p, "resolver", &impl, 0, "async_resolve")); start_resolve_op(p.p); p.v = p.p = 0; } // Resolve an endpoint to a list of entries. - iterator_type resolve(implementation_type&, + results_type resolve(implementation_type&, const endpoint_type& endpoint, boost::system::error_code& ec) { char host_name[NI_MAXHOST]; @@ -97,7 +113,7 @@ public: host_name, NI_MAXHOST, service_name, NI_MAXSERV, endpoint.protocol().type(), ec); - return ec ? iterator_type() : iterator_type::create( + return ec ? results_type() : results_type::create( endpoint, host_name, service_name); } @@ -109,11 +125,11 @@ public: // Allocate and construct an operation to wrap the handler. typedef resolve_endpoint_op<Protocol, Handler> op; typename op::ptr p = { boost::asio::detail::addressof(handler), - boost_asio_handler_alloc_helpers::allocate( - sizeof(op), handler), 0 }; - p.p = new (p.v) op(impl, endpoint, io_service_impl_, handler); + op::ptr::allocate(handler), 0 }; + p.p = new (p.v) op(impl, endpoint, io_context_impl_, handler); - BOOST_ASIO_HANDLER_CREATION((p.p, "resolver", &impl, "async_resolve")); + BOOST_ASIO_HANDLER_CREATION((io_context_impl_.context(), + *p.p, "resolver", &impl, 0, "async_resolve")); start_resolve_op(p.p); p.v = p.p = 0; |