summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp')
-rw-r--r--3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp54
1 files changed, 34 insertions, 20 deletions
diff --git a/3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp b/3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp
index 8e38331c234..81ecb7400bf 100644
--- a/3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp
+++ b/3rdparty/asio/include/asio/detail/winrt_resolver_service.hpp
@@ -2,7 +2,7 @@
// detail/winrt_resolver_service.hpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -21,6 +21,7 @@
#include "asio/ip/basic_resolver_query.hpp"
#include "asio/ip/basic_resolver_results.hpp"
+#include "asio/post.hpp"
#include "asio/detail/bind_handler.hpp"
#include "asio/detail/memory.hpp"
#include "asio/detail/socket_ops.hpp"
@@ -28,6 +29,12 @@
#include "asio/detail/winrt_resolve_op.hpp"
#include "asio/detail/winrt_utils.hpp"
+#if defined(ASIO_HAS_IOCP)
+# include "asio/detail/win_iocp_io_context.hpp"
+#else // defined(ASIO_HAS_IOCP)
+# include "asio/detail/scheduler.hpp"
+#endif // defined(ASIO_HAS_IOCP)
+
#include "asio/detail/push_options.hpp"
namespace asio {
@@ -35,7 +42,7 @@ namespace detail {
template <typename Protocol>
class winrt_resolver_service :
- public service_base<winrt_resolver_service<Protocol> >
+ public execution_context_service_base<winrt_resolver_service<Protocol> >
{
public:
// The implementation type of the resolver. A cancellation token is used to
@@ -53,10 +60,11 @@ public:
typedef asio::ip::basic_resolver_results<Protocol> results_type;
// Constructor.
- winrt_resolver_service(asio::io_context& io_context)
- : service_base<winrt_resolver_service<Protocol> >(io_context),
- io_context_(use_service<io_context_impl>(io_context)),
- async_manager_(use_service<winrt_async_manager>(io_context))
+ winrt_resolver_service(execution_context& context)
+ : execution_context_service_base<
+ winrt_resolver_service<Protocol> >(context),
+ scheduler_(use_service<scheduler_impl>(context)),
+ async_manager_(use_service<winrt_async_manager>(context))
{
}
@@ -71,7 +79,7 @@ public:
}
// Perform any fork-related housekeeping.
- void notify_fork(asio::io_context::fork_event)
+ void notify_fork(execution_context::fork_event)
{
}
@@ -130,20 +138,20 @@ public:
}
// Asynchronously resolve a query to a list of entries.
- template <typename Handler>
- void async_resolve(implementation_type& impl,
- const query_type& query, Handler& handler)
+ template <typename Handler, typename IoExecutor>
+ void async_resolve(implementation_type& impl, const query_type& query,
+ Handler& handler, const IoExecutor& io_ex)
{
bool is_continuation =
asio_handler_cont_helpers::is_continuation(handler);
// Allocate and construct an operation to wrap the handler.
- typedef winrt_resolve_op<Protocol, Handler> op;
+ typedef winrt_resolve_op<Protocol, Handler, IoExecutor> op;
typename op::ptr p = { asio::detail::addressof(handler),
op::ptr::allocate(handler), 0 };
- p.p = new (p.v) op(query, handler);
+ p.p = new (p.v) op(query, handler, io_ex);
- ASIO_HANDLER_CREATION((io_context_.context(),
+ ASIO_HANDLER_CREATION((scheduler_.context(),
*p.p, "resolver", &impl, 0, "async_resolve"));
(void)impl;
@@ -159,7 +167,7 @@ public:
{
p.p->ec_ = asio::error_code(
e->HResult, asio::system_category());
- io_context_.post_immediate_completion(p.p, is_continuation);
+ scheduler_.post_immediate_completion(p.p, is_continuation);
p.v = p.p = 0;
}
}
@@ -173,18 +181,24 @@ public:
}
// Asynchronously resolve an endpoint to a list of entries.
- template <typename Handler>
- void async_resolve(implementation_type&,
- const endpoint_type&, Handler& handler)
+ template <typename Handler, typename IoExecutor>
+ void async_resolve(implementation_type&, const endpoint_type&,
+ Handler& handler, const IoExecutor& io_ex)
{
asio::error_code ec = asio::error::operation_not_supported;
const results_type results;
- io_context_.get_io_context().post(
- detail::bind_handler(handler, ec, results));
+ asio::post(io_ex, detail::bind_handler(handler, ec, results));
}
private:
- io_context_impl& io_context_;
+ // The scheduler implementation used for delivering completions.
+#if defined(ASIO_HAS_IOCP)
+ typedef class win_iocp_io_context scheduler_impl;
+#else
+ typedef class scheduler scheduler_impl;
+#endif
+ scheduler_impl& scheduler_;
+
winrt_async_manager& async_manager_;
};