Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r84530 - in branches/release: boost/asio boost/asio/detail boost/asio/detail/impl boost/asio/impl boost/asio/ssl boost/asio/ssl/detail boost/asio/ssl/detail/impl boost/asio/ssl/impl libs/asio/doc libs/asio/doc/overview libs/asio/doc/requirements libs/asio/test libs/asio/test/latency libs/asio/test/ssl
From: chris_at_[hidden]
Date: 2013-05-27 08:36:45


Author: chris_kohlhoff
Date: 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
New Revision: 84530
URL: http://svn.boost.org/trac/boost/changeset/84530

Log:
Merge from trunk. Fixes #8421, #8602, #7739, #8613, #7939.

------------------------------------------------------------------------
r84482 | chris_kohlhoff | 2013-05-25 21:35:10 +1000 (Sat, 25 May 2013) | 1 line

Fix potential deadlock in signal_set implementation.
------------------------------------------------------------------------
r84483 | chris_kohlhoff | 2013-05-25 21:38:01 +1000 (Sat, 25 May 2013) | 1 line

Fix error in acceptor example. Refs #8421
------------------------------------------------------------------------
r84484 | chris_kohlhoff | 2013-05-25 21:41:19 +1000 (Sat, 25 May 2013) | 1 line

Fix waitable timer documentation. Refs #8602
------------------------------------------------------------------------
r84485 | chris_kohlhoff | 2013-05-25 21:46:20 +1000 (Sat, 25 May 2013) | 1 line

Add assertions that num_buckets_ is non-zero. Refs #7739
------------------------------------------------------------------------
r84486 | chris_kohlhoff | 2013-05-25 21:50:52 +1000 (Sat, 25 May 2013) | 8 lines

Automatically disable SSL compression.

To mitigate the risk of certain attacks, SSL compression is now disabled
by default. To enable, you can use the new ssl::context::clear_options()
function like so:

  my_context.clear_options(asio::ssl::context::no_compression);

------------------------------------------------------------------------
r84487 | chris_kohlhoff | 2013-05-25 21:52:54 +1000 (Sat, 25 May 2013) | 3 lines

Fix bug on Windows where certain operations might generate an error_code with
an invalid (i.e. NULL) error_category. Refs #8613

------------------------------------------------------------------------
r84488 | chris_kohlhoff | 2013-05-25 21:57:36 +1000 (Sat, 25 May 2013) | 1 line

Fix problem in #warning directive. Refs #7939
------------------------------------------------------------------------
r84492 | chris_kohlhoff | 2013-05-25 22:35:43 +1000 (Sat, 25 May 2013) | 2 lines

Fix potential data race due to reading the reactor pointer outside the lock.

------------------------------------------------------------------------
r84494 | chris_kohlhoff | 2013-05-25 23:03:48 +1000 (Sat, 25 May 2013) | 1 line

Regenerate documentation.
------------------------------------------------------------------------
r84529 | chris_kohlhoff | 2013-05-27 22:17:19 +1000 (Mon, 27 May 2013) | 1 line

Add documentation for new features.
------------------------------------------------------------------------

Added:
   branches/release/libs/asio/doc/overview/coroutine.qbk (contents, props changed)
   branches/release/libs/asio/doc/overview/other_protocols.qbk (contents, props changed)
   branches/release/libs/asio/doc/overview/spawn.qbk (contents, props changed)
Text files modified:
   branches/release/boost/asio/basic_socket_acceptor.hpp | 10
   branches/release/boost/asio/basic_waitable_timer.hpp | 17
   branches/release/boost/asio/detail/hash_map.hpp | 2
   branches/release/boost/asio/detail/impl/epoll_reactor.ipp | 3
   branches/release/boost/asio/detail/impl/signal_set_service.ipp | 35
   branches/release/boost/asio/detail/impl/win_iocp_io_service.ipp | 9
   branches/release/boost/asio/detail/scoped_lock.hpp | 12
   branches/release/boost/asio/handler_type.hpp | 4
   branches/release/boost/asio/impl/src.cpp | 4
   branches/release/boost/asio/spawn.hpp | 137
   branches/release/boost/asio/ssl/context.hpp | 29
   branches/release/boost/asio/ssl/context_base.hpp | 8
   branches/release/boost/asio/ssl/detail/impl/openssl_init.ipp | 36
   branches/release/boost/asio/ssl/detail/openssl_init.hpp | 15
   branches/release/boost/asio/ssl/impl/context.ipp | 39
   branches/release/boost/asio/use_future.hpp | 24
   branches/release/libs/asio/doc/overview.qbk | 10
   branches/release/libs/asio/doc/overview/cpp2011.qbk | 35
   branches/release/libs/asio/doc/overview/protocols.qbk | 6
   branches/release/libs/asio/doc/quickref.xml | 34
   branches/release/libs/asio/doc/reference.dox | 1
   branches/release/libs/asio/doc/reference.qbk | 11509 ++++++++++++++++++++++++++++++++-------
   branches/release/libs/asio/doc/reference.xsl | 15
   branches/release/libs/asio/doc/requirements/asynchronous_operations.qbk | 41
   branches/release/libs/asio/doc/tutorial.dox | 6
   branches/release/libs/asio/test/Jamfile | 9
   branches/release/libs/asio/test/Jamfile.v2 | 16
   branches/release/libs/asio/test/latency/Jamfile.v2 | 2
   branches/release/libs/asio/test/ssl/Jamfile | 2
   branches/release/libs/asio/test/ssl/Jamfile.v2 | 2
   30 files changed, 9908 insertions(+), 2164 deletions(-)

Modified: branches/release/boost/asio/basic_socket_acceptor.hpp
==============================================================================
--- branches/release/boost/asio/basic_socket_acceptor.hpp (original)
+++ branches/release/boost/asio/basic_socket_acceptor.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -365,8 +365,9 @@
    * @par Example
    * @code
    * boost::asio::ip::tcp::acceptor acceptor(io_service);
- * acceptor.open(boost::asio::ip::tcp::v4());
- * acceptor.bind(boost::asio::ip::tcp::endpoint(12345));
+ * boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
+ * acceptor.open(endpoint.protocol());
+ * acceptor.bind(endpoint);
    * @endcode
    */
   void bind(const endpoint_type& endpoint)
@@ -389,9 +390,10 @@
    * @par Example
    * @code
    * boost::asio::ip::tcp::acceptor acceptor(io_service);
- * acceptor.open(boost::asio::ip::tcp::v4());
+ * boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
+ * acceptor.open(endpoint.protocol());
    * boost::system::error_code ec;
- * acceptor.bind(boost::asio::ip::tcp::endpoint(12345), ec);
+ * acceptor.bind(endpoint, ec);
    * if (ec)
    * {
    * // An error occurred.

Modified: branches/release/boost/asio/basic_waitable_timer.hpp
==============================================================================
--- branches/release/boost/asio/basic_waitable_timer.hpp (original)
+++ branches/release/boost/asio/basic_waitable_timer.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -38,7 +38,8 @@
  * If the wait() or async_wait() function is called on an expired timer, the
  * wait operation will complete immediately.
  *
- * Most applications will use the boost::asio::waitable_timer typedef.
+ * Most applications will use one of the boost::asio::steady_timer,
+ * boost::asio::system_timer or boost::asio::high_resolution_timer typedefs.
  *
  * @note This waitable timer functionality is for use with the C++11 standard
  * library's @c <chrono> facility, or with the Boost.Chrono library.
@@ -48,20 +49,20 @@
  * @e Shared @e objects: Unsafe.
  *
  * @par Examples
- * Performing a blocking wait:
+ * Performing a blocking wait (C++11):
  * @code
  * // Construct a timer without setting an expiry time.
- * boost::asio::waitable_timer timer(io_service);
+ * boost::asio::steady_timer timer(io_service);
  *
  * // Set an expiry time relative to now.
- * timer.expires_from_now(boost::posix_time::seconds(5));
+ * timer.expires_from_now(std::chrono::seconds(5));
  *
  * // Wait for the timer to expire.
  * timer.wait();
  * @endcode
  *
  * @par
- * Performing an asynchronous wait:
+ * Performing an asynchronous wait (C++11):
  * @code
  * void handler(const boost::system::error_code& error)
  * {
@@ -74,14 +75,14 @@
  * ...
  *
  * // Construct a timer with an absolute expiry time.
- * boost::asio::waitable_timer timer(io_service,
- * boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+ * boost::asio::steady_timer timer(io_service,
+ * std::chrono::steady_clock::now() + std::chrono::seconds(60));
  *
  * // Start an asynchronous wait.
  * timer.async_wait(handler);
  * @endcode
  *
- * @par Changing an active waitable_timer's expiry time
+ * @par Changing an active waitable timer's expiry time
  *
  * Changing the expiry time of a timer while there are pending asynchronous
  * waits causes those wait operations to be cancelled. To ensure that the action

Modified: branches/release/boost/asio/detail/hash_map.hpp
==============================================================================
--- branches/release/boost/asio/detail/hash_map.hpp (original)
+++ branches/release/boost/asio/detail/hash_map.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -181,6 +181,7 @@
   void erase(iterator it)
   {
     BOOST_ASIO_ASSERT(it != values_.end());
+ BOOST_ASIO_ASSERT(num_buckets_ != 0);
 
     size_t bucket = calculate_hash_value(it->first) % num_buckets_;
     bool is_first = (it == buckets_[bucket].first);
@@ -244,6 +245,7 @@
     if (num_buckets == num_buckets_)
       return;
     num_buckets_ = num_buckets;
+ BOOST_ASIO_ASSERT(num_buckets_ != 0);
 
     iterator end_iter = values_.end();
 

Modified: branches/release/boost/asio/detail/impl/epoll_reactor.ipp
==============================================================================
--- branches/release/boost/asio/detail/impl/epoll_reactor.ipp (original)
+++ branches/release/boost/asio/detail/impl/epoll_reactor.ipp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -607,8 +607,9 @@
 
 operation* epoll_reactor::descriptor_state::perform_io(uint32_t events)
 {
+ mutex_.lock();
   perform_io_cleanup_on_block_exit io_cleanup(reactor_);
- mutex::scoped_lock descriptor_lock(mutex_);
+ mutex::scoped_lock descriptor_lock(mutex_, mutex::scoped_lock::adopt_lock);
 
   // Exception operations must be processed first to ensure that any
   // out-of-band data is read before normal data.

Modified: branches/release/boost/asio/detail/impl/signal_set_service.ipp
==============================================================================
--- branches/release/boost/asio/detail/impl/signal_set_service.ipp (original)
+++ branches/release/boost/asio/detail/impl/signal_set_service.ipp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -162,14 +162,22 @@
   switch (fork_ev)
   {
   case boost::asio::io_service::fork_prepare:
- reactor_.deregister_internal_descriptor(
- state->read_descriptor_, reactor_data_);
- state->fork_prepared_ = true;
+ {
+ int read_descriptor = state->read_descriptor_;
+ state->fork_prepared_ = true;
+ lock.unlock();
+ reactor_.deregister_internal_descriptor(read_descriptor, reactor_data_);
+ }
     break;
   case boost::asio::io_service::fork_parent:
- state->fork_prepared_ = false;
- reactor_.register_internal_descriptor(reactor::read_op,
- state->read_descriptor_, reactor_data_, new pipe_read_op);
+ if (state->fork_prepared_)
+ {
+ int read_descriptor = state->read_descriptor_;
+ state->fork_prepared_ = false;
+ lock.unlock();
+ reactor_.register_internal_descriptor(reactor::read_op,
+ read_descriptor, reactor_data_, new pipe_read_op);
+ }
     break;
   case boost::asio::io_service::fork_child:
     if (state->fork_prepared_)
@@ -177,10 +185,12 @@
       boost::asio::detail::signal_blocker blocker;
       close_descriptors();
       open_descriptors();
+ int read_descriptor = state->read_descriptor_;
       state->fork_prepared_ = false;
+ lock.unlock();
+ reactor_.register_internal_descriptor(reactor::read_op,
+ read_descriptor, reactor_data_, new pipe_read_op);
     }
- reactor_.register_internal_descriptor(reactor::read_op,
- state->read_descriptor_, reactor_data_, new pipe_read_op);
     break;
   default:
     break;
@@ -481,8 +491,10 @@
 
 #if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
   // Register for pipe readiness notifications.
+ int read_descriptor = state->read_descriptor_;
+ lock.unlock();
   service->reactor_.register_internal_descriptor(reactor::read_op,
- state->read_descriptor_, service->reactor_data_, new pipe_read_op);
+ read_descriptor, service->reactor_data_, new pipe_read_op);
 #endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
 }
 
@@ -495,8 +507,11 @@
   {
 #if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
     // Disable the pipe readiness notifications.
+ int read_descriptor = state->read_descriptor_;
+ lock.unlock();
     service->reactor_.deregister_descriptor(
- state->read_descriptor_, service->reactor_data_, false);
+ read_descriptor, service->reactor_data_, false);
+ lock.lock();
 #endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
 
     // Remove service from linked list of all services.

Modified: branches/release/boost/asio/detail/impl/win_iocp_io_service.ipp
==============================================================================
--- branches/release/boost/asio/detail/impl/win_iocp_io_service.ipp (original)
+++ branches/release/boost/asio/detail/impl/win_iocp_io_service.ipp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -236,8 +236,7 @@
   op->ready_ = 1;
 
   // Enqueue the operation on the I/O completion port.
- if (!::PostQueuedCompletionStatus(iocp_.handle,
- 0, overlapped_contains_result, op))
+ if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, op))
   {
     // Out of resources. Put on completed queue instead.
     mutex::scoped_lock lock(dispatch_mutex_);
@@ -257,8 +256,7 @@
     op->ready_ = 1;
 
     // Enqueue the operation on the I/O completion port.
- if (!::PostQueuedCompletionStatus(iocp_.handle,
- 0, overlapped_contains_result, op))
+ if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, op))
     {
       // Out of resources. Put on completed queue instead.
       mutex::scoped_lock lock(dispatch_mutex_);
@@ -285,8 +283,7 @@
   if (::InterlockedCompareExchange(&op->ready_, 1, 0) == 1)
   {
     // Enqueue the operation on the I/O completion port.
- if (!::PostQueuedCompletionStatus(iocp_.handle,
- 0, overlapped_contains_result, op))
+ if (!::PostQueuedCompletionStatus(iocp_.handle, 0, 0, op))
     {
       // Out of resources. Put on completed queue instead.
       mutex::scoped_lock lock(dispatch_mutex_);

Modified: branches/release/boost/asio/detail/scoped_lock.hpp
==============================================================================
--- branches/release/boost/asio/detail/scoped_lock.hpp (original)
+++ branches/release/boost/asio/detail/scoped_lock.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -29,8 +29,18 @@
   : private noncopyable
 {
 public:
+ // Tag type used to distinguish constructors.
+ enum adopt_lock_t { adopt_lock };
+
+ // Constructor adopts a lock that is already held.
+ scoped_lock(Mutex& m, adopt_lock_t)
+ : mutex_(m),
+ locked_(true)
+ {
+ }
+
   // Constructor acquires the lock.
- scoped_lock(Mutex& m)
+ explicit scoped_lock(Mutex& m)
     : mutex_(m)
   {
     mutex_.lock();

Modified: branches/release/boost/asio/handler_type.hpp
==============================================================================
--- branches/release/boost/asio/handler_type.hpp (original)
+++ branches/release/boost/asio/handler_type.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -38,6 +38,8 @@
   typedef Handler type;
 };
 
+#if !defined(GENERATING_DOCUMENTATION)
+
 template <typename Handler, typename Signature>
 struct handler_type<const Handler, Signature>
   : handler_type<Handler, Signature> {};
@@ -99,6 +101,8 @@
 struct handler_type<ReturnType(Arg1, Arg2, Arg3, Arg4, Arg5), Signature>
   : handler_type<ReturnType(*)(Arg1, Arg2, Arg3, Arg4, Arg5), Signature> {};
 
+#endif // !defined(GENERATING_DOCUMENTATION)
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/release/boost/asio/impl/src.cpp
==============================================================================
--- branches/release/boost/asio/impl/src.cpp (original)
+++ branches/release/boost/asio/impl/src.cpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -13,13 +13,13 @@
   || defined(__DMC__)
 # pragma message ( \
     "This file is deprecated. " \
- "Please #include <boost/asio/impl/src.hpp> instead.>)
+ "Please #include <boost/asio/impl/src.hpp> instead.")
 #elif defined(__GNUC__) \
   || defined(__HP_aCC) \
   || defined(__SUNPRO_CC) \
   || defined(__IBMCPP__)
 # warning "This file is deprecated."
-# warning "Please #include <boost/asio/impl/src.hpp> instead.>
+# warning "Please #include <boost/asio/impl/src.hpp> instead."
 #endif
 
 #include <boost/asio/impl/src.hpp>

Modified: branches/release/boost/asio/spawn.hpp
==============================================================================
--- branches/release/boost/asio/spawn.hpp (original)
+++ branches/release/boost/asio/spawn.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -27,10 +27,34 @@
 namespace boost {
 namespace asio {
 
+/// Context object the represents the currently executing coroutine.
+/**
+ * The basic_yield_context class is used to represent the currently executing
+ * stackful coroutine. A basic_yield_context may be passed as a handler to an
+ * asynchronous operation. For example:
+ *
+ * @code template <typename Handler>
+ * void my_coroutine(basic_yield_context<Handler> yield)
+ * {
+ * ...
+ * std::size_t n = my_socket.async_read_some(buffer, yield);
+ * ...
+ * } @endcode
+ *
+ * The initiating function (async_read_some in the above example) suspends the
+ * current coroutine. The coroutine is resumed when the asynchronous operation
+ * completes, and the result of the operation is returned.
+ */
 template <typename Handler>
 class basic_yield_context
 {
 public:
+ /// Construct a yield context to represent the specified coroutine.
+ /**
+ * Most applications do not need to use this constructor. Instead, the
+ * spawn() function passes a yield context as an argument to the coroutine
+ * function.
+ */
   basic_yield_context(
       const detail::weak_ptr<boost::coroutines::coroutine<void()> >& coro,
       boost::coroutines::coroutine<void()>::caller_type& ca, Handler& handler)
@@ -41,6 +65,25 @@
   {
   }
 
+ /// Return a yield context that sets the specified error_code.
+ /**
+ * By default, when a yield context is used with an asynchronous operation, a
+ * non-success error_code is converted to system_error and thrown. This
+ * operator may be used to specify an error_code object that should instead be
+ * set with the asynchronous operation's result. For example:
+ *
+ * @code template <typename Handler>
+ * void my_coroutine(basic_yield_context<Handler> yield)
+ * {
+ * ...
+ * std::size_t n = my_socket.async_read_some(buffer, yield[ec]);
+ * if (ec)
+ * {
+ * // An error occurred.
+ * }
+ * ...
+ * } @endcode
+ */
   basic_yield_context operator[](boost::system::error_code& ec)
   {
     basic_yield_context tmp(*this);
@@ -58,6 +101,7 @@
 };
 
 #if defined(GENERATING_DOCUMENTATION)
+/// Context object the represents the currently executing coroutine.
 typedef basic_yield_context<unspecified> yield_context;
 #else // defined(GENERATING_DOCUMENTATION)
 typedef basic_yield_context<
@@ -66,30 +110,123 @@
     detail::is_continuation_if_running> > yield_context;
 #endif // defined(GENERATING_DOCUMENTATION)
 
+/**
+ * @defgroup spawn boost::asio::spawn
+ *
+ * @brief Start a new stackful coroutine.
+ *
+ * The spawn() function is a high-level wrapper over the Boost.Coroutine
+ * library. This function enables programs to implement asynchronous logic in a
+ * synchronous manner, as illustrated by the following example:
+ *
+ * @code boost::asio::spawn(my_strand, do_echo);
+ *
+ * // ...
+ *
+ * void do_echo(boost::asio::yield_context yield)
+ * {
+ * try
+ * {
+ * char data[128];
+ * for (;;)
+ * {
+ * std::size_t length =
+ * my_socket.async_read_some(
+ * boost::asio::buffer(data), yield);
+ *
+ * boost::asio::async_write(my_socket,
+ * boost::asio::buffer(data, length), yield);
+ * }
+ * }
+ * catch (std::exception& e)
+ * {
+ * // ...
+ * }
+ * } @endcode
+ */
+/*@{*/
+
+/// Start a new stackful coroutine, calling the specified handler when it
+/// completes.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param handler A handler to be called when the coroutine exits. More
+ * importantly, the handler provides an execution context (via the the handler
+ * invocation hook) for the coroutine. The handler must have the signature:
+ * @code void handler(); @endcode
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(basic_yield_context<Handler> yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Handler, typename Function>
 void spawn(BOOST_ASIO_MOVE_ARG(Handler) handler,
     BOOST_ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/// Start a new stackful coroutine, inheriting the execution context of another.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param ctx Identifies the current coroutine as a parent of the new
+ * coroutine. This specifies that the new coroutine should inherit the
+ * execution context of the parent. For example, if the parent coroutine is
+ * executing in a particular strand, then the new coroutine will execute in the
+ * same strand.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(basic_yield_context<Handler> yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Handler, typename Function>
 void spawn(basic_yield_context<Handler> ctx,
     BOOST_ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/// Start a new stackful coroutine that executes in the contex of a strand.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param strand Identifies a strand. By starting multiple coroutines on the
+ * same strand, the implementation ensures that none of those coroutines can
+ * execute simultaneously.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(yield_context yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Function>
 void spawn(boost::asio::io_service::strand strand,
     BOOST_ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/// Start a new stackful coroutine that executes on a given io_service.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param io_service Identifies the io_service that will run the coroutine. The
+ * new coroutine is implicitly given its own strand within this io_service.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(yield_context yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Function>
 void spawn(boost::asio::io_service& io_service,
     BOOST_ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/*@}*/
+
 } // namespace asio
 } // namespace boost
 

Modified: branches/release/boost/asio/ssl/context.hpp
==============================================================================
--- branches/release/boost/asio/ssl/context.hpp (original)
+++ branches/release/boost/asio/ssl/context.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -110,6 +110,35 @@
    */
   BOOST_ASIO_DECL impl_type impl();
 
+ /// Clear options on the context.
+ /**
+ * This function may be used to configure the SSL options used by the context.
+ *
+ * @param o A bitmask of options. The available option values are defined in
+ * the context_base class. The specified options, if currently enabled on the
+ * context, are cleared.
+ *
+ * @throws boost::system::system_error Thrown on failure.
+ *
+ * @note Calls @c SSL_CTX_clear_options.
+ */
+ BOOST_ASIO_DECL void clear_options(options o);
+
+ /// Clear options on the context.
+ /**
+ * This function may be used to configure the SSL options used by the context.
+ *
+ * @param o A bitmask of options. The available option values are defined in
+ * the context_base class. The specified options, if currently enabled on the
+ * context, are cleared.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @note Calls @c SSL_CTX_clear_options.
+ */
+ BOOST_ASIO_DECL boost::system::error_code clear_options(options o,
+ boost::system::error_code& ec);
+
   /// Set options on the context.
   /**
    * This function may be used to configure the SSL options used by the context.

Modified: branches/release/boost/asio/ssl/context_base.hpp
==============================================================================
--- branches/release/boost/asio/ssl/context_base.hpp (original)
+++ branches/release/boost/asio/ssl/context_base.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -105,12 +105,20 @@
 
   /// Disable TLS v1.
   static const long no_tlsv1 = implementation_defined;
+
+ /// Disable compression. Compression is disabled by default.
+ static const long no_compression = implementation_defined;
 #else
   BOOST_ASIO_STATIC_CONSTANT(long, default_workarounds = SSL_OP_ALL);
   BOOST_ASIO_STATIC_CONSTANT(long, single_dh_use = SSL_OP_SINGLE_DH_USE);
   BOOST_ASIO_STATIC_CONSTANT(long, no_sslv2 = SSL_OP_NO_SSLv2);
   BOOST_ASIO_STATIC_CONSTANT(long, no_sslv3 = SSL_OP_NO_SSLv3);
   BOOST_ASIO_STATIC_CONSTANT(long, no_tlsv1 = SSL_OP_NO_TLSv1);
+# if defined(SSL_OP_NO_COMPRESSION)
+ BOOST_ASIO_STATIC_CONSTANT(long, no_compression = SSL_OP_NO_COMPRESSION);
+# else // defined(SSL_OP_NO_COMPRESSION)
+ BOOST_ASIO_STATIC_CONSTANT(long, no_compression = 0x20000L);
+# endif // defined(SSL_OP_NO_COMPRESSION)
 #endif
 
   /// File format types.

Modified: branches/release/boost/asio/ssl/detail/impl/openssl_init.ipp
==============================================================================
--- branches/release/boost/asio/ssl/detail/impl/openssl_init.ipp (original)
+++ branches/release/boost/asio/ssl/detail/impl/openssl_init.ipp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -45,10 +45,22 @@
       mutexes_[i].reset(new boost::asio::detail::mutex);
     ::CRYPTO_set_locking_callback(&do_init::openssl_locking_func);
     ::CRYPTO_set_id_callback(&do_init::openssl_id_func);
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ null_compression_methods_ = sk_SSL_COMP_new_null();
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
   }
 
   ~do_init()
   {
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ sk_SSL_COMP_free(null_compression_methods_);
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
     ::CRYPTO_set_id_callback(0);
     ::CRYPTO_set_locking_callback(0);
     ::ERR_free_strings();
@@ -61,6 +73,15 @@
 #endif // !defined(OPENSSL_NO_ENGINE)
   }
 
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ STACK_OF(SSL_COMP)* get_null_compression_methods() const
+ {
+ return null_compression_methods_;
+ }
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
 private:
   static unsigned long openssl_id_func()
   {
@@ -92,6 +113,12 @@
   // The thread identifiers to be used by openssl.
   boost::asio::detail::tss_ptr<void> thread_id_;
 #endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ STACK_OF(SSL_COMP)* null_compression_methods_;
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
 };
 
 boost::asio::detail::shared_ptr<openssl_init_base::do_init>
@@ -101,6 +128,15 @@
   return init;
 }
 
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+STACK_OF(SSL_COMP)* openssl_init_base::get_null_compression_methods()
+{
+ return instance()->get_null_compression_methods();
+}
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
 } // namespace detail
 } // namespace ssl
 } // namespace asio

Modified: branches/release/boost/asio/ssl/detail/openssl_init.hpp
==============================================================================
--- branches/release/boost/asio/ssl/detail/openssl_init.hpp (original)
+++ branches/release/boost/asio/ssl/detail/openssl_init.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -19,6 +19,7 @@
 #include <cstring>
 #include <boost/asio/detail/noncopyable.hpp>
 #include <boost/asio/detail/shared_ptr.hpp>
+#include <boost/asio/ssl/detail/openssl_types.hpp>
 
 #include <boost/asio/detail/push_options.hpp>
 
@@ -40,6 +41,14 @@
   // instance must be static in this function to ensure that it gets
   // initialised before any other global objects try to use it.
   BOOST_ASIO_DECL static boost::asio::detail::shared_ptr<do_init> instance();
+
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ // Get an empty stack of compression methods, to be used when disabling
+ // compression.
+ BOOST_ASIO_DECL static STACK_OF(SSL_COMP)* get_null_compression_methods();
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
 };
 
 template <bool Do_Init = true>
@@ -62,6 +71,12 @@
   {
   }
 
+#if !defined(SSL_OP_NO_COMPRESSION) \
+ && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ using openssl_init_base::get_null_compression_methods;
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+ // && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+
 private:
   // Instance to force initialisation of openssl at global scope.
   static openssl_init instance_;

Modified: branches/release/boost/asio/ssl/impl/context.ipp
==============================================================================
--- branches/release/boost/asio/ssl/impl/context.ipp (original)
+++ branches/release/boost/asio/ssl/impl/context.ipp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -162,6 +162,8 @@
         boost::asio::error::get_ssl_category());
     boost::asio::detail::throw_error(ec, "context");
   }
+
+ set_options(no_compression);
 }
 
 context::context(boost::asio::io_service&, context::method m)
@@ -224,6 +226,32 @@
   return handle_;
 }
 
+void context::clear_options(context::options o)
+{
+ boost::system::error_code ec;
+ clear_options(o, ec);
+ boost::asio::detail::throw_error(ec, "clear_options");
+}
+
+boost::system::error_code context::clear_options(
+ context::options o, boost::system::error_code& ec)
+{
+#if !defined(SSL_OP_NO_COMPRESSION)
+ if ((o & context::no_compression) != 0)
+ {
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ handle_->comp_methods = SSL_COMP_get_compression_methods();
+#endif // (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ o ^= context::no_compression;
+ }
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+
+ ::SSL_CTX_clear_options(handle_, o);
+
+ ec = boost::system::error_code();
+ return ec;
+}
+
 void context::set_options(context::options o)
 {
   boost::system::error_code ec;
@@ -234,6 +262,17 @@
 boost::system::error_code context::set_options(
     context::options o, boost::system::error_code& ec)
 {
+#if !defined(SSL_OP_NO_COMPRESSION)
+ if ((o & context::no_compression) != 0)
+ {
+#if (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ handle_->comp_methods =
+ boost::asio::ssl::detail::openssl_init<>::get_null_compression_methods();
+#endif // (OPENSSL_VERSION_NUMBER >= 0x00908000L)
+ o ^= context::no_compression;
+ }
+#endif // !defined(SSL_OP_NO_COMPRESSION)
+
   ::SSL_CTX_set_options(handle_, o);
 
   ec = boost::system::error_code();

Modified: branches/release/boost/asio/use_future.hpp
==============================================================================
--- branches/release/boost/asio/use_future.hpp (original)
+++ branches/release/boost/asio/use_future.hpp 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -23,27 +23,46 @@
 namespace boost {
 namespace asio {
 
+/// Class used to specify that an asynchronous operation should return a future.
+/**
+ * The use_future_t class is used to indicate that an asynchronous operation
+ * should return a std::future object. A use_future_t object may be passed as a
+ * handler to an asynchronous operation, typically using the special value @c
+ * boost::asio::use_future. For example:
+ *
+ * @code std::future<std::size_t> my_future
+ * = my_socket.async_read_some(my_buffer, boost::asio::use_future); @endcode
+ *
+ * The initiating function (async_read_some in the above example) returns a
+ * future that will receive the result of the operation. If the operation
+ * completes with an error_code indicating failure, it is converted into a
+ * system_error and passed back to the caller via the future.
+ */
 template <typename Allocator = std::allocator<void> >
 class use_future_t
 {
 public:
   typedef Allocator allocator_type;
 
+ /// Construct using default-constructed allocator.
   constexpr use_future_t()
   {
   }
 
+ /// Construct using specified allocator.
   explicit use_future_t(const Allocator& allocator)
     : allocator_(allocator)
   {
   }
 
+ /// Specify an alternate allocator.
   template <typename OtherAllocator>
   use_future_t<OtherAllocator> operator[](const OtherAllocator& allocator) const
   {
     return use_future_t<OtherAllocator>(allocator);
   }
 
+ /// Obtain allocator.
   allocator_type get_allocator() const
   {
     return allocator_;
@@ -53,7 +72,10 @@
   Allocator allocator_;
 };
 
-// A special value, similar to std::nothrow.
+/// A special value, similar to std::nothrow.
+/**
+ * See the documentation for boost::asio::use_future_t for a usage example.
+ */
 constexpr use_future_t<> use_future;
 
 } // namespace asio

Modified: branches/release/libs/asio/doc/overview.qbk
==============================================================================
--- branches/release/libs/asio/doc/overview.qbk (original)
+++ branches/release/libs/asio/doc/overview.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -19,8 +19,11 @@
   * [link boost_asio.overview.core.line_based Line-Based Operations]
   * [link boost_asio.overview.core.allocation Custom Memory Allocation]
   * [link boost_asio.overview.core.handler_tracking Handler Tracking]
+ * [link boost_asio.overview.core.coroutine Stackless Coroutines]
+ * [link boost_asio.overview.core.spawn Stackful Coroutines]
 * [link boost_asio.overview.networking Networking]
   * [link boost_asio.overview.networking.protocols TCP, UDP and ICMP]
+ * [link boost_asio.overview.networking.other_protocols Support for Other Protocols]
   * [link boost_asio.overview.networking.iostreams Socket Iostreams]
   * [link boost_asio.overview.networking.bsd_sockets The BSD Socket API and Boost.Asio]
 * [link boost_asio.overview.timers Timers]
@@ -43,6 +46,7 @@
   * [link boost_asio.overview.cpp2011.atomic Atomics]
   * [link boost_asio.overview.cpp2011.shared_ptr Shared Pointers]
   * [link boost_asio.overview.cpp2011.chrono Chrono]
+ * [link boost_asio.overview.cpp2011.futures Futures]
 * [link boost_asio.overview.implementation Platform-Specific Implementation Notes]
 
 [include overview/rationale.qbk]
@@ -59,6 +63,8 @@
 * [link boost_asio.overview.core.line_based Line-Based Operations]
 * [link boost_asio.overview.core.allocation Custom Memory Allocation]
 * [link boost_asio.overview.core.handler_tracking Handler Tracking]
+* [link boost_asio.overview.core.coroutine Stackless Coroutines]
+* [link boost_asio.overview.core.spawn Stackful Coroutines]
 
 [include overview/basics.qbk]
 [include overview/async.qbk]
@@ -70,16 +76,20 @@
 [include overview/line_based.qbk]
 [include overview/allocation.qbk]
 [include overview/handler_tracking.qbk]
+[include overview/coroutine.qbk]
+[include overview/spawn.qbk]
 
 [endsect]
 
 [section:networking Networking]
 
 * [link boost_asio.overview.networking.protocols TCP, UDP and ICMP]
+* [link boost_asio.overview.networking.other_protocols Support for Other Protocols]
 * [link boost_asio.overview.networking.iostreams Socket Iostreams]
 * [link boost_asio.overview.networking.bsd_sockets The BSD Socket API and Boost.Asio]
 
 [include overview/protocols.qbk]
+[include overview/other_protocols.qbk]
 [include overview/iostreams.qbk]
 [include overview/bsd_sockets.qbk]
 

Added: branches/release/libs/asio/doc/overview/coroutine.qbk
==============================================================================
--- (empty file)
+++ branches/release/libs/asio/doc/overview/coroutine.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -0,0 +1,51 @@
+[/
+ / Copyright (c) 2003-2013 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)
+ /]
+
+[section:coroutine Stackless Coroutines]
+
+The [link boost_asio.reference.coroutine `coroutine`] class provides support for
+stackless coroutines. Stackless coroutines enable programs to implement
+asynchronous logic in a synchronous manner, with minimal overhead, as shown in
+the following example:
+
+ struct session : boost::asio::coroutine
+ {
+ boost::shared_ptr<tcp::socket> socket_;
+ boost::shared_ptr<std::vector<char> > buffer_;
+
+ session(boost::shared_ptr<tcp::socket> socket)
+ : socket_(socket),
+ buffer_(new std::vector<char>(1024))
+ {
+ }
+
+ void operator()(boost::system::error_code ec = boost::system::error_code(), std::size_t n = 0)
+ {
+ if (!ec) reenter (this)
+ {
+ for (;;)
+ {
+ yield socket_->async_read_some(boost::asio::buffer(*buffer_), *this);
+ yield boost::asio::async_write(*socket_, boost::asio::buffer(*buffer_, n), *this);
+ }
+ }
+ }
+ };
+
+The `coroutine` class is used in conjunction with the pseudo-keywords
+`reenter`, `yield` and `fork`. These are preprocessor macros, and are
+implemented in terms of a `switch` statement using a technique similar to
+Duff's Device. The [link boost_asio.reference.coroutine `coroutine`] class's
+documentation provides a complete description of these pseudo-keywords.
+
+[heading See Also]
+
+[link boost_asio.reference.coroutine coroutine],
+[link boost_asio.examples.cpp03_examples.http_server_4 HTTP Server 4 example],
+[link boost_asio.overview.core.spawn Stackful Coroutines].
+
+[endsect]

Modified: branches/release/libs/asio/doc/overview/cpp2011.qbk
==============================================================================
--- branches/release/libs/asio/doc/overview/cpp2011.qbk (original)
+++ branches/release/libs/asio/doc/overview/cpp2011.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -22,6 +22,8 @@
 
 [link boost_asio.overview.cpp2011.chrono Chrono]
 
+[link boost_asio.overview.cpp2011.futures Futures]
+
 
 [section:move_objects Movable I/O Objects]
 
@@ -216,4 +218,37 @@
 
 [endsect]
 
+[section:futures Futures]
+
+The `boost::asio::use_future` special value provides first-class support for returning a
+C++11 `std::future` from an asynchronous operation's initiating function.
+
+To use `boost::asio::use_future`, pass it to an asynchronous operation instead of
+a normal completion handler. For example:
+
+ std::future<std::size_t> length =
+ my_socket.async_read_some(my_buffer, boost::asio::use_future);
+
+Where a handler signature has the form:
+
+ void handler(boost::system::error_code ec, result_type result);
+
+the initiating function returns a `std::future` templated on `result_type`.
+In the above example, this is `std::size_t`. If the asynchronous operation
+fails, the `error_code` is converted into a `system_error` exception and
+passed back to the caller through the future.
+
+Where a handler signature has the form:
+
+ void handler(boost::system::error_code ec);
+
+the initiating function returns `std::future<void>`. As above, an error
+is passed back in the future as a `system_error` exception.
+
+[link boost_asio.reference.use_future use_future],
+[link boost_asio.reference.use_future_t use_future_t],
+[link boost_asio.examples.cpp11_examples.futures Futures example (C++11)].
+
+[endsect]
+
 [endsect]

Added: branches/release/libs/asio/doc/overview/other_protocols.qbk
==============================================================================
--- (empty file)
+++ branches/release/libs/asio/doc/overview/other_protocols.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -0,0 +1,94 @@
+[/
+ / Copyright (c) 2003-2013 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)
+ /]
+
+[section:other_protocols Support for Other Protocols]
+
+Support for other socket protocols (such as Bluetooth or IRCOMM sockets) can be
+added by implementing the [link boost_asio.reference.Protocol protocol type
+requirements]. However, in many cases these protocols may also be used with
+Boost.Asio's generic protocol support. For this, Boost.Asio provides the following four
+classes:
+
+* [link boost_asio.reference.generic__datagram_protocol `generic::datagram_protocol`]
+* [link boost_asio.reference.generic__raw_protocol `generic::raw_protocol`]
+* [link boost_asio.reference.generic__seq_packet_protocol `generic::seq_packet_protocol`]
+* [link boost_asio.reference.generic__stream_protocol `generic::stream_protocol`]
+
+These classes implement the [link boost_asio.reference.Protocol protocol type
+requirements], but allow the user to specify the address family (e.g. `AF_INET`)
+and protocol type (e.g. `IPPROTO_TCP`) at runtime. For example:
+
+ boost::asio::generic::stream_protocol::socket my_socket(my_io_service);
+ my_socket.open(boost::asio::generic::stream_protocol(AF_INET, IPPROTO_TCP));
+ ...
+
+An endpoint class template, [link boost_asio.reference.generic__basic_endpoint
+`boost::asio::generic::basic_endpoint`], is included to support these protocol
+classes. This endpoint can hold any other endpoint type, provided its native
+representation fits into a `sockaddr_storage` object. This class will also
+convert from other types that implement the [link boost_asio.reference.Endpoint
+endpoint] type requirements:
+
+ boost::asio::ip::tcp::endpoint my_endpoint1 = ...;
+ boost::asio::generic::stream_protocol::endpoint my_endpoint2(my_endpoint1);
+
+The conversion is implicit, so as to support the following use cases:
+
+ boost::asio::generic::stream_protocol::socket my_socket(my_io_service);
+ boost::asio::ip::tcp::endpoint my_endpoint = ...;
+ my_socket.connect(my_endpoint);
+
+[heading C++11 Move Construction]
+
+When using C++11, it is possible to perform move construction from a socket (or
+acceptor) object to convert to the more generic protocol's socket (or acceptor)
+type. If the protocol conversion is valid:
+
+ Protocol1 p1 = ...;
+ Protocol2 p2(p1);
+
+then the corresponding socket conversion is allowed:
+
+ Protocol1::socket my_socket1(my_io_service);
+ ...
+ Protocol2::socket my_socket2(std::move(my_socket1));
+
+For example, one possible conversion is from a TCP socket to a generic
+stream-oriented socket:
+
+ boost::asio::ip::tcp::socket my_socket1(my_io_service);
+ ...
+ boost::asio::generic::stream_protocol::socket my_socket2(std::move(my_socket1));
+
+These conversions are also available for move-assignment.
+
+These conversions are not limited to the above generic protocol classes.
+User-defined protocols may take advantage of this feature by similarly ensuring
+the conversion from `Protocol1` to `Protocol2` is valid, as above.
+
+[heading Accepting Generic Sockets]
+
+As a convenience, a socket acceptor's `accept()` and `async_accept()` functions
+can directly accept into a different protocol's socket type, provided the
+corresponding protocol conversion is valid. For example, the following is
+supported because the protocol `boost::asio::ip::tcp` is convertible to
+`boost::asio::generic::stream_protocol`:
+
+ boost::asio::ip::tcp::acceptor my_acceptor(my_io_service);
+ ...
+ boost::asio::generic::stream_protocol::socket my_socket(my_io_service);
+ my_acceptor.accept(my_socket);
+
+[heading See Also]
+
+[link boost_asio.reference.generic__datagram_protocol `generic::datagram_protocol`],
+[link boost_asio.reference.generic__raw_protocol `generic::raw_protocol`],
+[link boost_asio.reference.generic__seq_packet_protocol `generic::seq_packet_protocol`],
+[link boost_asio.reference.generic__stream_protocol `generic::stream_protocol`],
+[link boost_asio.reference.Protocol protocol type requirements].
+
+[endsect]

Modified: branches/release/libs/asio/doc/overview/protocols.qbk
==============================================================================
--- branches/release/libs/asio/doc/overview/protocols.qbk (original)
+++ branches/release/libs/asio/doc/overview/protocols.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -138,12 +138,6 @@
 boost_asio.reference.basic_raw_socket.async_send_to async_send_to()] member
 functions.
 
-[heading Other Protocols]
-
-Support for other socket protocols (such as Bluetooth or IRCOMM sockets) can be
-added by implementing the [link boost_asio.reference.Protocol Protocol] type
-requirements.
-
 [heading See Also]
 
 [link boost_asio.reference.ip__tcp ip::tcp],

Added: branches/release/libs/asio/doc/overview/spawn.qbk
==============================================================================
--- (empty file)
+++ branches/release/libs/asio/doc/overview/spawn.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -0,0 +1,102 @@
+[/
+ / Copyright (c) 2003-2013 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)
+ /]
+
+[section:spawn Stackful Coroutines]
+
+The [link boost_asio.reference.spawn `spawn()`] function is a high-level wrapper for
+running stackful coroutines. It is based on the Boost.Coroutine library. The
+`spawn()` function enables programs to implement asynchronous logic in a
+synchronous manner, as shown in the following example:
+
+ boost::asio::spawn(my_strand, do_echo);
+
+ // ...
+
+ void do_echo(boost::asio::yield_context yield)
+ {
+ try
+ {
+ char data[128];
+ for (;;)
+ {
+ std::size_t length =
+ my_socket.async_read_some(
+ boost::asio::buffer(data), yield);
+
+ boost::asio::async_write(my_socket,
+ boost::asio::buffer(data, length), yield);
+ }
+ }
+ catch (std::exception& e)
+ {
+ // ...
+ }
+ }
+
+The first argument to `spawn()` may be a
+[link boost_asio.reference.io_service__strand `strand`],
+[link boost_asio.reference.io_service `io_service`], or
+[link boost_asio.reference.CompletionHandler completion handler].
+This argument determines the context in which the coroutine is permitted to
+execute. For example, a server's per-client object may consist of multiple
+coroutines; they should all run on the same `strand` so that no explicit
+synchronisation is required.
+
+The second argument is a function object with signature:
+
+ void coroutine(boost::asio::yield_context yield);
+
+that specifies the code to be run as part of the coroutine. The parameter
+`yield` may be passed to an asynchronous operation in place of the completion
+handler, as in:
+
+ std::size_t length =
+ my_socket.async_read_some(
+ boost::asio::buffer(data), yield);
+
+This starts the asynchronous operation and suspends the coroutine. The
+coroutine will be resumed automatically when the asynchronous operation
+completes.
+
+Where an asynchronous operation's handler signature has the form:
+
+ void handler(boost::system::error_code ec, result_type result);
+
+the initiating function returns the result_type. In the `async_read_some`
+example above, this is `size_t`. If the asynchronous operation fails, the
+`error_code` is converted into a `system_error` exception and thrown.
+
+Where a handler signature has the form:
+
+ void handler(boost::system::error_code ec);
+
+the initiating function returns `void`. As above, an error is passed back to
+the coroutine as a `system_error` exception.
+
+To collect the `error_code` from an operation, rather than have it throw an
+exception, associate the output variable with the `yield_context` as follows:
+
+ boost::system::error_code ec;
+ std::size_t length =
+ my_socket.async_read_some(
+ boost::asio::buffer(data), yield[ec]);
+
+[*Note:] if `spawn()` is used with a custom completion handler of type
+`Handler`, the function object signature is actually:
+
+ void coroutine(boost::asio::basic_yield_context<Handler> yield);
+
+[heading See Also]
+
+[link boost_asio.reference.spawn spawn],
+[link boost_asio.reference.yield_context yield_context],
+[link boost_asio.reference.basic_yield_context basic_yield_context],
+[link boost_asio.examples.cpp03_examples.spawn Spawn example (C++03)],
+[link boost_asio.examples.cpp11_examples.spawn Spawn example (C++11)],
+[link boost_asio.overview.core.coroutine Stackless Coroutines].
+
+[endsect]

Modified: branches/release/libs/asio/doc/quickref.xml
==============================================================================
--- branches/release/libs/asio/doc/quickref.xml (original)
+++ branches/release/libs/asio/doc/quickref.xml 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -28,6 +28,7 @@
           <simplelist type="vert" columns="1">
             <member><link linkend="boost_asio.reference.const_buffer">const_buffer</link></member>
             <member><link linkend="boost_asio.reference.const_buffers_1">const_buffers_1</link></member>
+ <member><link linkend="boost_asio.reference.coroutine">coroutine</link></member>
             <member><link linkend="boost_asio.reference.invalid_service_owner">invalid_service_owner</link></member>
             <member><link linkend="boost_asio.reference.io_service">io_service</link></member>
             <member><link linkend="boost_asio.reference.io_service__id">io_service::id</link></member>
@@ -39,11 +40,14 @@
             <member><link linkend="boost_asio.reference.null_buffers">null_buffers</link></member>
             <member><link linkend="boost_asio.reference.service_already_exists">service_already_exists</link></member>
             <member><link linkend="boost_asio.reference.streambuf">streambuf</link></member>
+ <member><link linkend="boost_asio.reference.use_future_t">use_future_t</link></member>
+ <member><link linkend="boost_asio.reference.yield_context">yield_context</link></member>
           </simplelist>
           <bridgehead renderas="sect3">Class Templates</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="boost_asio.reference.basic_io_object">basic_io_object</link></member>
             <member><link linkend="boost_asio.reference.basic_streambuf">basic_streambuf</link></member>
+ <member><link linkend="boost_asio.reference.basic_yield_context">basic_yield_context</link></member>
             <member><link linkend="boost_asio.reference.buffered_read_stream">buffered_read_stream</link></member>
             <member><link linkend="boost_asio.reference.buffered_stream">buffered_stream</link></member>
             <member><link linkend="boost_asio.reference.buffered_write_stream">buffered_write_stream</link></member>
@@ -57,6 +61,7 @@
             <member><link linkend="boost_asio.reference.asio_handler_allocate">asio_handler_allocate</link></member>
             <member><link linkend="boost_asio.reference.asio_handler_deallocate">asio_handler_deallocate</link></member>
             <member><link linkend="boost_asio.reference.asio_handler_invoke">asio_handler_invoke</link></member>
+ <member><link linkend="boost_asio.reference.asio_handler_is_continuation">asio_handler_is_continuation</link></member>
             <member><link linkend="boost_asio.reference.async_read">async_read</link></member>
             <member><link linkend="boost_asio.reference.async_read_at">async_read_at</link></member>
             <member><link linkend="boost_asio.reference.async_read_until">async_read_until</link></member>
@@ -72,6 +77,7 @@
             <member><link linkend="boost_asio.reference.read">read</link></member>
             <member><link linkend="boost_asio.reference.read_at">read_at</link></member>
             <member><link linkend="boost_asio.reference.read_until">read_until</link></member>
+ <member><link linkend="boost_asio.reference.spawn">spawn</link></member>
             <member><link linkend="boost_asio.reference.transfer_all">transfer_all</link></member>
             <member><link linkend="boost_asio.reference.transfer_at_least">transfer_at_least</link></member>
             <member><link linkend="boost_asio.reference.transfer_exactly">transfer_exactly</link></member>
@@ -81,7 +87,11 @@
           </simplelist>
         </entry>
         <entry valign="top">
- <bridgehead renderas="sect3">Placeholders</bridgehead>
+ <bridgehead renderas="sect3">Special Values</bridgehead>
+ <simplelist type="vert" columns="1">
+ <member><link linkend="boost_asio.reference.use_future">use_future</link></member>
+ </simplelist>
+ <bridgehead renderas="sect3">Boost.Bind Placeholders</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="boost_asio.reference.placeholders__bytes_transferred">placeholders::bytes_transferred</link></member>
             <member><link linkend="boost_asio.reference.placeholders__error">placeholders::error</link></member>
@@ -97,6 +107,8 @@
           </simplelist>
           <bridgehead renderas="sect3">Type Traits</bridgehead>
           <simplelist type="vert" columns="1">
+ <member><link linkend="boost_asio.reference.async_result">async_result</link></member>
+ <member><link linkend="boost_asio.reference.handler_type">handler_type</link></member>
             <member><link linkend="boost_asio.reference.is_match_condition">is_match_condition</link></member>
             <member><link linkend="boost_asio.reference.is_read_buffered">is_read_buffered</link></member>
             <member><link linkend="boost_asio.reference.is_write_buffered">is_write_buffered</link></member>
@@ -146,6 +158,19 @@
         <entry valign="top">
           <bridgehead renderas="sect3">Classes</bridgehead>
           <simplelist type="vert" columns="1">
+ <member><link linkend="boost_asio.reference.generic__datagram_protocol">generic::datagram_protocol</link></member>
+ <member><link linkend="boost_asio.reference.generic__datagram_protocol.endpoint">generic::datagram_protocol::endpoint</link></member>
+ <member><link linkend="boost_asio.reference.generic__datagram_protocol.socket">generic::datagram_protocol::socket</link></member>
+ <member><link linkend="boost_asio.reference.generic__raw_protocol">generic::raw_protocol</link></member>
+ <member><link linkend="boost_asio.reference.generic__raw_protocol.endpoint">generic::raw_protocol::endpoint</link></member>
+ <member><link linkend="boost_asio.reference.generic__raw_protocol.socket">generic::raw_protocol::socket</link></member>
+ <member><link linkend="boost_asio.reference.generic__seq_packet_protocol">generic::seq_packet_protocol</link></member>
+ <member><link linkend="boost_asio.reference.generic__seq_packet_protocol.endpoint">generic::seq_packet_protocol::endpoint</link></member>
+ <member><link linkend="boost_asio.reference.generic__seq_packet_protocol.socket">generic::seq_packet_protocol::socket</link></member>
+ <member><link linkend="boost_asio.reference.generic__stream_protocol">generic::stream_protocol</link></member>
+ <member><link linkend="boost_asio.reference.generic__stream_protocol.endpoint">generic::stream_protocol::endpoint</link></member>
+ <member><link linkend="boost_asio.reference.generic__stream_protocol.iostream">generic::stream_protocol::iostream</link></member>
+ <member><link linkend="boost_asio.reference.generic__stream_protocol.socket">generic::stream_protocol::socket</link></member>
             <member><link linkend="boost_asio.reference.ip__address">ip::address</link></member>
             <member><link linkend="boost_asio.reference.ip__address_v4">ip::address_v4</link></member>
             <member><link linkend="boost_asio.reference.ip__address_v6">ip::address_v6</link></member>
@@ -166,18 +191,17 @@
             <member><link linkend="boost_asio.reference.ip__udp.socket">ip::udp::socket</link></member>
             <member><link linkend="boost_asio.reference.socket_base">socket_base</link></member>
           </simplelist>
+ </entry>
+ <entry valign="top">
           <bridgehead renderas="sect3">Free Functions</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="boost_asio.reference.async_connect">async_connect</link></member>
             <member><link linkend="boost_asio.reference.connect">connect</link></member>
             <member><link linkend="boost_asio.reference.ip__host_name">ip::host_name</link></member>
           </simplelist>
- </entry>
- <entry valign="top">
           <bridgehead renderas="sect3">Class Templates</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="boost_asio.reference.basic_datagram_socket">basic_datagram_socket</link></member>
- <member><link linkend="boost_asio.reference.basic_deadline_timer">basic_deadline_timer</link></member>
             <member><link linkend="boost_asio.reference.basic_raw_socket">basic_raw_socket</link></member>
             <member><link linkend="boost_asio.reference.basic_seq_packet_socket">basic_seq_packet_socket</link></member>
             <member><link linkend="boost_asio.reference.basic_socket">basic_socket</link></member>
@@ -185,6 +209,7 @@
             <member><link linkend="boost_asio.reference.basic_socket_iostream">basic_socket_iostream</link></member>
             <member><link linkend="boost_asio.reference.basic_socket_streambuf">basic_socket_streambuf</link></member>
             <member><link linkend="boost_asio.reference.basic_stream_socket">basic_stream_socket</link></member>
+ <member><link linkend="boost_asio.reference.generic__basic_endpoint">generic::basic_endpoint</link></member>
             <member><link linkend="boost_asio.reference.ip__basic_endpoint">ip::basic_endpoint</link></member>
             <member><link linkend="boost_asio.reference.ip__basic_resolver">ip::basic_resolver</link></member>
             <member><link linkend="boost_asio.reference.ip__basic_resolver_entry">ip::basic_resolver_entry</link></member>
@@ -322,6 +347,7 @@
           </simplelist>
           <bridgehead renderas="sect3">Type Requirements</bridgehead>
           <simplelist type="vert" columns="1">
+ <member><link linkend="boost_asio.reference.BufferedHandshakeHandler">BufferedHandshakeHandler</link></member>
             <member><link linkend="boost_asio.reference.HandshakeHandler">HandshakeHandler</link></member>
             <member><link linkend="boost_asio.reference.ShutdownHandler">ShutdownHandler</link></member>
           </simplelist>

Modified: branches/release/libs/asio/doc/reference.dox
==============================================================================
--- branches/release/libs/asio/doc/reference.dox (original)
+++ branches/release/libs/asio/doc/reference.dox 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -74,6 +74,7 @@
 #---------------------------------------------------------------------------
 INPUT = ./../../../boost/asio.hpp \
                          ./../../../boost/asio \
+ ./../../../boost/asio/generic \
                          ./../../../boost/asio/impl \
                          ./../../../boost/asio/ip \
                          ./../../../boost/asio/local \

Modified: branches/release/libs/asio/doc/reference.qbk
==============================================================================
--- branches/release/libs/asio/doc/reference.qbk (original)
+++ branches/release/libs/asio/doc/reference.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -15,6 +15,7 @@
 [include requirements/AsyncRandomAccessWriteDevice.qbk]
 [include requirements/AsyncReadStream.qbk]
 [include requirements/AsyncWriteStream.qbk]
+[include requirements/BufferedHandshakeHandler.qbk]
 [include requirements/CompletionHandler.qbk]
 [include requirements/ComposedConnectHandler.qbk]
 [include requirements/ConnectHandler.qbk]
@@ -111,9 +112,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -167,9 +168,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/handler_alloc_hook.hpp]
+['Header: ][^boost/asio/handler_alloc_hook.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -197,9 +198,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/handler_alloc_hook.hpp]
+['Header: ][^boost/asio/handler_alloc_hook.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -252,9 +253,53 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/handler_invoke_hook.hpp]
+['Header: ][^boost/asio/handler_invoke_hook.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:asio_handler_is_continuation asio_handler_is_continuation]
+
+[indexterm1 asio_handler_is_continuation]
+Default continuation function for handlers.
+
+
+ bool asio_handler_is_continuation(
+ ... );
+
+
+Asynchronous operations may represent a continuation of the asynchronous control flow associated with the current handler. The implementation can use this knowledge to optimise scheduling of the handler.
+
+Implement asio\_handler\_is\_continuation for your own handlers to indicate when a handler represents a continuation.
+
+The default implementation of the continuation hook returns `false`.
+
+
+[heading Example]
+
+
+
+ class my_handler;
+
+ bool asio_handler_is_continuation(my_handler* context)
+ {
+ return true;
+ }
+
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/handler_continuation_hook.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -271,7 +316,7 @@
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void ``[link boost_asio.reference.async_connect.overload1 async_connect]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_connect.overload1 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ComposedConnectHandler handler);
@@ -282,7 +327,7 @@
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void ``[link boost_asio.reference.async_connect.overload2 async_connect]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_connect.overload2 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -295,7 +340,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void ``[link boost_asio.reference.async_connect.overload3 async_connect]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_connect.overload3 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ConnectCondition connect_condition,
@@ -308,7 +353,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void ``[link boost_asio.reference.async_connect.overload4 async_connect]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_connect.overload4 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -318,9 +363,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/connect.hpp]
+['Header: ][^boost/asio/connect.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 async_connect (1 of 4 overloads)]
@@ -334,7 +379,7 @@
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ComposedConnectHandler handler);
@@ -429,7 +474,7 @@
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -524,7 +569,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ConnectCondition connect_condition,
@@ -654,7 +699,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -782,7 +827,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read.overload1 async_read]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read.overload1 async_read]``(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -793,7 +838,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read.overload2 async_read]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read.overload2 async_read]``(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -804,7 +849,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read.overload3 async_read]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read.overload3 async_read]``(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       ReadHandler handler);
@@ -815,7 +860,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read.overload4 async_read]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read.overload4 async_read]``(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -824,9 +869,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read.hpp]
+['Header: ][^boost/asio/read.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 async_read (1 of 4 overloads)]
@@ -839,7 +884,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -853,7 +898,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -922,7 +967,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -1005,7 +1050,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       ReadHandler handler);
@@ -1019,7 +1064,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1078,7 +1123,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -1093,7 +1138,7 @@
 
 * The completion\_condition function object returns 0.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1151,9 +1196,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_at.overload1 async_read_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_at.overload1 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.async_read_at.overload1 more...]]``
@@ -1163,9 +1208,9 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_at.overload2 async_read_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_at.overload2 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
       ReadHandler handler);
@@ -1175,9 +1220,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_at.overload3 async_read_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_at.overload3 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       ReadHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.async_read_at.overload3 more...]]``
@@ -1187,9 +1232,9 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_at.overload4 async_read_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_at.overload4 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       ReadHandler handler);
@@ -1197,9 +1242,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read_at.hpp]
+['Header: ][^boost/asio/read_at.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 async_read_at (1 of 4 overloads)]
@@ -1212,9 +1257,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -1298,9 +1343,9 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
       ReadHandler handler);
@@ -1384,9 +1429,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       ReadHandler handler);
 
@@ -1457,9 +1502,9 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       ReadHandler handler);
@@ -1530,7 +1575,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_until.overload1 async_read_until]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_until.overload1 async_read_until]``(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       char delim,
@@ -1541,7 +1586,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_until.overload2 async_read_until]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_until.overload2 async_read_until]``(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       const std::string & delim,
@@ -1552,7 +1597,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_until.overload3 async_read_until]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_until.overload3 async_read_until]``(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       const boost::regex & expr,
@@ -1564,19 +1609,19 @@
       typename Allocator,
       typename MatchCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.async_read_until.overload4 async_read_until]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_read_until.overload4 async_read_until]``(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
       ReadHandler handler,
- typename boost::enable_if< is_match_condition< MatchCondition > >::type * = 0);
+ typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
   `` [''''&raquo;''' [link boost_asio.reference.async_read_until.overload4 more...]]``
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read_until.hpp]
+['Header: ][^boost/asio/read_until.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 async_read_until (1 of 4 overloads)]
@@ -1589,7 +1634,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_until(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       char delim,
@@ -1604,7 +1649,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1694,7 +1739,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_until(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       const std::string & delim,
@@ -1709,7 +1754,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1799,7 +1844,7 @@
       typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_until(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       const boost::regex & expr,
@@ -1814,7 +1859,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains data that matches the regular expression, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the streambuf's get area already contains data that matches the regular expression, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1906,12 +1951,12 @@
       typename Allocator,
       typename MatchCondition,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_until(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
       ReadHandler handler,
- typename boost::enable_if< is_match_condition< MatchCondition > >::type * = 0);
+ typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
 
 
 This function is used to asynchronously read data into the specified streambuf until a user-defined match condition function object, when applied to the data contained in the streambuf, indicates a successful match. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:
@@ -1922,7 +1967,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the match condition function object already indicates a match, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the match condition function object already indicates a match, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -2034,6 +2079,109 @@
 
 [endsect]
 
+[section:async_result async_result]
+
+
+An interface for customising the behaviour of an initiating function.
+
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``>
+ class async_result
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.async_result.type [*type]]]
+ [The return type of the initiating function. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.async_result.async_result [*async_result]]]
+ [Construct an async result from a given handler. ]
+ ]
+
+ [
+ [[link boost_asio.reference.async_result.get [*get]]]
+ [Obtain the value to be returned from the initiating function. ]
+ ]
+
+]
+
+This template may be specialised for user-defined handler types.
+
+[heading Requirements]
+
+['Header: ][^boost/asio/async_result.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:async_result async_result::async_result]
+
+[indexterm2 async_result..async_result]
+Construct an async result from a given handler.
+
+
+ async_result(
+ Handler & );
+
+
+When using a specalised [link boost_asio.reference.async_result `async_result`], the constructor has an opportunity to initialise some state associated with the handler, which is then returned from the initiating function.
+
+
+[endsect]
+
+
+
+[section:get async_result::get]
+
+[indexterm2 get..async_result]
+Obtain the value to be returned from the initiating function.
+
+
+ type get();
+
+
+
+[endsect]
+
+
+
+[section:type async_result::type]
+
+[indexterm2 type..async_result]
+The return type of the initiating function.
+
+
+ typedef void type;
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/async_result.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[endsect]
+
 [section:async_write async_write]
 
 [indexterm1 async_write]
@@ -2044,7 +2192,7 @@
       typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write.overload1 async_write]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write.overload1 async_write]``(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -2055,7 +2203,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write.overload2 async_write]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write.overload2 async_write]``(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -2066,7 +2214,7 @@
       typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write.overload3 async_write]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write.overload3 async_write]``(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       WriteHandler handler);
@@ -2077,7 +2225,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write.overload4 async_write]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write.overload4 async_write]``(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -2086,9 +2234,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/write.hpp]
+['Header: ][^boost/asio/write.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 async_write (1 of 4 overloads)]
@@ -2101,7 +2249,7 @@
       typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -2115,7 +2263,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2170,7 +2318,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -2185,7 +2333,7 @@
 
 * The completion\_condition function object returns 0.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2254,7 +2402,7 @@
       typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename Allocator,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       WriteHandler handler);
@@ -2268,7 +2416,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2313,7 +2461,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -2328,7 +2476,7 @@
 
 * The completion\_condition function object returns 0.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2385,9 +2533,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write_at.overload1 async_write_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write_at.overload1 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.async_write_at.overload1 more...]]``
@@ -2397,9 +2545,9 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write_at.overload2 async_write_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write_at.overload2 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
       WriteHandler handler);
@@ -2409,9 +2557,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename Allocator,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write_at.overload3 async_write_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write_at.overload3 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       WriteHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.async_write_at.overload3 more...]]``
@@ -2421,9 +2569,9 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.async_write_at.overload4 async_write_at]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.async_write_at.overload4 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       WriteHandler handler);
@@ -2431,9 +2579,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/write_at.hpp]
+['Header: ][^boost/asio/write_at.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 async_write_at (1 of 4 overloads)]
@@ -2446,9 +2594,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -2518,9 +2666,9 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
       WriteHandler handler);
@@ -2605,9 +2753,9 @@
       typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename Allocator,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       WriteHandler handler);
 
@@ -2667,9 +2815,9 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       WriteHandler handler);
@@ -2959,7 +3107,9 @@
 
      Construct a basic_datagram_socket on an existing native socket.
 
- Move-construct a basic_datagram_socket from another. ]
+ Move-construct a basic_datagram_socket from another.
+
+ Move-construct a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -3045,7 +3195,9 @@
   
   [
     [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_datagram_socket from another. ]
+ [Move-assign a basic_datagram_socket from another.
+
+ Move-assign a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -3153,17 +3305,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_datagram_socket::assign]
 
@@ -3235,7 +3387,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -3300,7 +3452,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_receive.overload1 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_receive.overload1 more...]]``
@@ -3308,7 +3460,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_receive.overload2 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -3324,7 +3476,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -3381,7 +3533,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -3432,7 +3584,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_receive_from.overload1 async_receive_from]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_receive_from.overload1 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -3441,7 +3593,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_receive_from.overload2 async_receive_from]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_receive_from.overload2 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -3458,7 +3610,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive_from(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -3514,7 +3666,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive_from(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -3563,7 +3715,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_send.overload1 async_send]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_send.overload1 async_send]``(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_send.overload1 more...]]``
@@ -3571,7 +3723,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_send.overload2 async_send]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_send.overload2 async_send]``(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -3587,7 +3739,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -3644,7 +3796,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -3695,7 +3847,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_send_to.overload1 async_send_to]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_send_to.overload1 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -3704,7 +3856,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_datagram_socket.async_send_to.overload2 async_send_to]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_datagram_socket.async_send_to.overload2 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -3721,7 +3873,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send_to(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -3779,7 +3931,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send_to(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -4042,7 +4194,19 @@
   `` [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload5 more...]]``
 
 
-[section:overload1 basic_datagram_socket::basic_datagram_socket (1 of 5 overloads)]
+Move-construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.DatagramSocketService DatagramSocketService1]``>
+ ``[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload6 basic_datagram_socket]``(
+ basic_datagram_socket< Protocol1, DatagramSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload6 more...]]``
+
+
+[section:overload1 basic_datagram_socket::basic_datagram_socket (1 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] without opening it.
@@ -4071,7 +4235,7 @@
 
 
 
-[section:overload2 basic_datagram_socket::basic_datagram_socket (2 of 5 overloads)]
+[section:overload2 basic_datagram_socket::basic_datagram_socket (2 of 6 overloads)]
 
 
 Construct and open a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`].
@@ -4113,7 +4277,7 @@
 
 
 
-[section:overload3 basic_datagram_socket::basic_datagram_socket (3 of 5 overloads)]
+[section:overload3 basic_datagram_socket::basic_datagram_socket (3 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`], opening it and binding it to the given local endpoint.
@@ -4155,7 +4319,7 @@
 
 
 
-[section:overload4 basic_datagram_socket::basic_datagram_socket (4 of 5 overloads)]
+[section:overload4 basic_datagram_socket::basic_datagram_socket (4 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] on an existing native socket.
@@ -4200,7 +4364,7 @@
 
 
 
-[section:overload5 basic_datagram_socket::basic_datagram_socket (5 of 5 overloads)]
+[section:overload5 basic_datagram_socket::basic_datagram_socket (5 of 6 overloads)]
 
 
 Move-construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from another.
@@ -4233,6 +4397,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_datagram_socket::basic_datagram_socket (6 of 6 overloads)]
+
+
+Move-construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.DatagramSocketService DatagramSocketService1]``>
+ basic_datagram_socket(
+ basic_datagram_socket< Protocol1, DatagramSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+This constructor moves a datagram socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_datagram_socket::bind]
@@ -4406,9 +4608,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -4449,9 +4651,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -4853,9 +5055,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -4907,9 +5109,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -4961,9 +5163,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -4982,9 +5184,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -5278,9 +5480,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -5482,9 +5684,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -5537,9 +5739,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -5939,7 +6141,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -6025,7 +6229,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -6118,18 +6324,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -6202,9 +6408,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -6295,9 +6501,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -6667,9 +6873,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -6845,9 +7051,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -6974,13 +7180,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_datagram_socket::operator=]
 
 [indexterm2 operator=..basic_datagram_socket]
 Move-assign a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from another.
 
 
+ basic_datagram_socket & ``[link boost_asio.reference.basic_datagram_socket.operator_eq_.overload1 operator=]``(
+ basic_datagram_socket && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.DatagramSocketService DatagramSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_datagram_socket >::type & ``[link boost_asio.reference.basic_datagram_socket.operator_eq_.overload2 operator=]``(
+ basic_datagram_socket< Protocol1, DatagramSocketService1 > && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_datagram_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from another.
+
+
   basic_datagram_socket & operator=(
       basic_datagram_socket && other);
 
@@ -7009,6 +7236,45 @@
 
 
 
+[section:overload2 basic_datagram_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.DatagramSocketService DatagramSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_datagram_socket >::type & operator=(
+ basic_datagram_socket< Protocol1, DatagramSocketService1 > && other);
+
+
+This assignment operator moves a datagram socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_datagram_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_datagram_socket]
@@ -7021,9 +7287,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -7266,9 +7532,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -7510,9 +7776,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -7681,9 +7947,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -7926,9 +8192,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -7980,9 +8246,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -8218,9 +8484,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_datagram_socket.hpp]
+['Header: ][^boost/asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -8674,9 +8940,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
@@ -8761,9 +9027,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_deadline_timer.hpp]
+['Header: ][^boost/asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_wait basic_deadline_timer::async_wait]
@@ -8774,7 +9040,7 @@
 
   template<
       typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       WaitHandler handler);
 
 
@@ -9162,9 +9428,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_deadline_timer.hpp]
+['Header: ][^boost/asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -9611,9 +9877,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_deadline_timer.hpp]
+['Header: ][^boost/asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -9659,9 +9925,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_deadline_timer.hpp]
+['Header: ][^boost/asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -9680,9 +9946,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_deadline_timer.hpp]
+['Header: ][^boost/asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -9701,9 +9967,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_deadline_timer.hpp]
+['Header: ][^boost/asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -9884,9 +10150,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_io_object.hpp]
+['Header: ][^boost/asio/basic_io_object.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:basic_io_object basic_io_object::basic_io_object]
 
@@ -10094,9 +10360,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_io_object.hpp]
+['Header: ][^boost/asio/basic_io_object.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -10166,9 +10432,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_io_object.hpp]
+['Header: ][^boost/asio/basic_io_object.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -10425,7 +10691,9 @@
 
      Construct a basic_raw_socket on an existing native socket.
 
- Move-construct a basic_raw_socket from another. ]
+ Move-construct a basic_raw_socket from another.
+
+ Move-construct a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -10511,7 +10779,9 @@
   
   [
     [[link boost_asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_raw_socket from another. ]
+ [Move-assign a basic_raw_socket from another.
+
+ Move-assign a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -10619,17 +10889,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_raw_socket::assign]
 
@@ -10701,7 +10971,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -10766,7 +11036,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_receive.overload1 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_receive.overload1 more...]]``
@@ -10774,7 +11044,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_receive.overload2 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -10790,7 +11060,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -10847,7 +11117,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -10898,7 +11168,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_receive_from.overload1 async_receive_from]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_receive_from.overload1 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -10907,7 +11177,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_receive_from.overload2 async_receive_from]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_receive_from.overload2 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -10924,7 +11194,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive_from(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -10980,7 +11250,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive_from(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -11029,7 +11299,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_send.overload1 async_send]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_send.overload1 async_send]``(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_send.overload1 more...]]``
@@ -11037,7 +11307,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_send.overload2 async_send]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_send.overload2 async_send]``(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -11053,7 +11323,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -11110,7 +11380,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -11161,7 +11431,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_send_to.overload1 async_send_to]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_send_to.overload1 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -11170,7 +11440,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_raw_socket.async_send_to.overload2 async_send_to]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_raw_socket.async_send_to.overload2 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -11187,7 +11457,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send_to(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -11245,7 +11515,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send_to(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -11508,7 +11778,19 @@
   `` [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload5 more...]]``
 
 
-[section:overload1 basic_raw_socket::basic_raw_socket (1 of 5 overloads)]
+Move-construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.RawSocketService RawSocketService1]``>
+ ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload6 basic_raw_socket]``(
+ basic_raw_socket< Protocol1, RawSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload6 more...]]``
+
+
+[section:overload1 basic_raw_socket::basic_raw_socket (1 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] without opening it.
@@ -11537,7 +11819,7 @@
 
 
 
-[section:overload2 basic_raw_socket::basic_raw_socket (2 of 5 overloads)]
+[section:overload2 basic_raw_socket::basic_raw_socket (2 of 6 overloads)]
 
 
 Construct and open a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`].
@@ -11579,7 +11861,7 @@
 
 
 
-[section:overload3 basic_raw_socket::basic_raw_socket (3 of 5 overloads)]
+[section:overload3 basic_raw_socket::basic_raw_socket (3 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`], opening it and binding it to the given local endpoint.
@@ -11621,7 +11903,7 @@
 
 
 
-[section:overload4 basic_raw_socket::basic_raw_socket (4 of 5 overloads)]
+[section:overload4 basic_raw_socket::basic_raw_socket (4 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] on an existing native socket.
@@ -11666,7 +11948,7 @@
 
 
 
-[section:overload5 basic_raw_socket::basic_raw_socket (5 of 5 overloads)]
+[section:overload5 basic_raw_socket::basic_raw_socket (5 of 6 overloads)]
 
 
 Move-construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from another.
@@ -11699,6 +11981,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_raw_socket::basic_raw_socket (6 of 6 overloads)]
+
+
+Move-construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.RawSocketService RawSocketService1]``>
+ basic_raw_socket(
+ basic_raw_socket< Protocol1, RawSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+This constructor moves a raw socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_raw_socket::bind]
@@ -11872,9 +12192,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -11915,9 +12235,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -12319,9 +12639,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -12373,9 +12693,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -12427,9 +12747,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -12448,9 +12768,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -12744,9 +13064,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -12948,9 +13268,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -13003,9 +13323,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -13405,7 +13725,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -13491,7 +13813,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -13584,18 +13908,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -13668,9 +13992,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -13761,9 +14085,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -14133,9 +14457,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -14311,9 +14635,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -14440,13 +14764,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_raw_socket::operator=]
 
 [indexterm2 operator=..basic_raw_socket]
 Move-assign a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from another.
 
 
+ basic_raw_socket & ``[link boost_asio.reference.basic_raw_socket.operator_eq_.overload1 operator=]``(
+ basic_raw_socket && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.RawSocketService RawSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_raw_socket >::type & ``[link boost_asio.reference.basic_raw_socket.operator_eq_.overload2 operator=]``(
+ basic_raw_socket< Protocol1, RawSocketService1 > && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_raw_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from another.
+
+
   basic_raw_socket & operator=(
       basic_raw_socket && other);
 
@@ -14475,6 +14820,45 @@
 
 
 
+[section:overload2 basic_raw_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.RawSocketService RawSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_raw_socket >::type & operator=(
+ basic_raw_socket< Protocol1, RawSocketService1 > && other);
+
+
+This assignment operator moves a raw socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_raw_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_raw_socket]
@@ -14487,9 +14871,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -14732,9 +15116,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -14976,9 +15360,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -15147,9 +15531,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -15392,9 +15776,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -15446,9 +15830,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -15684,9 +16068,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_raw_socket.hpp]
+['Header: ][^boost/asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -16207,7 +16591,9 @@
 
      Construct a basic_seq_packet_socket on an existing native socket.
 
- Move-construct a basic_seq_packet_socket from another. ]
+ Move-construct a basic_seq_packet_socket from another.
+
+ Move-construct a basic_seq_packet_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -16293,7 +16679,9 @@
   
   [
     [[link boost_asio.reference.basic_seq_packet_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_seq_packet_socket from another. ]
+ [Move-assign a basic_seq_packet_socket from another.
+
+ Move-assign a basic_seq_packet_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -16393,17 +16781,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_seq_packet_socket::assign]
 
@@ -16475,7 +16863,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -16540,7 +16928,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_seq_packet_socket.async_receive.overload1 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_seq_packet_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags & out_flags,
       ReadHandler handler);
@@ -16549,7 +16937,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_seq_packet_socket.async_receive.overload2 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_seq_packet_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags in_flags,
       socket_base::message_flags & out_flags,
@@ -16566,7 +16954,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags & out_flags,
       ReadHandler handler);
@@ -16621,7 +17009,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags in_flags,
       socket_base::message_flags & out_flags,
@@ -16683,7 +17071,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -16951,7 +17339,19 @@
   `` [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload5 more...]]``
 
 
-[section:overload1 basic_seq_packet_socket::basic_seq_packet_socket (1 of 5 overloads)]
+Move-construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+ ``[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload6 basic_seq_packet_socket]``(
+ basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload6 more...]]``
+
+
+[section:overload1 basic_seq_packet_socket::basic_seq_packet_socket (1 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] without opening it.
@@ -16980,7 +17380,7 @@
 
 
 
-[section:overload2 basic_seq_packet_socket::basic_seq_packet_socket (2 of 5 overloads)]
+[section:overload2 basic_seq_packet_socket::basic_seq_packet_socket (2 of 6 overloads)]
 
 
 Construct and open a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`].
@@ -17022,7 +17422,7 @@
 
 
 
-[section:overload3 basic_seq_packet_socket::basic_seq_packet_socket (3 of 5 overloads)]
+[section:overload3 basic_seq_packet_socket::basic_seq_packet_socket (3 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`], opening it and binding it to the given local endpoint.
@@ -17064,7 +17464,7 @@
 
 
 
-[section:overload4 basic_seq_packet_socket::basic_seq_packet_socket (4 of 5 overloads)]
+[section:overload4 basic_seq_packet_socket::basic_seq_packet_socket (4 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] on an existing native socket.
@@ -17109,7 +17509,7 @@
 
 
 
-[section:overload5 basic_seq_packet_socket::basic_seq_packet_socket (5 of 5 overloads)]
+[section:overload5 basic_seq_packet_socket::basic_seq_packet_socket (5 of 6 overloads)]
 
 
 Move-construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another.
@@ -17142,6 +17542,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_seq_packet_socket::basic_seq_packet_socket (6 of 6 overloads)]
+
+
+Move-construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+ basic_seq_packet_socket(
+ basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+This constructor moves a sequenced packet socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_seq_packet_socket::bind]
@@ -17315,9 +17753,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -17358,9 +17796,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -17762,9 +18200,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -17816,9 +18254,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -17870,9 +18308,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -17891,9 +18329,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -18187,9 +18625,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -18391,9 +18829,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -18446,9 +18884,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -18848,7 +19286,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -18934,7 +19374,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -19027,18 +19469,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -19111,9 +19553,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -19204,9 +19646,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -19576,9 +20018,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -19754,9 +20196,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -19883,13 +20325,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_seq_packet_socket::operator=]
 
 [indexterm2 operator=..basic_seq_packet_socket]
 Move-assign a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another.
 
 
+ basic_seq_packet_socket & ``[link boost_asio.reference.basic_seq_packet_socket.operator_eq_.overload1 operator=]``(
+ basic_seq_packet_socket && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_seq_packet_socket >::type & ``[link boost_asio.reference.basic_seq_packet_socket.operator_eq_.overload2 operator=]``(
+ basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_seq_packet_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another.
+
+
   basic_seq_packet_socket & operator=(
       basic_seq_packet_socket && other);
 
@@ -19918,6 +20381,45 @@
 
 
 
+[section:overload2 basic_seq_packet_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_seq_packet_socket >::type & operator=(
+ basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other);
+
+
+This assignment operator moves a sequenced packet socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_seq_packet_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_seq_packet_socket]
@@ -19930,9 +20432,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -20196,9 +20698,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -20250,9 +20752,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -20421,9 +20923,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -20604,9 +21106,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -20658,9 +21160,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -20706,9 +21208,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]
+['Header: ][^boost/asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -21207,17 +21709,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_serial_port.hpp]
+['Header: ][^boost/asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_serial_port::assign]
 
@@ -21277,7 +21779,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -21334,7 +21836,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -21990,9 +22492,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_serial_port.hpp]
+['Header: ][^boost/asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -22268,18 +22770,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_serial_port.hpp]
+['Header: ][^boost/asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -22330,9 +22832,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_serial_port.hpp]
+['Header: ][^boost/asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -22351,9 +22853,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_serial_port.hpp]
+['Header: ][^boost/asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -22719,9 +23221,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_serial_port.hpp]
+['Header: ][^boost/asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -23072,9 +23574,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -23129,9 +23631,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_signal_set.hpp]
+['Header: ][^boost/asio/basic_signal_set.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:add basic_signal_set::add]
 
@@ -23230,7 +23732,7 @@
 
   template<
       typename ``[link boost_asio.reference.SignalHandler SignalHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       SignalHandler handler);
 
 
@@ -23814,9 +24316,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_signal_set.hpp]
+['Header: ][^boost/asio/basic_signal_set.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -23960,9 +24462,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_signal_set.hpp]
+['Header: ][^boost/asio/basic_signal_set.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -24179,7 +24681,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -24265,7 +24769,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -24358,17 +24864,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_socket::assign]
 
@@ -24431,7 +24937,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -24698,7 +25204,19 @@
   `` [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload5 more...]]``
 
 
-[section:overload1 basic_socket::basic_socket (1 of 5 overloads)]
+Move-construct a [link boost_asio.reference.basic_socket `basic_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketService SocketService1]``>
+ ``[link boost_asio.reference.basic_socket.basic_socket.overload6 basic_socket]``(
+ basic_socket< Protocol1, SocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload6 more...]]``
+
+
+[section:overload1 basic_socket::basic_socket (1 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_socket `basic_socket`] without opening it.
@@ -24727,7 +25245,7 @@
 
 
 
-[section:overload2 basic_socket::basic_socket (2 of 5 overloads)]
+[section:overload2 basic_socket::basic_socket (2 of 6 overloads)]
 
 
 Construct and open a [link boost_asio.reference.basic_socket `basic_socket`].
@@ -24769,7 +25287,7 @@
 
 
 
-[section:overload3 basic_socket::basic_socket (3 of 5 overloads)]
+[section:overload3 basic_socket::basic_socket (3 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_socket `basic_socket`], opening it and binding it to the given local endpoint.
@@ -24811,7 +25329,7 @@
 
 
 
-[section:overload4 basic_socket::basic_socket (4 of 5 overloads)]
+[section:overload4 basic_socket::basic_socket (4 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_socket `basic_socket`] on an existing native socket.
@@ -24856,7 +25374,7 @@
 
 
 
-[section:overload5 basic_socket::basic_socket (5 of 5 overloads)]
+[section:overload5 basic_socket::basic_socket (5 of 6 overloads)]
 
 
 Move-construct a [link boost_asio.reference.basic_socket `basic_socket`] from another.
@@ -24889,6 +25407,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_socket::basic_socket (6 of 6 overloads)]
+
+
+Move-construct a [link boost_asio.reference.basic_socket `basic_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketService SocketService1]``>
+ basic_socket(
+ basic_socket< Protocol1, SocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+This constructor moves a socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_socket `basic_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_socket::bind]
@@ -25056,9 +25612,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -25099,9 +25655,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -25485,9 +26041,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -25539,9 +26095,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -25593,9 +26149,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -25614,9 +26170,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -25908,9 +26464,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -26107,9 +26663,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -26162,9 +26718,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -26549,7 +27105,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -26635,7 +27193,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -26728,18 +27288,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -26812,9 +27372,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -26899,9 +27459,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27262,9 +27822,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27431,9 +27991,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27554,13 +28114,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_socket::operator=]
 
 [indexterm2 operator=..basic_socket]
 Move-assign a [link boost_asio.reference.basic_socket `basic_socket`] from another.
 
 
+ basic_socket & ``[link boost_asio.reference.basic_socket.operator_eq_.overload1 operator=]``(
+ basic_socket && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link boost_asio.reference.basic_socket `basic_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketService SocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket >::type & ``[link boost_asio.reference.basic_socket.operator_eq_.overload2 operator=]``(
+ basic_socket< Protocol1, SocketService1 > && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_socket `basic_socket`] from another.
+
+
   basic_socket & operator=(
       basic_socket && other);
 
@@ -27589,6 +28170,45 @@
 
 
 
+[section:overload2 basic_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_socket `basic_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketService SocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket >::type & operator=(
+ basic_socket< Protocol1, SocketService1 > && other);
+
+
+This assignment operator moves a socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_socket `basic_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_socket]
@@ -27601,9 +28221,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27655,9 +28275,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27709,9 +28329,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27874,9 +28494,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27928,9 +28548,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -27982,9 +28602,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -28030,9 +28650,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket.hpp]
+['Header: ][^boost/asio/basic_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -28540,7 +29160,9 @@
 
      Construct a basic_socket_acceptor on an existing native acceptor.
 
- Move-construct a basic_socket_acceptor from another. ]
+ Move-construct a basic_socket_acceptor from another.
+
+ Move-construct a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -28619,7 +29241,9 @@
   
   [
     [[link boost_asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket_acceptor from another. ]
+ [Move-assign a basic_socket_acceptor from another.
+
+ Move-assign a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -28697,9 +29321,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -28720,9 +29344,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:accept basic_socket_acceptor::accept]
 
@@ -28731,16 +29355,20 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``>
   void ``[link boost_asio.reference.basic_socket_acceptor.accept.overload1 accept]``(
- basic_socket< protocol_type, SocketService > & peer);
+ basic_socket< Protocol1, SocketService > & peer,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
   `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.accept.overload1 more...]]``
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``>
   boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.accept.overload2 accept]``(
- basic_socket< protocol_type, SocketService > & peer,
- boost::system::error_code & ec);
+ basic_socket< Protocol1, SocketService > & peer,
+ boost::system::error_code & ec,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
   `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.accept.overload2 more...]]``
 
 
@@ -28770,9 +29398,11 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``>
   void accept(
- basic_socket< protocol_type, SocketService > & peer);
+ basic_socket< Protocol1, SocketService > & peer,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
 
 
 This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.
@@ -28824,10 +29454,12 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``>
   boost::system::error_code accept(
- basic_socket< protocol_type, SocketService > & peer,
- boost::system::error_code & ec);
+ basic_socket< Protocol1, SocketService > & peer,
+ boost::system::error_code & ec,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
 
 
 This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.
@@ -29043,17 +29675,19 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
- void ``[link boost_asio.reference.basic_socket_acceptor.async_accept.overload1 async_accept]``(
- basic_socket< protocol_type, SocketService > & peer,
- AcceptHandler handler);
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_socket_acceptor.async_accept.overload1 async_accept]``(
+ basic_socket< Protocol1, SocketService > & peer,
+ AcceptHandler handler,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
   `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.async_accept.overload1 more...]]``
 
   template<
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
- void ``[link boost_asio.reference.basic_socket_acceptor.async_accept.overload2 async_accept]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_socket_acceptor.async_accept.overload2 async_accept]``(
       basic_socket< protocol_type, SocketService > & peer,
       endpoint_type & peer_endpoint,
       AcceptHandler handler);
@@ -29067,11 +29701,13 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
- void async_accept(
- basic_socket< protocol_type, SocketService > & peer,
- AcceptHandler handler);
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_accept(
+ basic_socket< Protocol1, SocketService > & peer,
+ AcceptHandler handler,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
 
 
 This function is used to asynchronously accept a new connection into a socket. The function call always returns immediately.
@@ -29133,7 +29769,7 @@
   template<
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
- void async_accept(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_accept(
       basic_socket< protocol_type, SocketService > & peer,
       endpoint_type & peer_endpoint,
       AcceptHandler handler);
@@ -29217,7 +29853,19 @@
   `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload5 more...]]``
 
 
-[section:overload1 basic_socket_acceptor::basic_socket_acceptor (1 of 5 overloads)]
+Move-construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+ ``[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload6 basic_socket_acceptor]``(
+ basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload6 more...]]``
+
+
+[section:overload1 basic_socket_acceptor::basic_socket_acceptor (1 of 6 overloads)]
 
 
 Construct an acceptor without opening it.
@@ -29246,7 +29894,7 @@
 
 
 
-[section:overload2 basic_socket_acceptor::basic_socket_acceptor (2 of 5 overloads)]
+[section:overload2 basic_socket_acceptor::basic_socket_acceptor (2 of 6 overloads)]
 
 
 Construct an open acceptor.
@@ -29288,7 +29936,7 @@
 
 
 
-[section:overload3 basic_socket_acceptor::basic_socket_acceptor (3 of 5 overloads)]
+[section:overload3 basic_socket_acceptor::basic_socket_acceptor (3 of 6 overloads)]
 
 
 Construct an acceptor opened on the given endpoint.
@@ -29348,7 +29996,7 @@
 
 
 
-[section:overload4 basic_socket_acceptor::basic_socket_acceptor (4 of 5 overloads)]
+[section:overload4 basic_socket_acceptor::basic_socket_acceptor (4 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] on an existing native acceptor.
@@ -29393,7 +30041,7 @@
 
 
 
-[section:overload5 basic_socket_acceptor::basic_socket_acceptor (5 of 5 overloads)]
+[section:overload5 basic_socket_acceptor::basic_socket_acceptor (5 of 6 overloads)]
 
 
 Move-construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another.
@@ -29426,31 +30074,69 @@
 [endsect]
 
 
-[endsect]
 
-[section:bind basic_socket_acceptor::bind]
+[section:overload6 basic_socket_acceptor::basic_socket_acceptor (6 of 6 overloads)]
 
-[indexterm2 bind..basic_socket_acceptor]
-Bind the acceptor to the given local endpoint.
 
+Move-construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type.
 
- void ``[link boost_asio.reference.basic_socket_acceptor.bind.overload1 bind]``(
- const endpoint_type & endpoint);
- `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.bind.overload1 more...]]``
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.bind.overload2 bind]``(
- const endpoint_type & endpoint,
- boost::system::error_code & ec);
- `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.bind.overload2 more...]]``
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+ basic_socket_acceptor(
+ basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
 
 
-[section:overload1 basic_socket_acceptor::bind (1 of 2 overloads)]
+This constructor moves an acceptor from one object to another.
 
 
-Bind the acceptor to the given local endpoint.
+[heading Parameters]
+
 
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] object from which the move will occur.]]
 
- void bind(
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:bind basic_socket_acceptor::bind]
+
+[indexterm2 bind..basic_socket_acceptor]
+Bind the acceptor to the given local endpoint.
+
+
+ void ``[link boost_asio.reference.basic_socket_acceptor.bind.overload1 bind]``(
+ const endpoint_type & endpoint);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.bind.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.bind.overload2 bind]``(
+ const endpoint_type & endpoint,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.bind.overload2 more...]]``
+
+
+[section:overload1 basic_socket_acceptor::bind (1 of 2 overloads)]
+
+
+Bind the acceptor to the given local endpoint.
+
+
+ void bind(
       const endpoint_type & endpoint);
 
 
@@ -29482,8 +30168,9 @@
 
 
    boost::asio::ip::tcp::acceptor acceptor(io_service);
- acceptor.open(boost::asio::ip::tcp::v4());
- acceptor.bind(boost::asio::ip::tcp::endpoint(12345));
+ boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
+ acceptor.open(endpoint.protocol());
+ acceptor.bind(endpoint);
 
 
 
@@ -29526,9 +30213,10 @@
 
 
    boost::asio::ip::tcp::acceptor acceptor(io_service);
- acceptor.open(boost::asio::ip::tcp::v4());
+ boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
+ acceptor.open(endpoint.protocol());
    boost::system::error_code ec;
- acceptor.bind(boost::asio::ip::tcp::endpoint(12345), ec);
+ acceptor.bind(endpoint, ec);
    if (ec)
    {
      // An error occurred.
@@ -29591,9 +30279,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -29634,9 +30322,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -29853,9 +30541,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -29907,9 +30595,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -29961,9 +30649,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -29982,9 +30670,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -30276,9 +30964,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -30473,9 +31161,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -30528,9 +31216,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -30819,9 +31507,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -30906,9 +31594,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31050,9 +31738,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31219,9 +31907,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31342,13 +32030,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_socket_acceptor::operator=]
 
 [indexterm2 operator=..basic_socket_acceptor]
 Move-assign a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another.
 
 
+ basic_socket_acceptor & ``[link boost_asio.reference.basic_socket_acceptor.operator_eq_.overload1 operator=]``(
+ basic_socket_acceptor && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket_acceptor >::type & ``[link boost_asio.reference.basic_socket_acceptor.operator_eq_.overload2 operator=]``(
+ basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_socket_acceptor::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another.
+
+
   basic_socket_acceptor & operator=(
       basic_socket_acceptor && other);
 
@@ -31377,6 +32086,45 @@
 
 
 
+[section:overload2 basic_socket_acceptor::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket_acceptor >::type & operator=(
+ basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other);
+
+
+This assignment operator moves an acceptor from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_socket_acceptor::protocol_type]
 
 [indexterm2 protocol_type..basic_socket_acceptor]
@@ -31389,9 +32137,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31443,9 +32191,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31497,9 +32245,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31551,9 +32299,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31605,9 +32353,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31659,9 +32407,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31707,9 +32455,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_acceptor.hpp]
+['Header: ][^boost/asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -31979,9 +32727,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_iostream.hpp]
+['Header: ][^boost/asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:basic_socket_iostream basic_socket_iostream::basic_socket_iostream]
 
@@ -32095,9 +32843,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_iostream.hpp]
+['Header: ][^boost/asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -32116,9 +32864,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_iostream.hpp]
+['Header: ][^boost/asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -32324,9 +33072,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_iostream.hpp]
+['Header: ][^boost/asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -32786,9 +33534,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_socket_streambuf::assign]
 
@@ -32860,7 +33608,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -33277,9 +34025,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -33320,9 +34068,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -33724,9 +34472,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -33778,9 +34526,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -33799,9 +34547,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -33853,9 +34601,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -33874,9 +34622,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -34329,9 +35077,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -34480,9 +35228,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -34551,9 +35299,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -34606,9 +35354,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -35008,7 +35756,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -35094,7 +35844,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -35187,18 +35939,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -35271,9 +36023,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -35367,9 +36119,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -35742,9 +36494,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -35920,9 +36672,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36078,9 +36830,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36153,9 +36905,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36207,9 +36959,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36378,9 +37130,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36432,9 +37184,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36486,9 +37238,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36534,9 +37286,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36876,9 +37628,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -36894,9 +37646,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_socket_streambuf.hpp]
+['Header: ][^boost/asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -37158,7 +37910,9 @@
 
      Construct a basic_stream_socket on an existing native socket.
 
- Move-construct a basic_stream_socket from another. ]
+ Move-construct a basic_stream_socket from another.
+
+ Move-construct a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -37244,7 +37998,9 @@
   
   [
     [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_stream_socket from another. ]
+ [Move-assign a basic_stream_socket from another.
+
+ Move-assign a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -37354,18 +38110,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign basic_stream_socket::assign]
 
@@ -37437,7 +38193,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -37503,7 +38259,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -37559,7 +38315,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_stream_socket.async_receive.overload1 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_stream_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.async_receive.overload1 more...]]``
@@ -37567,7 +38323,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void ``[link boost_asio.reference.basic_stream_socket.async_receive.overload2 async_receive]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_stream_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -37583,7 +38339,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -37640,7 +38396,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -37701,7 +38457,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_stream_socket.async_send.overload1 async_send]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_stream_socket.async_send.overload1 async_send]``(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.async_send.overload1 more...]]``
@@ -37709,7 +38465,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void ``[link boost_asio.reference.basic_stream_socket.async_send.overload2 async_send]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.basic_stream_socket.async_send.overload2 async_send]``(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -37725,7 +38481,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -37782,7 +38538,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -37844,7 +38600,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -38114,7 +38870,19 @@
   `` [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload5 more...]]``
 
 
-[section:overload1 basic_stream_socket::basic_stream_socket (1 of 5 overloads)]
+Move-construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.StreamSocketService StreamSocketService1]``>
+ ``[link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload6 basic_stream_socket]``(
+ basic_stream_socket< Protocol1, StreamSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload6 more...]]``
+
+
+[section:overload1 basic_stream_socket::basic_stream_socket (1 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] without opening it.
@@ -38143,7 +38911,7 @@
 
 
 
-[section:overload2 basic_stream_socket::basic_stream_socket (2 of 5 overloads)]
+[section:overload2 basic_stream_socket::basic_stream_socket (2 of 6 overloads)]
 
 
 Construct and open a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`].
@@ -38185,7 +38953,7 @@
 
 
 
-[section:overload3 basic_stream_socket::basic_stream_socket (3 of 5 overloads)]
+[section:overload3 basic_stream_socket::basic_stream_socket (3 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`], opening it and binding it to the given local endpoint.
@@ -38227,7 +38995,7 @@
 
 
 
-[section:overload4 basic_stream_socket::basic_stream_socket (4 of 5 overloads)]
+[section:overload4 basic_stream_socket::basic_stream_socket (4 of 6 overloads)]
 
 
 Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] on an existing native socket.
@@ -38272,7 +39040,7 @@
 
 
 
-[section:overload5 basic_stream_socket::basic_stream_socket (5 of 5 overloads)]
+[section:overload5 basic_stream_socket::basic_stream_socket (5 of 6 overloads)]
 
 
 Move-construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from another.
@@ -38305,6 +39073,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_stream_socket::basic_stream_socket (6 of 6 overloads)]
+
+
+Move-construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.StreamSocketService StreamSocketService1]``>
+ basic_stream_socket(
+ basic_stream_socket< Protocol1, StreamSocketService1 > && other,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+This constructor moves a stream socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_stream_socket::bind]
@@ -38478,9 +39284,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -38521,9 +39327,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -38925,9 +39731,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -38979,9 +39785,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -39033,9 +39839,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -39054,9 +39860,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -39350,9 +40156,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -39554,9 +40360,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -39609,9 +40415,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -40011,7 +40817,9 @@
 
      Construct a basic_socket on an existing native socket.
 
- Move-construct a basic_socket from another. ]
+ Move-construct a basic_socket from another.
+
+ Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -40097,7 +40905,9 @@
   
   [
     [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket from another. ]
+ [Move-assign a basic_socket from another.
+
+ Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -40190,18 +41000,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -40274,9 +41084,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -40367,9 +41177,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -40739,9 +41549,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -40917,9 +41727,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -41046,13 +41856,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_stream_socket::operator=]
 
 [indexterm2 operator=..basic_stream_socket]
 Move-assign a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from another.
 
 
+ basic_stream_socket & ``[link boost_asio.reference.basic_stream_socket.operator_eq_.overload1 operator=]``(
+ basic_stream_socket && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.StreamSocketService StreamSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_stream_socket >::type & ``[link boost_asio.reference.basic_stream_socket.operator_eq_.overload2 operator=]``(
+ basic_stream_socket< Protocol1, StreamSocketService1 > && other);
+ `` [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_stream_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from another.
+
+
   basic_stream_socket & operator=(
       basic_stream_socket && other);
 
@@ -41081,6 +41912,45 @@
 
 
 
+[section:overload2 basic_stream_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
+ typename ``[link boost_asio.reference.StreamSocketService StreamSocketService1]``>
+ enable_if< is_convertible< Protocol1, Protocol >::value, basic_stream_socket >::type & operator=(
+ basic_stream_socket< Protocol1, StreamSocketService1 > && other);
+
+
+This assignment operator moves a stream socket from one object to another.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[other][The other [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_stream_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_stream_socket]
@@ -41093,9 +41963,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -41478,9 +42348,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -41532,9 +42402,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -41703,9 +42573,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -41958,9 +42828,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -42012,9 +42882,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -42060,9 +42930,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_stream_socket.hpp]
+['Header: ][^boost/asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -42646,9 +43516,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_streambuf.hpp]
+['Header: ][^boost/asio/basic_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:basic_streambuf basic_streambuf::basic_streambuf]
@@ -42712,9 +43582,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_streambuf.hpp]
+['Header: ][^boost/asio/basic_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -42809,9 +43679,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_streambuf.hpp]
+['Header: ][^boost/asio/basic_streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -43090,7 +43960,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the boost::asio::waitable\_timer typedef.
+Most applications will use one of the [link boost_asio.reference.steady_timer `steady_timer`], [link boost_asio.reference.system_timer `system_timer`] or [link boost_asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -43100,20 +43970,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait:
+Performing a blocking wait (C++11):
 
    // Construct a timer without setting an expiry time.
- boost::asio::waitable_timer timer(io_service);
+ boost::asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
- timer.expires_from_now(boost::posix_time::seconds(5));
+ timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -43122,7 +43992,7 @@
 
 
 
-Performing an asynchronous wait:
+Performing an asynchronous wait (C++11):
 
    void handler(const boost::system::error_code& error)
    {
@@ -43135,8 +44005,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
- boost::asio::waitable_timer timer(io_service,
- boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+ boost::asio::steady_timer timer(io_service,
+ std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -43145,7 +44015,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -43187,9 +44057,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_wait basic_waitable_timer::async_wait]
@@ -43200,7 +44070,7 @@
 
   template<
       typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       WaitHandler handler);
 
 
@@ -43588,9 +44458,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -43609,9 +44479,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -44058,9 +44928,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -44106,9 +44976,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -44127,9 +44997,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -44148,9 +45018,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/basic_waitable_timer.hpp]
+['Header: ][^boost/asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -44231,6 +45101,112 @@
 
 [endsect]
 
+[section:basic_yield_context basic_yield_context]
+
+
+Context object the represents the currently executing coroutine.
+
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``>
+ class basic_yield_context
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_yield_context.basic_yield_context [*basic_yield_context]]]
+ [Construct a yield context to represent the specified coroutine. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_yield_context.operator_lb__rb_ [*operator\[\]]]]
+ [Return a yield context that sets the specified error_code. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_yield_context `basic_yield_context`] class is used to represent the currently executing stackful coroutine. A [link boost_asio.reference.basic_yield_context `basic_yield_context`] may be passed as a handler to an asynchronous operation. For example:
+
+
+
+ template <typename Handler>
+ void my_coroutine(basic_yield_context<Handler> yield)
+ {
+ ...
+ std::size_t n = my_socket.async_read_some(buffer, yield);
+ ...
+ }
+
+
+
+
+The initiating function (async\_read\_some in the above example) suspends the current coroutine. The coroutine is resumed when the asynchronous operation completes, and the result of the operation is returned.
+
+[heading Requirements]
+
+['Header: ][^boost/asio/spawn.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:basic_yield_context basic_yield_context::basic_yield_context]
+
+[indexterm2 basic_yield_context..basic_yield_context]
+Construct a yield context to represent the specified coroutine.
+
+
+ basic_yield_context(
+ const detail::weak_ptr< boost::coroutines::coroutine< void()> > & coro,
+ boost::coroutines::coroutine< void()>::caller_type & ca,
+ Handler & handler);
+
+
+Most applications do not need to use this constructor. Instead, the `spawn()` function passes a yield context as an argument to the coroutine function.
+
+
+[endsect]
+
+
+
+[section:operator_lb__rb_ basic_yield_context::operator\[\]]
+
+[indexterm2 operator\[\]..basic_yield_context]
+Return a yield context that sets the specified error\_code.
+
+
+ basic_yield_context operator[](
+ boost::system::error_code & ec);
+
+
+By default, when a yield context is used with an asynchronous operation, a non-success error\_code is converted to system\_error and thrown. This operator may be used to specify an error\_code object that should instead be set with the asynchronous operation's result. For example:
+
+
+
+ template <typename Handler>
+ void my_coroutine(basic_yield_context<Handler> yield)
+ {
+ ...
+ std::size_t n = my_socket.async_read_some(buffer, yield[ec]);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ ...
+ }
+
+
+
+
+
+[endsect]
+
+
+
+[endsect]
+
 [section:buffer buffer]
 
 [indexterm1 buffer]
@@ -44464,7 +45440,7 @@
 
 
 
-In all three cases above, the buffers created are exactly 128 bytes long. Note that a vector is [*never] automatically resized when creating or using a buffer. The buffer size is determined using the vector's `size()` member function, and not its capacity.
+In all three cases above, the buffers created are exactly 128 bytes long. Note that a vector is ['never] automatically resized when creating or using a buffer. The buffer size is determined using the vector's `size()` member function, and not its capacity.
 
 
 [heading Accessing Buffer Contents]
@@ -44606,9 +45582,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 buffer (1 of 28 overloads)]
@@ -45545,9 +46521,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 buffer_cast (1 of 2 overloads)]
@@ -45809,9 +46785,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 buffer_copy (1 of 30 overloads)]
@@ -47345,9 +48321,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 buffer_size (1 of 5 overloads)]
@@ -47559,18 +48535,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_read_stream.hpp]
+['Header: ][^boost/asio/buffered_read_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_fill buffered_read_stream::async_fill]
@@ -47906,9 +48882,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_read_stream.hpp]
+['Header: ][^boost/asio/buffered_read_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -47935,15 +48911,15 @@
 The type of the next layer.
 
 
- typedef boost::remove_reference< Stream >::type next_layer_type;
+ typedef remove_reference< Stream >::type next_layer_type;
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_read_stream.hpp]
+['Header: ][^boost/asio/buffered_read_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -48262,18 +49238,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_stream.hpp]
+['Header: ][^boost/asio/buffered_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_fill buffered_stream::async_fill]
@@ -48662,9 +49638,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_stream.hpp]
+['Header: ][^boost/asio/buffered_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -48691,15 +49667,15 @@
 The type of the next layer.
 
 
- typedef boost::remove_reference< Stream >::type next_layer_type;
+ typedef remove_reference< Stream >::type next_layer_type;
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_stream.hpp]
+['Header: ][^boost/asio/buffered_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49017,18 +49993,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_write_stream.hpp]
+['Header: ][^boost/asio/buffered_write_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_flush buffered_write_stream::async_flush]
@@ -49364,9 +50340,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_write_stream.hpp]
+['Header: ][^boost/asio/buffered_write_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49393,15 +50369,15 @@
 The type of the next layer.
 
 
- typedef boost::remove_reference< Stream >::type next_layer_type;
+ typedef remove_reference< Stream >::type next_layer_type;
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffered_write_stream.hpp]
+['Header: ][^boost/asio/buffered_write_stream.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49605,9 +50581,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49628,9 +50604,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49797,9 +50773,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:begin buffers_iterator::begin]
@@ -49843,9 +50819,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49879,9 +50855,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49915,9 +50891,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49953,9 +50929,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -49975,9 +50951,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50078,9 +51054,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50100,9 +51076,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50201,9 +51177,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50223,9 +51199,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50245,9 +51221,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50267,9 +51243,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50289,9 +51265,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50327,9 +51303,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50350,9 +51326,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50371,9 +51347,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffers_iterator.hpp]
+['Header: ][^boost/asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -50478,9 +51454,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/connect.hpp]
+['Header: ][^boost/asio/connect.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 connect (1 of 8 overloads)]
@@ -51197,9 +52173,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:const_buffer const_buffer::const_buffer]
 
@@ -51393,9 +52369,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:begin const_buffers_1::begin]
@@ -51476,9 +52452,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -51613,9 +52589,382 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:coroutine coroutine]
+
+
+Provides support for implementing stackless coroutines.
+
+
+ class coroutine
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.coroutine.coroutine [*coroutine]]]
+ [Constructs a coroutine in its initial state. ]
+ ]
+
+ [
+ [[link boost_asio.reference.coroutine.is_child [*is_child]]]
+ [Returns true if the coroutine is the child of a fork. ]
+ ]
+
+ [
+ [[link boost_asio.reference.coroutine.is_complete [*is_complete]]]
+ [Returns true if the coroutine has reached its terminal state. ]
+ ]
+
+ [
+ [[link boost_asio.reference.coroutine.is_parent [*is_parent]]]
+ [Returns true if the coroutine is the parent of a fork. ]
+ ]
+
+]
+
+The `coroutine` class may be used to implement stackless coroutines. The class itself is used to store the current state of the coroutine.
+
+Coroutines are copy-constructible and assignable, and the space overhead is a single int. They can be used as a base class:
+
+
+
+ class session : coroutine
+ {
+ ...
+ };
+
+
+
+
+or as a data member:
+
+
+
+ class session
+ {
+ ...
+ coroutine coro_;
+ };
+
+
+
+
+or even bound in as a function argument using lambdas or `bind()`. The important thing is that as the application maintains a copy of the object for as long as the coroutine must be kept alive.
+
+
+[heading Pseudo-keywords]
+
+
+
+A coroutine is used in conjunction with certain "pseudo-keywords", which are implemented as macros. These macros are defined by a header file:
+
+
+
+ #include <boost/asio/yield.hpp>
+
+
+
+
+and may conversely be undefined as follows:
+
+
+
+ #include <boost/asio/unyield.hpp>
+
+
+
+
+[*reenter]
+
+The `reenter` macro is used to define the body of a coroutine. It takes a single argument: a pointer or reference to a coroutine object. For example, if the base class is a coroutine object you may write:
+
+
+
+ reenter (this)
+ {
+ ... coroutine body ...
+ }
+
+
+
+
+and if a data member or other variable you can write:
+
+
+
+ reenter (coro_)
+ {
+ ... coroutine body ...
+ }
+
+
+
+
+When `reenter` is executed at runtime, control jumps to the location of the last `yield` or `fork`.
+
+The coroutine body may also be a single statement, such as:
+
+
+
+ reenter (this) for (;;)
+ {
+ ...
+ }
+
+
+
+
+[*Limitation:] The `reenter` macro is implemented using a switch. This means that you must take care when using local variables within the coroutine body. The local variable is not allowed in a position where reentering the coroutine could bypass the variable definition.
+
+[*yield ['statement]]
+
+This form of the `yield` keyword is often used with asynchronous operations:
+
+
+
+ yield socket_->async_read_some(buffer(*buffer_), *this);
+
+
+
+
+This divides into four logical steps:
+
+
+* `yield` saves the current state of the coroutine.
+
+* The statement initiates the asynchronous operation.
+
+* The resume point is defined immediately following the statement.
+
+* Control is transferred to the end of the coroutine body.
+
+When the asynchronous operation completes, the function object is invoked and `reenter` causes control to transfer to the resume point. It is important to remember to carry the coroutine state forward with the asynchronous operation. In the above snippet, the current class is a function object object with a coroutine object as base class or data member.
+
+The statement may also be a compound statement, and this permits us to define local variables with limited scope:
+
+
+
+ yield
+ {
+ mutable_buffers_1 b = buffer(*buffer_);
+ socket_->async_read_some(b, *this);
+ }
+
+
+
+
+[*yield return ['expression] ;]
+
+This form of `yield` is often used in generators or coroutine-based parsers. For example, the function object:
+
+
+
+ struct interleave : coroutine
+ {
+ istream& is1;
+ istream& is2;
+ char operator()(char c)
+ {
+ reenter (this) for (;;)
+ {
+ yield return is1.get();
+ yield return is2.get();
+ }
+ }
+ };
+
+
+
+
+defines a trivial coroutine that interleaves the characters from two input streams.
+
+This type of `yield` divides into three logical steps:
+
+
+* `yield` saves the current state of the coroutine.
+
+* The resume point is defined immediately following the semicolon.
+
+* The value of the expression is returned from the function.
+
+[*yield ;]
+
+This form of `yield` is equivalent to the following steps:
+
+
+* `yield` saves the current state of the coroutine.
+
+* The resume point is defined immediately following the semicolon.
+
+* Control is transferred to the end of the coroutine body.
+
+This form might be applied when coroutines are used for cooperative threading and scheduling is explicitly managed. For example:
+
+
+
+ struct task : coroutine
+ {
+ ...
+ void operator()()
+ {
+ reenter (this)
+ {
+ while (... not finished ...)
+ {
+ ... do something ...
+ yield;
+ ... do some more ...
+ yield;
+ }
+ }
+ }
+ ...
+ };
+ ...
+ task t1, t2;
+ for (;;)
+ {
+ t1();
+ t2();
+ }
+
+
+
+
+[*yield break ;]
+
+The final form of `yield` is used to explicitly terminate the coroutine. This form is comprised of two steps:
+
+
+* `yield` sets the coroutine state to indicate termination.
+
+* Control is transferred to the end of the coroutine body.
+
+Once terminated, calls to `is_complete()` return true and the coroutine cannot be reentered.
+
+Note that a coroutine may also be implicitly terminated if the coroutine body is exited without a yield, e.g. by return, throw or by running to the end of the body.
+
+[*fork ['statement]]
+
+The `fork` pseudo-keyword is used when "forking" a coroutine, i.e. splitting it into two (or more) copies. One use of `fork` is in a server, where a new coroutine is created to handle each client connection:
+
+
+
+ reenter (this)
+ {
+ do
+ {
+ socket_.reset(new tcp::socket(io_service_));
+ yield acceptor->async_accept(*socket_, *this);
+ fork server(*this)();
+ } while (is_parent());
+ ... client-specific handling follows ...
+ }
+
+
+
+
+The logical steps involved in a `fork` are:
+
+
+* `fork` saves the current state of the coroutine.
+
+* The statement creates a copy of the coroutine and either executes it immediately or schedules it for later execution.
+
+* The resume point is defined immediately following the semicolon.
+
+* For the "parent", control immediately continues from the next line.
+
+The functions `is_parent()` and `is_child()` can be used to differentiate between parent and child. You would use these functions to alter subsequent control flow.
+
+Note that `fork` doesn't do the actual forking by itself. It is the application's responsibility to create a clone of the coroutine and call it. The clone can be called immediately, as above, or scheduled for delayed execution using something like `io_service::post()`.
+
+
+[heading Alternate macro names]
+
+
+
+If preferred, an application can use macro names that follow a more typical naming convention, rather than the pseudo-keywords. These are:
+
+
+* `BOOST_ASIO_CORO_REENTER` instead of `reenter`
+
+* `BOOST_ASIO_CORO_YIELD` instead of `yield`
+
+* `BOOST_ASIO_CORO_FORK` instead of `fork`
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/coroutine.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:coroutine coroutine::coroutine]
+
+[indexterm2 coroutine..coroutine]
+Constructs a coroutine in its initial state.
+
+
+ coroutine();
+
+
+
+[endsect]
+
+
+
+[section:is_child coroutine::is_child]
+
+[indexterm2 is_child..coroutine]
+Returns true if the coroutine is the child of a fork.
+
+
+ bool is_child() const;
+
+
+
+[endsect]
+
+
+
+[section:is_complete coroutine::is_complete]
+
+[indexterm2 is_complete..coroutine]
+Returns true if the coroutine has reached its terminal state.
+
+
+ bool is_complete() const;
+
+
+
+[endsect]
+
+
+
+[section:is_parent coroutine::is_parent]
+
+[indexterm2 is_parent..coroutine]
+Returns true if the coroutine is the parent of a fork.
+
+
+ bool is_parent() const;
 
-[*Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -51747,6 +53096,11 @@
   ]
   
   [
+ [[link boost_asio.reference.datagram_socket_service.converting_move_construct [*converting_move_construct]]]
+ [Move-construct a new datagram socket implementation from another protocol type. ]
+ ]
+
+ [
     [[link boost_asio.reference.datagram_socket_service.datagram_socket_service [*datagram_socket_service]]]
     [Construct a new datagram socket service for the specified io_service. ]
   ]
@@ -51870,9 +53224,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/datagram_socket_service.hpp]
+['Header: ][^boost/asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign datagram_socket_service::assign]
@@ -51901,7 +53255,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -51921,7 +53275,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -51942,7 +53296,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive_from(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
@@ -51964,7 +53318,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -51985,7 +53339,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send_to(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
@@ -52109,6 +53463,25 @@
 
 
 
+[section:converting_move_construct datagram_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..datagram_socket_service]
+Move-construct a new datagram socket implementation from another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``>
+ void converting_move_construct(
+ implementation_type & impl,
+ typename datagram_socket_service< Protocol1 >::implementation_type & other_impl,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+
+[endsect]
+
+
+
 [section:datagram_socket_service datagram_socket_service::datagram_socket_service]
 
 [indexterm2 datagram_socket_service..datagram_socket_service]
@@ -52151,9 +53524,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/datagram_socket_service.hpp]
+['Header: ][^boost/asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -52222,9 +53595,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/datagram_socket_service.hpp]
+['Header: ][^boost/asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -52356,9 +53729,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/datagram_socket_service.hpp]
+['Header: ][^boost/asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -52431,9 +53804,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/datagram_socket_service.hpp]
+['Header: ][^boost/asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -52521,9 +53894,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/datagram_socket_service.hpp]
+['Header: ][^boost/asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -52812,9 +54185,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
@@ -52900,9 +54273,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/deadline_timer.hpp]
+['Header: ][^boost/asio/deadline_timer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53028,9 +54401,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/deadline_timer_service.hpp]
+['Header: ][^boost/asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_wait deadline_timer_service::async_wait]
@@ -53039,7 +54412,7 @@
 
   template<
       typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       WaitHandler handler);
 
@@ -53138,9 +54511,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/deadline_timer_service.hpp]
+['Header: ][^boost/asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53298,9 +54671,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/deadline_timer_service.hpp]
+['Header: ][^boost/asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53319,9 +54692,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/deadline_timer_service.hpp]
+['Header: ][^boost/asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53340,9 +54713,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/deadline_timer_service.hpp]
+['Header: ][^boost/asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53375,9 +54748,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53411,9 +54784,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53633,9 +55006,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53651,9 +55024,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53669,9 +55042,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53687,9 +55060,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53705,9 +55078,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/error.hpp]
+['Header: ][^boost/asio/ssl/error.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -53723,9 +55096,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53757,9 +55130,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 error::make_error_code (1 of 5 overloads)]
@@ -53838,9 +55211,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53886,9 +55259,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53904,9 +55277,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53952,9 +55325,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -53970,9 +55343,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/error.hpp]
+['Header: ][^boost/asio/ssl/error.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -53988,9 +55361,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/error.hpp]
+['Header: ][^boost/asio/ssl/error.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -54006,62 +55379,23 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
-
-[*Convenience header: ][^boost/asio.hpp]
-
-
-[endsect]
-
-
-
-[section:has_service has_service]
-
-[indexterm1 has_service]
-
- template<
- typename ``[link boost_asio.reference.Service Service]``>
- bool has_service(
- io_service & ios);
-
-
-This function is used to determine whether the [link boost_asio.reference.io_service `io_service`] contains a service object corresponding to the given service type.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]
-
-]
-
-
-[heading Return Value]
-
-A boolean indicating whether the [link boost_asio.reference.io_service `io_service`] contains the service.
-
-
-
-[heading Requirements]
-
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
 
 
+[section:generic__basic_endpoint generic::basic_endpoint]
 
-[section:high_resolution_timer high_resolution_timer]
 
-[indexterm1 high_resolution_timer]
-Typedef for a timer based on the high resolution clock.
+Describes an endpoint for any socket type.
 
 
- typedef basic_waitable_timer< chrono::high_resolution_clock > high_resolution_timer;
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ class basic_endpoint
 
 
 [heading Types]
@@ -54070,43 +55404,15 @@
 
   [
 
- [[link boost_asio.reference.basic_waitable_timer.clock_type [*clock_type]]]
- [The clock type. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.basic_waitable_timer.duration [*duration]]]
- [The duration type of the clock. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.basic_waitable_timer.implementation_type [*implementation_type]]]
- [The underlying implementation type of I/O object. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.basic_waitable_timer.service_type [*service_type]]]
- [The type of the service that will be used to provide I/O operations. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.basic_waitable_timer.time_point [*time_point]]]
- [The time point type of the clock. ]
+ [[link boost_asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_waitable_timer.traits_type [*traits_type]]]
- [The wait traits type. ]
+ [[link boost_asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
   
   ]
 
@@ -54117,575 +55423,4685 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.basic_waitable_timer.async_wait [*async_wait]]]
- [Start an asynchronous wait on the timer. ]
- ]
-
- [
- [[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer [*basic_waitable_timer]]]
- [Constructor.
+ [[link boost_asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor.
 
- Constructor to set a particular expiry time as an absolute time.
+ Construct an endpoint from the specified socket address.
 
- Constructor to set a particular expiry time relative to now. ]
+ Construct an endpoint from the specific endpoint type.
+
+ Copy constructor. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.cancel [*cancel]]]
- [Cancel any asynchronous operations that are waiting on the timer. ]
+ [[link boost_asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.cancel_one [*cancel_one]]]
- [Cancels one asynchronous operation that is waiting on the timer. ]
+ [[link boost_asio.reference.generic__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.expires_at [*expires_at]]]
- [Get the timer's expiry time as an absolute time.
-
- Set the timer's expiry time as an absolute time. ]
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.expires_from_now [*expires_from_now]]]
- [Get the timer's expiry time relative to now.
-
- Set the timer's expiry time relative to now. ]
+ [[link boost_asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.get_io_service [*get_io_service]]]
- [Get the io_service associated with the object. ]
+ [[link boost_asio.reference.generic__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.wait [*wait]]]
- [Perform a blocking wait on the timer. ]
+ [[link boost_asio.reference.generic__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
   ]
   
 ]
 
-[heading Protected Member Functions]
+[heading Friends]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.basic_waitable_timer.get_implementation [*get_implementation]]]
- [Get the underlying implementation of the I/O object. ]
+ [[link boost_asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
   ]
   
   [
- [[link boost_asio.reference.basic_waitable_timer.get_service [*get_service]]]
- [Get the service associated with the I/O object. ]
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
   ]
   
-]
-
-[heading Protected Data Members]
-[table
- [[Name][Description]]
-
   [
- [[link boost_asio.reference.basic_waitable_timer.implementation [*implementation]]]
- [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+ [Compare endpoints for ordering. ]
   ]
-
+
   [
- [[link boost_asio.reference.basic_waitable_timer.service [*service]]]
- [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
   ]
-
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
 ]
 
-The [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.
-
-A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
-
-Most applications will use the boost::asio::waitable\_timer typedef.
+The [link boost_asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
 
 
 [heading Remarks]
       
-This waitable timer functionality is for use with the C++11 standard library's `<chrono>` facility, or with the Boost.Chrono library.
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
 
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
-[heading Examples]
-
-Performing a blocking wait:
 
- // Construct a timer without setting an expiry time.
- boost::asio::waitable_timer timer(io_service);
 
- // Set an expiry time relative to now.
- timer.expires_from_now(boost::posix_time::seconds(5));
+[heading Requirements]
 
- // Wait for the timer to expire.
- timer.wait();
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
+['Convenience header: ][^boost/asio.hpp]
 
+[section:basic_endpoint generic::basic_endpoint::basic_endpoint]
 
+[indexterm2 basic_endpoint..generic::basic_endpoint]
+Default constructor.
 
 
-Performing an asynchronous wait:
+ ``[link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
+ `` [''''&raquo;''' [link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload1 more...]]``
 
- void handler(const boost::system::error_code& error)
- {
- if (!error)
- {
- // Timer expired.
- }
- }
 
- ...
+Construct an endpoint from the specified socket address.
 
- // Construct a timer with an absolute expiry time.
- boost::asio::waitable_timer timer(io_service,
- boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
 
- // Start an asynchronous wait.
- timer.async_wait(handler);
+ ``[link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
+ const void * socket_address,
+ std::size_t socket_address_size,
+ int socket_protocol = 0);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload2 more...]]``
+
 
+Construct an endpoint from the specific endpoint type.
 
 
+ template<
+ typename ``[link boost_asio.reference.Endpoint Endpoint]``>
+ ``[link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
+ const Endpoint & endpoint);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload3 more...]]``
 
 
-[heading Changing an active waitable_timer's expiry time]
-
+Copy constructor.
 
 
-Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:
+ ``[link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
+ const basic_endpoint & other);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__basic_endpoint.basic_endpoint.overload4 more...]]``
 
 
+[section:overload1 generic::basic_endpoint::basic_endpoint (1 of 4 overloads)]
 
- void on_some_event()
- {
- if (my_timer.expires_from_now(seconds(5)) > 0)
- {
- // We managed to cancel the timer. Start new asynchronous wait.
- my_timer.async_wait(on_timeout);
- }
- else
- {
- // Too late, timer has already expired!
- }
- }
 
- void on_timeout(const boost::system::error_code& e)
- {
- if (e != boost::asio::error::operation_aborted)
- {
- // Timer was not cancelled, take necessary action.
- }
- }
+Default constructor.
 
 
+ basic_endpoint();
 
 
 
-* The `boost::asio::basic_waitable_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.
+[endsect]
 
 
-* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`.
 
+[section:overload2 generic::basic_endpoint::basic_endpoint (2 of 4 overloads)]
 
 
+Construct an endpoint from the specified socket address.
 
-This typedef uses the C++11 `<chrono>` standard library facility, if available. Otherwise, it may use the Boost.Chrono library. To explicitly utilise Boost.Chrono, use the [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] template directly:
 
- typedef basic_waitable_timer<boost::chrono::high_resolution_clock> timer;
+ basic_endpoint(
+ const void * socket_address,
+ std::size_t socket_address_size,
+ int socket_protocol = 0);
 
 
 
+[endsect]
 
-[heading Requirements]
 
-[*Header: ][^boost/asio/high_resolution_timer.hpp]
 
-[*Convenience header: ]None
+[section:overload3 generic::basic_endpoint::basic_endpoint (3 of 4 overloads)]
+
+
+Construct an endpoint from the specific endpoint type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Endpoint Endpoint]``>
+ basic_endpoint(
+ const Endpoint & endpoint);
+
 
 
 [endsect]
 
 
-[section:invalid_service_owner invalid_service_owner]
 
+[section:overload4 generic::basic_endpoint::basic_endpoint (4 of 4 overloads)]
 
-Exception thrown when trying to add a service object to an [link boost_asio.reference.io_service `io_service`] where the service has a different owner.
 
+Copy constructor.
 
- class invalid_service_owner
 
+ basic_endpoint(
+ const basic_endpoint & other);
 
-[heading Member Functions]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.invalid_service_owner.invalid_service_owner [*invalid_service_owner]]]
- []
- ]
-
-]
 
-[heading Requirements]
+[endsect]
 
-[*Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+[endsect]
 
 
-[section:invalid_service_owner invalid_service_owner::invalid_service_owner]
+[section:capacity generic::basic_endpoint::capacity]
 
-[indexterm2 invalid_service_owner..invalid_service_owner]
+[indexterm2 capacity..generic::basic_endpoint]
+Get the capacity of the endpoint in the native type.
 
- invalid_service_owner();
+
+ std::size_t capacity() const;
 
 
 
 [endsect]
 
 
+[section:data generic::basic_endpoint::data]
 
-[endsect]
+[indexterm2 data..generic::basic_endpoint]
+Get the underlying endpoint in the native type.
 
-[section:io_service io_service]
 
+ data_type * ``[link boost_asio.reference.generic__basic_endpoint.data.overload1 data]``();
+ `` [''''&raquo;''' [link boost_asio.reference.generic__basic_endpoint.data.overload1 more...]]``
 
-Provides core I/O functionality.
+ const data_type * ``[link boost_asio.reference.generic__basic_endpoint.data.overload2 data]``() const;
+ `` [''''&raquo;''' [link boost_asio.reference.generic__basic_endpoint.data.overload2 more...]]``
 
 
- class io_service :
- noncopyable
+[section:overload1 generic::basic_endpoint::data (1 of 2 overloads)]
 
 
-[heading Types]
-[table
- [[Name][Description]]
+Get the underlying endpoint in the native type.
 
- [
 
- [[link boost_asio.reference.io_service__id [*id]]]
- [Class used to uniquely identify a service. ]
-
- ]
+ data_type * data();
 
- [
 
- [[link boost_asio.reference.io_service__service [*service]]]
- [Base class for all io_service services. ]
-
- ]
 
- [
+[endsect]
 
- [[link boost_asio.reference.io_service__strand [*strand]]]
- [Provides serialised handler execution. ]
-
- ]
 
- [
 
- [[link boost_asio.reference.io_service__work [*work]]]
- [Class to inform the io_service when it has work to do. ]
-
- ]
+[section:overload2 generic::basic_endpoint::data (2 of 2 overloads)]
 
- [
 
- [[link boost_asio.reference.io_service.fork_event [*fork_event]]]
- [Fork-related event notifications. ]
-
- ]
+Get the underlying endpoint in the native type.
 
-]
 
-[heading Member Functions]
-[table
- [[Name][Description]]
+ const data_type * data() const;
 
- [
- [[link boost_asio.reference.io_service.dispatch [*dispatch]]]
- [Request the io_service to invoke the given handler. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.io_service [*io_service]]]
- [Constructor. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.notify_fork [*notify_fork]]]
- [Notify the io_service of a fork-related event. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.poll [*poll]]]
- [Run the io_service object's event processing loop to execute ready handlers. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.poll_one [*poll_one]]]
- [Run the io_service object's event processing loop to execute one ready handler. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.post [*post]]]
- [Request the io_service to invoke the given handler and return immediately. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.reset [*reset]]]
- [Reset the io_service in preparation for a subsequent run() invocation. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.run [*run]]]
- [Run the io_service object's event processing loop. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.run_one [*run_one]]]
- [Run the io_service object's event processing loop to execute at most one handler. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.stop [*stop]]]
- [Stop the io_service object's event processing loop. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.stopped [*stopped]]]
- [Determine whether the io_service object has been stopped. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.wrap [*wrap]]]
- [Create a new handler that automatically dispatches the wrapped handler on the io_service. ]
- ]
-
- [
- [[link boost_asio.reference.io_service._io_service [*~io_service]]]
- [Destructor. ]
- ]
-
-]
 
-[heading Friends]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.io_service.add_service [*add_service]]]
- [Add a service object to the io_service. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.has_service [*has_service]]]
- [Determine if an io_service contains a specified service type. ]
- ]
-
- [
- [[link boost_asio.reference.io_service.use_service [*use_service]]]
- [Obtain the service object corresponding to the given type. ]
- ]
-
-]
+[endsect]
 
-The [link boost_asio.reference.io_service `io_service`] class provides the core I/O functionality for users of the asynchronous I/O objects, including:
+
+[endsect]
 
 
-* `boost::asio::ip::tcp::socket`
+[section:data_type generic::basic_endpoint::data_type]
 
-* `boost::asio::ip::tcp::acceptor`
+[indexterm2 data_type..generic::basic_endpoint]
+The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer.
 
-* `boost::asio::ip::udp::socket`
 
-* [link boost_asio.reference.deadline_timer `deadline_timer`].
+ typedef implementation_defined data_type;
 
-The [link boost_asio.reference.io_service `io_service`] class also includes facilities intended for developers of custom asynchronous services.
 
 
-[heading Thread Safety]
-
-[*Distinct] [*objects:] Safe.
+[heading Requirements]
 
-[*Shared] [*objects:] Safe, with the specific exceptions of the `reset()` and `notify_fork()` functions. Calling `reset()` while there are unfinished `run()`, `run_one()`, `poll()` or `poll_one()` calls results in undefined behaviour. The `notify_fork()` function should not be called while any [link boost_asio.reference.io_service `io_service`] function, or any function on an I/O object that is associated with the [link boost_asio.reference.io_service `io_service`], is being called in another thread.
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
+['Convenience header: ][^boost/asio.hpp]
 
 
-[heading Synchronous and asynchronous operations]
-
+[endsect]
 
 
-Synchronous operations on I/O objects implicitly run the [link boost_asio.reference.io_service `io_service`] object for an individual operation. The [link boost_asio.reference.io_service `io_service`] functions `run()`, `run_one()`, `poll()` or `poll_one()` must be called for the [link boost_asio.reference.io_service `io_service`] to perform asynchronous operations on behalf of a C++ program. Notification that an asynchronous operation has completed is delivered by invocation of the associated handler. Handlers are invoked only by a thread that is currently calling any overload of `run()`, `run_one()`, `poll()` or `poll_one()` for the [link boost_asio.reference.io_service `io_service`].
 
+[section:operator_not__eq_ generic::basic_endpoint::operator!=]
 
-[heading Effect of exceptions thrown from handlers]
-
+[indexterm2 operator!=..generic::basic_endpoint]
+Compare two endpoints for inequality.
 
 
-If an exception is thrown from a handler, the exception is allowed to propagate through the throwing thread's invocation of `run()`, `run_one()`, `poll()` or `poll_one()`. No other threads that are calling any of these functions are affected. It is then the responsibility of the application to catch the exception.
+ friend bool operator!=(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
-After the exception has been caught, the `run()`, `run_one()`, `poll()` or `poll_one()` call may be restarted [*without] the need for an intervening call to `reset()`. This allows the thread to rejoin the [link boost_asio.reference.io_service `io_service`] object's thread pool without impacting any other threads in the pool.
 
-For example:
+[heading Requirements]
 
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
+['Convenience header: ][^boost/asio.hpp]
 
- boost::asio::io_service io_service;
- ...
- for (;;)
- {
- try
- {
- io_service.run();
- break; // run() exited normally
- }
- catch (my_exception& e)
- {
- // Deal with exception as appropriate.
- }
- }
 
+[endsect]
 
 
 
+[section:operator_lt_ generic::basic_endpoint::operator<]
 
-[heading Stopping the io_service from running out of work]
-
+[indexterm2 operator<..generic::basic_endpoint]
+Compare endpoints for ordering.
 
 
-Some applications may need to prevent an [link boost_asio.reference.io_service `io_service`] object's `run()` call from returning when there is no more work to do. For example, the [link boost_asio.reference.io_service `io_service`] may be being run in a background thread that is launched prior to the application's asynchronous operations. The `run()` call may be kept running by creating an object of type [link boost_asio.reference.io_service__work `io_service::work`]:
+ friend bool operator<(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
+[heading Requirements]
 
- boost::asio::io_service io_service;
- boost::asio::io_service::work work(io_service);
- ...
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
+['Convenience header: ][^boost/asio.hpp]
 
 
+[endsect]
 
-To effect a shutdown, the application will then need to call the [link boost_asio.reference.io_service `io_service`] object's `stop()` member function. This will cause the [link boost_asio.reference.io_service `io_service`] `run()` call to return as soon as possible, abandoning unfinished operations and without permitting ready handlers to be dispatched.
 
-Alternatively, if the application requires that all operations and handlers be allowed to finish normally, the work object may be explicitly destroyed.
 
+[section:operator_lt__eq_ generic::basic_endpoint::operator<=]
 
+[indexterm2 operator<=..generic::basic_endpoint]
+Compare endpoints for ordering.
 
- boost::asio::io_service io_service;
- auto_ptr<boost::asio::io_service::work> work(
- new boost::asio::io_service::work(io_service));
- ...
- work.reset(); // Allow run() to exit.
 
+ friend bool operator<=(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
+[heading Requirements]
 
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
-[heading The io_service class and I/O services]
-
+['Convenience header: ][^boost/asio.hpp]
 
 
-Class [link boost_asio.reference.io_service `io_service`] implements an extensible, type-safe, polymorphic set of I/O services, indexed by service type. An object of class [link boost_asio.reference.io_service `io_service`] must be initialised before I/O objects such as sockets, resolvers and timers can be used. These I/O objects are distinguished by having constructors that accept an `io_service&` parameter.
+[endsect]
 
-I/O services exist to manage the logical interface to the operating system on behalf of the I/O objects. In particular, there are resources that are shared across a class of I/O objects. For example, timers may be implemented in terms of a single timer queue. The I/O services manage these shared resources.
 
-Access to the services of an [link boost_asio.reference.io_service `io_service`] is via three function templates, `use_service()`, `add_service()` and `has_service()`.
 
-In a call to `use_service<Service>()`, the type argument chooses a service, making available all members of the named type. If `Service` is not present in an [link boost_asio.reference.io_service `io_service`], an object of type `Service` is created and added to the [link boost_asio.reference.io_service `io_service`]. A C++ program can check if an [link boost_asio.reference.io_service `io_service`] implements a particular service with the function template `has_service<Service>()`.
+[section:operator_eq_ generic::basic_endpoint::operator=]
 
-Service objects may be explicitly added to an [link boost_asio.reference.io_service `io_service`] using the function template `add_service<Service>()`. If the `Service` is already present, the [link boost_asio.reference.service_already_exists `service_already_exists`] exception is thrown. If the owner of the service is not the same object as the [link boost_asio.reference.io_service `io_service`] parameter, the [link boost_asio.reference.invalid_service_owner `invalid_service_owner`] exception is thrown.
+[indexterm2 operator=..generic::basic_endpoint]
+Assign from another endpoint.
 
-Once a service reference is obtained from an [link boost_asio.reference.io_service `io_service`] object by calling `use_service()`, that reference remains usable as long as the owning [link boost_asio.reference.io_service `io_service`] object exists.
 
-All I/O service implementations have [link boost_asio.reference.io_service__service `io_service::service`] as a public base class. Custom I/O services may be implemented by deriving from this class and then added to an [link boost_asio.reference.io_service `io_service`] using the facilities described above.
+ basic_endpoint & operator=(
+ const basic_endpoint & other);
 
-[heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+[endsect]
 
 
-[section:add_service io_service::add_service]
 
-[indexterm2 add_service..io_service]
-Add a service object to the [link boost_asio.reference.io_service `io_service`].
+[section:operator_eq__eq_ generic::basic_endpoint::operator==]
 
+[indexterm2 operator==..generic::basic_endpoint]
+Compare two endpoints for equality.
 
- template<
- typename ``[link boost_asio.reference.Service Service]``>
- friend void add_service(
- io_service & ios,
- Service * svc);
 
+ friend bool operator==(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
-This function is used to add a service to the [link boost_asio.reference.io_service `io_service`].
 
+[heading Requirements]
 
-[heading Parameters]
-
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
-[variablelist
-
-[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]
+['Convenience header: ][^boost/asio.hpp]
 
-[[svc][The service object. On success, ownership of the service object is transferred to the [link boost_asio.reference.io_service `io_service`]. When the [link boost_asio.reference.io_service `io_service`] object is destroyed, it will destroy the service object by performing:
-``
- delete static_cast<io_service::service*>(svc)
-``
-]]
 
-]
+[endsect]
 
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::asio::service_already_exists][Thrown if a service of the given type is already present in the [link boost_asio.reference.io_service `io_service`].]]
+[section:operator_gt_ generic::basic_endpoint::operator>]
 
-[[boost::asio::invalid_service_owner][Thrown if the service's owning [link boost_asio.reference.io_service `io_service`] is not the [link boost_asio.reference.io_service `io_service`] object specified by the ios parameter. ]]
+[indexterm2 operator>..generic::basic_endpoint]
+Compare endpoints for ordering.
 
-]
 
+ friend bool operator>(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
 
 
 
-[section:dispatch io_service::dispatch]
+[section:operator_gt__eq_ generic::basic_endpoint::operator>=]
 
-[indexterm2 dispatch..io_service]
-Request the [link boost_asio.reference.io_service `io_service`] to invoke the given handler.
+[indexterm2 operator>=..generic::basic_endpoint]
+Compare endpoints for ordering.
 
 
- template<
- typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
- void dispatch(
- CompletionHandler handler);
+ friend bool operator>=(
+ const basic_endpoint< Protocol > & e1,
+ const basic_endpoint< Protocol > & e2);
 
 
-This function is used to ask the [link boost_asio.reference.io_service `io_service`] to execute the given handler.
+[heading Requirements]
 
-The [link boost_asio.reference.io_service `io_service`] guarantees that the handler will only be called in a thread in which the `run()`, `run_one()`, `poll()` or `poll_one()` member functions is currently being invoked. The handler may be executed inside this function if the guarantee can be met.
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::basic_endpoint::protocol]
+
+[indexterm2 protocol..generic::basic_endpoint]
+The protocol associated with the endpoint.
+
+
+ protocol_type protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:protocol_type generic::basic_endpoint::protocol_type]
+
+[indexterm2 protocol_type..generic::basic_endpoint]
+The protocol type associated with the endpoint.
+
+
+ typedef Protocol protocol_type;
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:resize generic::basic_endpoint::resize]
+
+[indexterm2 resize..generic::basic_endpoint]
+Set the underlying size of the endpoint in the native type.
+
+
+ void resize(
+ std::size_t new_size);
+
+
+
+[endsect]
+
+
+
+[section:size generic::basic_endpoint::size]
+
+[indexterm2 size..generic::basic_endpoint]
+Get the underlying size of the endpoint in the native type.
+
+
+ std::size_t size() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__datagram_protocol generic::datagram_protocol]
+
+
+Encapsulates the flags needed for a generic datagram-oriented socket.
+
+
+ class datagram_protocol
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__datagram_protocol.endpoint [*endpoint]]]
+ [The type of an endpoint. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__datagram_protocol.socket [*socket]]]
+ [The generic socket type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__datagram_protocol.datagram_protocol [*datagram_protocol]]]
+ [Construct a protocol object for a specific address family and protocol.
+
+ Construct a generic protocol object from a specific protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__datagram_protocol.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__datagram_protocol.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__datagram_protocol.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__datagram_protocol.operator_not__eq_ [*operator!=]]]
+ [Compare two protocols for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__datagram_protocol.operator_eq__eq_ [*operator==]]]
+ [Compare two protocols for equality. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__datagram_protocol `generic::datagram_protocol`] class contains flags necessary for datagram-oriented sockets of any address family and protocol.
+
+
+[heading Examples]
+
+Constructing using a native address family and socket protocol:
+
+ datagram_protocol p(AF_INET, IPPROTO_UDP);
+
+
+Constructing from a specific protocol type:
+
+ datagram_protocol p(boost::asio::ip::udp::v4());
+
+
+
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+[section:datagram_protocol generic::datagram_protocol::datagram_protocol]
+
+[indexterm2 datagram_protocol..generic::datagram_protocol]
+Construct a protocol object for a specific address family and protocol.
+
+
+ ``[link boost_asio.reference.generic__datagram_protocol.datagram_protocol.overload1 datagram_protocol]``(
+ int address_family,
+ int socket_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__datagram_protocol.datagram_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ ``[link boost_asio.reference.generic__datagram_protocol.datagram_protocol.overload2 datagram_protocol]``(
+ const Protocol & source_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__datagram_protocol.datagram_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::datagram_protocol::datagram_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol.
+
+
+ datagram_protocol(
+ int address_family,
+ int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::datagram_protocol::datagram_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ datagram_protocol(
+ const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[@c][bad\_cast Thrown if the source protocol is not datagram-oriented. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:endpoint generic::datagram_protocol::endpoint]
+
+[indexterm2 endpoint..generic::datagram_protocol]
+The type of an endpoint.
+
+
+ typedef basic_endpoint< datagram_protocol > endpoint;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor.
+
+ Construct an endpoint from the specified socket address.
+
+ Construct an endpoint from the specific endpoint type.
+
+ Copy constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::datagram_protocol::family]
+
+[indexterm2 family..generic::datagram_protocol]
+Obtain an identifier for the protocol family.
+
+
+ int family() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::datagram_protocol::operator!=]
+
+[indexterm2 operator!=..generic::datagram_protocol]
+Compare two protocols for inequality.
+
+
+ friend bool operator!=(
+ const datagram_protocol & p1,
+ const datagram_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::datagram_protocol::operator==]
+
+[indexterm2 operator==..generic::datagram_protocol]
+Compare two protocols for equality.
+
+
+ friend bool operator==(
+ const datagram_protocol & p1,
+ const datagram_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::datagram_protocol::protocol]
+
+[indexterm2 protocol..generic::datagram_protocol]
+Obtain an identifier for the protocol.
+
+
+ int protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:socket generic::datagram_protocol::socket]
+
+[indexterm2 socket..generic::datagram_protocol]
+The generic socket type.
+
+
+ typedef basic_datagram_socket< datagram_protocol > socket;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.native_handle_type [*native_handle_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.native_type [*native_type]]]
+ [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.non_blocking_io [*non_blocking_io]]]
+ [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_datagram_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_receive [*async_receive]]]
+ [Start an asynchronous receive on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_receive_from [*async_receive_from]]]
+ [Start an asynchronous receive. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_send [*async_send]]]
+ [Start an asynchronous send on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.async_send_to [*async_send_to]]]
+ [Start an asynchronous send. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket [*basic_datagram_socket]]]
+ [Construct a basic_datagram_socket without opening it.
+
+ Construct and open a basic_datagram_socket.
+
+ Construct a basic_datagram_socket, opening it and binding it to the given local endpoint.
+
+ Construct a basic_datagram_socket on an existing native socket.
+
+ Move-construct a basic_datagram_socket from another.
+
+ Move-construct a basic_datagram_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer.
+
+ Get a const reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.native [*native]]]
+ [(Deprecated: Use native_handle().) Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.native_handle [*native_handle]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.native_non_blocking [*native_non_blocking]]]
+ [Gets the non-blocking mode of the native socket implementation.
+
+ Sets the non-blocking mode of the native socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.non_blocking [*non_blocking]]]
+ [Gets the non-blocking mode of the socket.
+
+ Sets the non-blocking mode of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
+ [Move-assign a basic_datagram_socket from another.
+
+ Move-assign a basic_datagram_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.receive [*receive]]]
+ [Receive some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.receive_from [*receive_from]]]
+ [Receive a datagram with the endpoint of the sender. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.send [*send]]]
+ [Send some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.send_to [*send_to]]]
+ [Send a datagram to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.get_implementation [*get_implementation]]]
+ [Get the underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.get_service [*get_service]]]
+ [Get the service associated with the I/O object. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_end_of_record [*message_end_of_record]]]
+ [Specifies that the data marks the end of a record. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
+ [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
+ [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] class template provides asynchronous and blocking datagram-oriented socket functionality.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:type generic::datagram_protocol::type]
+
+[indexterm2 type..generic::datagram_protocol]
+Obtain an identifier for the type of the protocol.
+
+
+ int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__raw_protocol generic::raw_protocol]
+
+
+Encapsulates the flags needed for a generic raw socket.
+
+
+ class raw_protocol
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__raw_protocol.endpoint [*endpoint]]]
+ [The type of an endpoint. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__raw_protocol.socket [*socket]]]
+ [The generic socket type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__raw_protocol.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__raw_protocol.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__raw_protocol.raw_protocol [*raw_protocol]]]
+ [Construct a protocol object for a specific address family and protocol.
+
+ Construct a generic protocol object from a specific protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__raw_protocol.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__raw_protocol.operator_not__eq_ [*operator!=]]]
+ [Compare two protocols for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__raw_protocol.operator_eq__eq_ [*operator==]]]
+ [Compare two protocols for equality. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__raw_protocol `generic::raw_protocol`] class contains flags necessary for raw sockets of any address family and protocol.
+
+
+[heading Examples]
+
+Constructing using a native address family and socket protocol:
+
+ raw_protocol p(AF_INET, IPPROTO_ICMP);
+
+
+Constructing from a specific protocol type:
+
+ raw_protocol p(boost::asio::ip::icmp::v4());
+
+
+
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:endpoint generic::raw_protocol::endpoint]
+
+[indexterm2 endpoint..generic::raw_protocol]
+The type of an endpoint.
+
+
+ typedef basic_endpoint< raw_protocol > endpoint;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor.
+
+ Construct an endpoint from the specified socket address.
+
+ Construct an endpoint from the specific endpoint type.
+
+ Copy constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::raw_protocol::family]
+
+[indexterm2 family..generic::raw_protocol]
+Obtain an identifier for the protocol family.
+
+
+ int family() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::raw_protocol::operator!=]
+
+[indexterm2 operator!=..generic::raw_protocol]
+Compare two protocols for inequality.
+
+
+ friend bool operator!=(
+ const raw_protocol & p1,
+ const raw_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::raw_protocol::operator==]
+
+[indexterm2 operator==..generic::raw_protocol]
+Compare two protocols for equality.
+
+
+ friend bool operator==(
+ const raw_protocol & p1,
+ const raw_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::raw_protocol::protocol]
+
+[indexterm2 protocol..generic::raw_protocol]
+Obtain an identifier for the protocol.
+
+
+ int protocol() const;
+
+
+
+[endsect]
+
+
+[section:raw_protocol generic::raw_protocol::raw_protocol]
+
+[indexterm2 raw_protocol..generic::raw_protocol]
+Construct a protocol object for a specific address family and protocol.
+
+
+ ``[link boost_asio.reference.generic__raw_protocol.raw_protocol.overload1 raw_protocol]``(
+ int address_family,
+ int socket_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__raw_protocol.raw_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ ``[link boost_asio.reference.generic__raw_protocol.raw_protocol.overload2 raw_protocol]``(
+ const Protocol & source_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__raw_protocol.raw_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::raw_protocol::raw_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol.
+
+
+ raw_protocol(
+ int address_family,
+ int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::raw_protocol::raw_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ raw_protocol(
+ const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[@c][bad\_cast Thrown if the source protocol is not raw-oriented. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:socket generic::raw_protocol::socket]
+
+[indexterm2 socket..generic::raw_protocol]
+The generic socket type.
+
+
+ typedef basic_raw_socket< raw_protocol > socket;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.native_handle_type [*native_handle_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.native_type [*native_type]]]
+ [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.non_blocking_io [*non_blocking_io]]]
+ [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_raw_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.async_receive [*async_receive]]]
+ [Start an asynchronous receive on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.async_receive_from [*async_receive_from]]]
+ [Start an asynchronous receive. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.async_send [*async_send]]]
+ [Start an asynchronous send on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.async_send_to [*async_send_to]]]
+ [Start an asynchronous send. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.basic_raw_socket [*basic_raw_socket]]]
+ [Construct a basic_raw_socket without opening it.
+
+ Construct and open a basic_raw_socket.
+
+ Construct a basic_raw_socket, opening it and binding it to the given local endpoint.
+
+ Construct a basic_raw_socket on an existing native socket.
+
+ Move-construct a basic_raw_socket from another.
+
+ Move-construct a basic_raw_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer.
+
+ Get a const reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.native [*native]]]
+ [(Deprecated: Use native_handle().) Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.native_handle [*native_handle]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.native_non_blocking [*native_non_blocking]]]
+ [Gets the non-blocking mode of the native socket implementation.
+
+ Sets the non-blocking mode of the native socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.non_blocking [*non_blocking]]]
+ [Gets the non-blocking mode of the socket.
+
+ Sets the non-blocking mode of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
+ [Move-assign a basic_raw_socket from another.
+
+ Move-assign a basic_raw_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.receive [*receive]]]
+ [Receive some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.receive_from [*receive_from]]]
+ [Receive raw data with the endpoint of the sender. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.send [*send]]]
+ [Send some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.send_to [*send_to]]]
+ [Send raw data to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.get_implementation [*get_implementation]]]
+ [Get the underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.get_service [*get_service]]]
+ [Get the service associated with the I/O object. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.message_end_of_record [*message_end_of_record]]]
+ [Specifies that the data marks the end of a record. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.implementation [*implementation]]]
+ [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.service [*service]]]
+ [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] class template provides asynchronous and blocking raw-oriented socket functionality.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:type generic::raw_protocol::type]
+
+[indexterm2 type..generic::raw_protocol]
+Obtain an identifier for the type of the protocol.
+
+
+ int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__seq_packet_protocol generic::seq_packet_protocol]
+
+
+Encapsulates the flags needed for a generic sequenced packet socket.
+
+
+ class seq_packet_protocol
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__seq_packet_protocol.endpoint [*endpoint]]]
+ [The type of an endpoint. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__seq_packet_protocol.socket [*socket]]]
+ [The generic socket type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__seq_packet_protocol.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__seq_packet_protocol.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__seq_packet_protocol.seq_packet_protocol [*seq_packet_protocol]]]
+ [Construct a protocol object for a specific address family and protocol.
+
+ Construct a generic protocol object from a specific protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__seq_packet_protocol.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__seq_packet_protocol.operator_not__eq_ [*operator!=]]]
+ [Compare two protocols for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__seq_packet_protocol.operator_eq__eq_ [*operator==]]]
+ [Compare two protocols for equality. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__seq_packet_protocol `generic::seq_packet_protocol`] class contains flags necessary for seq\_packet-oriented sockets of any address family and protocol.
+
+
+[heading Examples]
+
+Constructing using a native address family and socket protocol:
+
+ seq_packet_protocol p(AF_INET, IPPROTO_SCTP);
+
+
+
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:endpoint generic::seq_packet_protocol::endpoint]
+
+[indexterm2 endpoint..generic::seq_packet_protocol]
+The type of an endpoint.
+
+
+ typedef basic_endpoint< seq_packet_protocol > endpoint;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor.
+
+ Construct an endpoint from the specified socket address.
+
+ Construct an endpoint from the specific endpoint type.
+
+ Copy constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::seq_packet_protocol::family]
+
+[indexterm2 family..generic::seq_packet_protocol]
+Obtain an identifier for the protocol family.
+
+
+ int family() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::seq_packet_protocol::operator!=]
+
+[indexterm2 operator!=..generic::seq_packet_protocol]
+Compare two protocols for inequality.
+
+
+ friend bool operator!=(
+ const seq_packet_protocol & p1,
+ const seq_packet_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::seq_packet_protocol::operator==]
+
+[indexterm2 operator==..generic::seq_packet_protocol]
+Compare two protocols for equality.
+
+
+ friend bool operator==(
+ const seq_packet_protocol & p1,
+ const seq_packet_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::seq_packet_protocol::protocol]
+
+[indexterm2 protocol..generic::seq_packet_protocol]
+Obtain an identifier for the protocol.
+
+
+ int protocol() const;
+
+
+
+[endsect]
+
+
+[section:seq_packet_protocol generic::seq_packet_protocol::seq_packet_protocol]
+
+[indexterm2 seq_packet_protocol..generic::seq_packet_protocol]
+Construct a protocol object for a specific address family and protocol.
+
+
+ ``[link boost_asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload1 seq_packet_protocol]``(
+ int address_family,
+ int socket_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ ``[link boost_asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload2 seq_packet_protocol]``(
+ const Protocol & source_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::seq_packet_protocol::seq_packet_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol.
+
+
+ seq_packet_protocol(
+ int address_family,
+ int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::seq_packet_protocol::seq_packet_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ seq_packet_protocol(
+ const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[@c][bad\_cast Thrown if the source protocol is not based around sequenced packets. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:socket generic::seq_packet_protocol::socket]
+
+[indexterm2 socket..generic::seq_packet_protocol]
+The generic socket type.
+
+
+ typedef basic_seq_packet_socket< seq_packet_protocol > socket;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.native_handle_type [*native_handle_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.native_type [*native_type]]]
+ [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.non_blocking_io [*non_blocking_io]]]
+ [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_seq_packet_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.async_receive [*async_receive]]]
+ [Start an asynchronous receive. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.async_send [*async_send]]]
+ [Start an asynchronous send. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket [*basic_seq_packet_socket]]]
+ [Construct a basic_seq_packet_socket without opening it.
+
+ Construct and open a basic_seq_packet_socket.
+
+ Construct a basic_seq_packet_socket, opening it and binding it to the given local endpoint.
+
+ Construct a basic_seq_packet_socket on an existing native socket.
+
+ Move-construct a basic_seq_packet_socket from another.
+
+ Move-construct a basic_seq_packet_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer.
+
+ Get a const reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.native [*native]]]
+ [(Deprecated: Use native_handle().) Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.native_handle [*native_handle]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.native_non_blocking [*native_non_blocking]]]
+ [Gets the non-blocking mode of the native socket implementation.
+
+ Sets the non-blocking mode of the native socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.non_blocking [*non_blocking]]]
+ [Gets the non-blocking mode of the socket.
+
+ Sets the non-blocking mode of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.operator_eq_ [*operator=]]]
+ [Move-assign a basic_seq_packet_socket from another.
+
+ Move-assign a basic_seq_packet_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.receive [*receive]]]
+ [Receive some data on the socket.
+
+ Receive some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.send [*send]]]
+ [Send some data on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.get_implementation [*get_implementation]]]
+ [Get the underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.get_service [*get_service]]]
+ [Get the service associated with the I/O object. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.message_end_of_record [*message_end_of_record]]]
+ [Specifies that the data marks the end of a record. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.implementation [*implementation]]]
+ [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_seq_packet_socket.service [*service]]]
+ [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] class template provides asynchronous and blocking sequenced packet socket functionality.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:type generic::seq_packet_protocol::type]
+
+[indexterm2 type..generic::seq_packet_protocol]
+Obtain an identifier for the type of the protocol.
+
+
+ int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__stream_protocol generic::stream_protocol]
+
+
+Encapsulates the flags needed for a generic stream-oriented socket.
+
+
+ class stream_protocol
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__stream_protocol.endpoint [*endpoint]]]
+ [The type of an endpoint. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__stream_protocol.iostream [*iostream]]]
+ [The generic socket iostream type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__stream_protocol.socket [*socket]]]
+ [The generic socket type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__stream_protocol.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__stream_protocol.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__stream_protocol.stream_protocol [*stream_protocol]]]
+ [Construct a protocol object for a specific address family and protocol.
+
+ Construct a generic protocol object from a specific protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__stream_protocol.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__stream_protocol.operator_not__eq_ [*operator!=]]]
+ [Compare two protocols for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__stream_protocol.operator_eq__eq_ [*operator==]]]
+ [Compare two protocols for equality. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__stream_protocol `generic::stream_protocol`] class contains flags necessary for stream-oriented sockets of any address family and protocol.
+
+
+[heading Examples]
+
+Constructing using a native address family and socket protocol:
+
+ stream_protocol p(AF_INET, IPPROTO_TCP);
+
+
+Constructing from a specific protocol type:
+
+ stream_protocol p(boost::asio::ip::tcp::v4());
+
+
+
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:endpoint generic::stream_protocol::endpoint]
+
+[indexterm2 endpoint..generic::stream_protocol]
+The type of an endpoint.
+
+
+ typedef basic_endpoint< stream_protocol > endpoint;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+ [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor.
+
+ Construct an endpoint from the specified socket address.
+
+ Construct an endpoint from the specific endpoint type.
+
+ Copy constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+]
+
+The [link boost_asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::stream_protocol::family]
+
+[indexterm2 family..generic::stream_protocol]
+Obtain an identifier for the protocol family.
+
+
+ int family() const;
+
+
+
+[endsect]
+
+
+
+[section:iostream generic::stream_protocol::iostream]
+
+[indexterm2 iostream..generic::stream_protocol]
+The generic socket iostream type.
+
+
+ typedef basic_socket_iostream< stream_protocol > iostream;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_iostream.duration_type [*duration_type]]]
+ [The duration type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_iostream.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_iostream.time_type [*time_type]]]
+ [The time type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream [*basic_socket_iostream]]]
+ [Construct a basic_socket_iostream without establishing a connection.
+
+ Establish a connection to an endpoint corresponding to a resolver query. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.close [*close]]]
+ [Close the connection. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.connect [*connect]]]
+ [Establish a connection to an endpoint corresponding to a resolver query. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.error [*error]]]
+ [Get the last error associated with the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.expires_at [*expires_at]]]
+ [Get the stream's expiry time as an absolute time.
+
+ Set the stream's expiry time as an absolute time. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.expires_from_now [*expires_from_now]]]
+ [Get the timer's expiry time relative to now.
+
+ Set the stream's expiry time relative to now. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket_iostream.rdbuf [*rdbuf]]]
+ [Return a pointer to the underlying streambuf. ]
+ ]
+
+]
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::stream_protocol::operator!=]
+
+[indexterm2 operator!=..generic::stream_protocol]
+Compare two protocols for inequality.
+
+
+ friend bool operator!=(
+ const stream_protocol & p1,
+ const stream_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::stream_protocol::operator==]
+
+[indexterm2 operator==..generic::stream_protocol]
+Compare two protocols for equality.
+
+
+ friend bool operator==(
+ const stream_protocol & p1,
+ const stream_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::stream_protocol::protocol]
+
+[indexterm2 protocol..generic::stream_protocol]
+Obtain an identifier for the protocol.
+
+
+ int protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:socket generic::stream_protocol::socket]
+
+[indexterm2 socket..generic::stream_protocol]
+The generic socket type.
+
+
+ typedef basic_stream_socket< stream_protocol > socket;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.native_handle_type [*native_handle_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.native_type [*native_type]]]
+ [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.non_blocking_io [*non_blocking_io]]]
+ [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.reuse_address [*reuse_address]]]
+ [Socket option to allow the socket to be bound to an address that is already in use. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_stream_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_receive [*async_receive]]]
+ [Start an asynchronous receive. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_send [*async_send]]]
+ [Start an asynchronous send. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.basic_stream_socket [*basic_stream_socket]]]
+ [Construct a basic_stream_socket without opening it.
+
+ Construct and open a basic_stream_socket.
+
+ Construct a basic_stream_socket, opening it and binding it to the given local endpoint.
+
+ Construct a basic_stream_socket on an existing native socket.
+
+ Move-construct a basic_stream_socket from another.
+
+ Move-construct a basic_stream_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer.
+
+ Get a const reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.native [*native]]]
+ [(Deprecated: Use native_handle().) Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.native_handle [*native_handle]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.native_non_blocking [*native_non_blocking]]]
+ [Gets the non-blocking mode of the native socket implementation.
+
+ Sets the non-blocking mode of the native socket implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.non_blocking [*non_blocking]]]
+ [Gets the non-blocking mode of the socket.
+
+ Sets the non-blocking mode of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
+ [Move-assign a basic_stream_socket from another.
+
+ Move-assign a basic_stream_socket from a socket of another protocol type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.read_some [*read_some]]]
+ [Read some data from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.receive [*receive]]]
+ [Receive some data on the socket.
+
+ Receive some data on a connected socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.send [*send]]]
+ [Send some data on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.write_some [*write_some]]]
+ [Write some data to the socket. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.get_implementation [*get_implementation]]]
+ [Get the underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.get_service [*get_service]]]
+ [Get the service associated with the I/O object. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_end_of_record [*message_end_of_record]]]
+ [Specifies that the data marks the end of a record. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
+ [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_stream_socket.service [*service]]]
+ [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] class template provides asynchronous and blocking stream-oriented socket functionality.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+[section:stream_protocol generic::stream_protocol::stream_protocol]
+
+[indexterm2 stream_protocol..generic::stream_protocol]
+Construct a protocol object for a specific address family and protocol.
+
+
+ ``[link boost_asio.reference.generic__stream_protocol.stream_protocol.overload1 stream_protocol]``(
+ int address_family,
+ int socket_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__stream_protocol.stream_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ ``[link boost_asio.reference.generic__stream_protocol.stream_protocol.overload2 stream_protocol]``(
+ const Protocol & source_protocol);
+ `` [''''&raquo;''' [link boost_asio.reference.generic__stream_protocol.stream_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::stream_protocol::stream_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol.
+
+
+ stream_protocol(
+ int address_family,
+ int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::stream_protocol::stream_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ stream_protocol(
+ const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[@c][bad\_cast Thrown if the source protocol is not stream-oriented. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:type generic::stream_protocol::type]
+
+[indexterm2 type..generic::stream_protocol]
+Obtain an identifier for the type of the protocol.
+
+
+ int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:handler_type handler_type]
+
+
+Default handler type traits provided for all handlers.
+
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``,
+ typename Signature>
+ struct handler_type
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.handler_type.type [*type]]]
+ [The handler type for the specific signature. ]
+
+ ]
+
+]
+
+The [link boost_asio.reference.handler_type `handler_type`] traits class is used for determining the concrete handler type to be used for an asynchronous operation. It allows the handler type to be determined at the point where the specific completion handler signature is known.
+
+This template may be specialised for user-defined handler types.
+
+[heading Requirements]
+
+['Header: ][^boost/asio/handler_type.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:type handler_type::type]
+
+[indexterm2 type..handler_type]
+The handler type for the specific signature.
+
+
+ typedef Handler type;
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/handler_type.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[endsect]
+
+
+[section:has_service has_service]
+
+[indexterm1 has_service]
+
+ template<
+ typename ``[link boost_asio.reference.Service Service]``>
+ bool has_service(
+ io_service & ios);
+
+
+This function is used to determine whether the [link boost_asio.reference.io_service `io_service`] contains a service object corresponding to the given service type.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]
+
+]
+
+
+[heading Return Value]
+
+A boolean indicating whether the [link boost_asio.reference.io_service `io_service`] contains the service.
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/io_service.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:high_resolution_timer high_resolution_timer]
+
+[indexterm1 high_resolution_timer]
+Typedef for a timer based on the high resolution clock.
+
+
+ typedef basic_waitable_timer< chrono::high_resolution_clock > high_resolution_timer;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_waitable_timer.clock_type [*clock_type]]]
+ [The clock type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_waitable_timer.duration [*duration]]]
+ [The duration type of the clock. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_waitable_timer.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_waitable_timer.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_waitable_timer.time_point [*time_point]]]
+ [The time point type of the clock. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_waitable_timer.traits_type [*traits_type]]]
+ [The wait traits type. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.async_wait [*async_wait]]]
+ [Start an asynchronous wait on the timer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer [*basic_waitable_timer]]]
+ [Constructor.
+
+ Constructor to set a particular expiry time as an absolute time.
+
+ Constructor to set a particular expiry time relative to now. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.cancel [*cancel]]]
+ [Cancel any asynchronous operations that are waiting on the timer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.cancel_one [*cancel_one]]]
+ [Cancels one asynchronous operation that is waiting on the timer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.expires_at [*expires_at]]]
+ [Get the timer's expiry time as an absolute time.
+
+ Set the timer's expiry time as an absolute time. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.expires_from_now [*expires_from_now]]]
+ [Get the timer's expiry time relative to now.
+
+ Set the timer's expiry time relative to now. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.wait [*wait]]]
+ [Perform a blocking wait on the timer. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.get_implementation [*get_implementation]]]
+ [Get the underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.get_service [*get_service]]]
+ [Get the service associated with the I/O object. ]
+ ]
+
+]
+
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.implementation [*implementation]]]
+ [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_waitable_timer.service [*service]]]
+ [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.
+
+A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
+
+Most applications will use one of the [link boost_asio.reference.steady_timer `steady_timer`], [link boost_asio.reference.system_timer `system_timer`] or [link boost_asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
+
+
+[heading Remarks]
+
+This waitable timer functionality is for use with the C++11 standard library's `<chrono>` facility, or with the Boost.Chrono library.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+[heading Examples]
+
+Performing a blocking wait (C++11):
+
+ // Construct a timer without setting an expiry time.
+ boost::asio::steady_timer timer(io_service);
+
+ // Set an expiry time relative to now.
+ timer.expires_from_now(std::chrono::seconds(5));
+
+ // Wait for the timer to expire.
+ timer.wait();
+
+
+
+
+
+Performing an asynchronous wait (C++11):
+
+ void handler(const boost::system::error_code& error)
+ {
+ if (!error)
+ {
+ // Timer expired.
+ }
+ }
+
+ ...
+
+ // Construct a timer with an absolute expiry time.
+ boost::asio::steady_timer timer(io_service,
+ std::chrono::steady_clock::now() + std::chrono::seconds(60));
+
+ // Start an asynchronous wait.
+ timer.async_wait(handler);
+
+
+
+
+
+[heading Changing an active waitable timer's expiry time]
+
+
+
+Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:
+
+
+
+ void on_some_event()
+ {
+ if (my_timer.expires_from_now(seconds(5)) > 0)
+ {
+ // We managed to cancel the timer. Start new asynchronous wait.
+ my_timer.async_wait(on_timeout);
+ }
+ else
+ {
+ // Too late, timer has already expired!
+ }
+ }
+
+ void on_timeout(const boost::system::error_code& e)
+ {
+ if (e != boost::asio::error::operation_aborted)
+ {
+ // Timer was not cancelled, take necessary action.
+ }
+ }
+
+
+
+
+
+* The `boost::asio::basic_waitable_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.
+
+
+* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`.
+
+
+
+
+This typedef uses the C++11 `<chrono>` standard library facility, if available. Otherwise, it may use the Boost.Chrono library. To explicitly utilise Boost.Chrono, use the [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] template directly:
+
+ typedef basic_waitable_timer<boost::chrono::high_resolution_clock> timer;
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/high_resolution_timer.hpp]
+
+['Convenience header: ]None
+
+
+[endsect]
+
+
+[section:invalid_service_owner invalid_service_owner]
+
+
+Exception thrown when trying to add a service object to an [link boost_asio.reference.io_service `io_service`] where the service has a different owner.
+
+
+ class invalid_service_owner
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.invalid_service_owner.invalid_service_owner [*invalid_service_owner]]]
+ []
+ ]
+
+]
+
+[heading Requirements]
+
+['Header: ][^boost/asio/io_service.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:invalid_service_owner invalid_service_owner::invalid_service_owner]
+
+[indexterm2 invalid_service_owner..invalid_service_owner]
+
+ invalid_service_owner();
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:io_service io_service]
+
+
+Provides core I/O functionality.
+
+
+ class io_service :
+ noncopyable
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.io_service__id [*id]]]
+ [Class used to uniquely identify a service. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.io_service__service [*service]]]
+ [Base class for all io_service services. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.io_service__strand [*strand]]]
+ [Provides serialised handler execution. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.io_service__work [*work]]]
+ [Class to inform the io_service when it has work to do. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.io_service.fork_event [*fork_event]]]
+ [Fork-related event notifications. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.io_service.dispatch [*dispatch]]]
+ [Request the io_service to invoke the given handler. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.io_service [*io_service]]]
+ [Constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.notify_fork [*notify_fork]]]
+ [Notify the io_service of a fork-related event. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.poll [*poll]]]
+ [Run the io_service object's event processing loop to execute ready handlers. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.poll_one [*poll_one]]]
+ [Run the io_service object's event processing loop to execute one ready handler. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.post [*post]]]
+ [Request the io_service to invoke the given handler and return immediately. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.reset [*reset]]]
+ [Reset the io_service in preparation for a subsequent run() invocation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.run [*run]]]
+ [Run the io_service object's event processing loop. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.run_one [*run_one]]]
+ [Run the io_service object's event processing loop to execute at most one handler. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.stop [*stop]]]
+ [Stop the io_service object's event processing loop. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.stopped [*stopped]]]
+ [Determine whether the io_service object has been stopped. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.wrap [*wrap]]]
+ [Create a new handler that automatically dispatches the wrapped handler on the io_service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service._io_service [*~io_service]]]
+ [Destructor. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.io_service.add_service [*add_service]]]
+ [Add a service object to the io_service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.has_service [*has_service]]]
+ [Determine if an io_service contains a specified service type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service.use_service [*use_service]]]
+ [Obtain the service object corresponding to the given type. ]
+ ]
+
+]
+
+The [link boost_asio.reference.io_service `io_service`] class provides the core I/O functionality for users of the asynchronous I/O objects, including:
+
+
+* `boost::asio::ip::tcp::socket`
+
+* `boost::asio::ip::tcp::acceptor`
+
+* `boost::asio::ip::udp::socket`
+
+* [link boost_asio.reference.deadline_timer `deadline_timer`].
+
+The [link boost_asio.reference.io_service `io_service`] class also includes facilities intended for developers of custom asynchronous services.
+
+
+[heading Thread Safety]
+
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe, with the specific exceptions of the `reset()` and `notify_fork()` functions. Calling `reset()` while there are unfinished `run()`, `run_one()`, `poll()` or `poll_one()` calls results in undefined behaviour. The `notify_fork()` function should not be called while any [link boost_asio.reference.io_service `io_service`] function, or any function on an I/O object that is associated with the [link boost_asio.reference.io_service `io_service`], is being called in another thread.
+
+
+
+[heading Synchronous and asynchronous operations]
+
+
+
+Synchronous operations on I/O objects implicitly run the [link boost_asio.reference.io_service `io_service`] object for an individual operation. The [link boost_asio.reference.io_service `io_service`] functions `run()`, `run_one()`, `poll()` or `poll_one()` must be called for the [link boost_asio.reference.io_service `io_service`] to perform asynchronous operations on behalf of a C++ program. Notification that an asynchronous operation has completed is delivered by invocation of the associated handler. Handlers are invoked only by a thread that is currently calling any overload of `run()`, `run_one()`, `poll()` or `poll_one()` for the [link boost_asio.reference.io_service `io_service`].
+
+
+[heading Effect of exceptions thrown from handlers]
+
+
+
+If an exception is thrown from a handler, the exception is allowed to propagate through the throwing thread's invocation of `run()`, `run_one()`, `poll()` or `poll_one()`. No other threads that are calling any of these functions are affected. It is then the responsibility of the application to catch the exception.
+
+After the exception has been caught, the `run()`, `run_one()`, `poll()` or `poll_one()` call may be restarted ['without] the need for an intervening call to `reset()`. This allows the thread to rejoin the [link boost_asio.reference.io_service `io_service`] object's thread pool without impacting any other threads in the pool.
+
+For example:
+
+
+
+ boost::asio::io_service io_service;
+ ...
+ for (;;)
+ {
+ try
+ {
+ io_service.run();
+ break; // run() exited normally
+ }
+ catch (my_exception& e)
+ {
+ // Deal with exception as appropriate.
+ }
+ }
+
+
+
+
+
+[heading Stopping the io_service from running out of work]
+
+
+
+Some applications may need to prevent an [link boost_asio.reference.io_service `io_service`] object's `run()` call from returning when there is no more work to do. For example, the [link boost_asio.reference.io_service `io_service`] may be being run in a background thread that is launched prior to the application's asynchronous operations. The `run()` call may be kept running by creating an object of type [link boost_asio.reference.io_service__work `io_service::work`]:
+
+
+
+ boost::asio::io_service io_service;
+ boost::asio::io_service::work work(io_service);
+ ...
+
+
+
+
+To effect a shutdown, the application will then need to call the [link boost_asio.reference.io_service `io_service`] object's `stop()` member function. This will cause the [link boost_asio.reference.io_service `io_service`] `run()` call to return as soon as possible, abandoning unfinished operations and without permitting ready handlers to be dispatched.
+
+Alternatively, if the application requires that all operations and handlers be allowed to finish normally, the work object may be explicitly destroyed.
+
+
+
+ boost::asio::io_service io_service;
+ auto_ptr<boost::asio::io_service::work> work(
+ new boost::asio::io_service::work(io_service));
+ ...
+ work.reset(); // Allow run() to exit.
+
+
+
+
+
+[heading The io_service class and I/O services]
+
+
+
+Class [link boost_asio.reference.io_service `io_service`] implements an extensible, type-safe, polymorphic set of I/O services, indexed by service type. An object of class [link boost_asio.reference.io_service `io_service`] must be initialised before I/O objects such as sockets, resolvers and timers can be used. These I/O objects are distinguished by having constructors that accept an `io_service&` parameter.
+
+I/O services exist to manage the logical interface to the operating system on behalf of the I/O objects. In particular, there are resources that are shared across a class of I/O objects. For example, timers may be implemented in terms of a single timer queue. The I/O services manage these shared resources.
+
+Access to the services of an [link boost_asio.reference.io_service `io_service`] is via three function templates, `use_service()`, `add_service()` and `has_service()`.
+
+In a call to `use_service<Service>()`, the type argument chooses a service, making available all members of the named type. If `Service` is not present in an [link boost_asio.reference.io_service `io_service`], an object of type `Service` is created and added to the [link boost_asio.reference.io_service `io_service`]. A C++ program can check if an [link boost_asio.reference.io_service `io_service`] implements a particular service with the function template `has_service<Service>()`.
+
+Service objects may be explicitly added to an [link boost_asio.reference.io_service `io_service`] using the function template `add_service<Service>()`. If the `Service` is already present, the [link boost_asio.reference.service_already_exists `service_already_exists`] exception is thrown. If the owner of the service is not the same object as the [link boost_asio.reference.io_service `io_service`] parameter, the [link boost_asio.reference.invalid_service_owner `invalid_service_owner`] exception is thrown.
+
+Once a service reference is obtained from an [link boost_asio.reference.io_service `io_service`] object by calling `use_service()`, that reference remains usable as long as the owning [link boost_asio.reference.io_service `io_service`] object exists.
+
+All I/O service implementations have [link boost_asio.reference.io_service__service `io_service::service`] as a public base class. Custom I/O services may be implemented by deriving from this class and then added to an [link boost_asio.reference.io_service `io_service`] using the facilities described above.
+
+[heading Requirements]
+
+['Header: ][^boost/asio/io_service.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:add_service io_service::add_service]
+
+[indexterm2 add_service..io_service]
+Add a service object to the [link boost_asio.reference.io_service `io_service`].
+
+
+ template<
+ typename ``[link boost_asio.reference.Service Service]``>
+ friend void add_service(
+ io_service & ios,
+ Service * svc);
+
+
+This function is used to add a service to the [link boost_asio.reference.io_service `io_service`].
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]
+
+[[svc][The service object. On success, ownership of the service object is transferred to the [link boost_asio.reference.io_service `io_service`]. When the [link boost_asio.reference.io_service `io_service`] object is destroyed, it will destroy the service object by performing:
+``
+ delete static_cast<io_service::service*>(svc)
+``
+]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::asio::service_already_exists][Thrown if a service of the given type is already present in the [link boost_asio.reference.io_service `io_service`].]]
+
+[[boost::asio::invalid_service_owner][Thrown if the service's owning [link boost_asio.reference.io_service `io_service`] is not the [link boost_asio.reference.io_service `io_service`] object specified by the ios parameter. ]]
+
+]
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/io_service.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:dispatch io_service::dispatch]
+
+[indexterm2 dispatch..io_service]
+Request the [link boost_asio.reference.io_service `io_service`] to invoke the given handler.
+
+
+ template<
+ typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` dispatch(
+ CompletionHandler handler);
+
+
+This function is used to ask the [link boost_asio.reference.io_service `io_service`] to execute the given handler.
+
+The [link boost_asio.reference.io_service `io_service`] guarantees that the handler will only be called in a thread in which the `run()`, `run_one()`, `poll()` or `poll_one()` member functions is currently being invoked. The handler may be executed inside this function if the guarantee can be met.
 
 
 [heading Parameters]
@@ -54790,9 +60206,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -55095,7 +60511,7 @@
 
   template<
       typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
- void post(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` post(
       CompletionHandler handler);
 
 
@@ -55399,9 +60815,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -55531,9 +60947,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:id io_service::id::id]
@@ -55607,9 +61023,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:get_io_service io_service::service::get_io_service]
@@ -55729,6 +61145,11 @@
   ]
   
   [
+ [[link boost_asio.reference.io_service__strand.running_in_this_thread [*running_in_this_thread]]]
+ [Determine whether the strand is running in the current thread. ]
+ ]
+
+ [
     [[link boost_asio.reference.io_service__strand.strand [*strand]]]
     [Constructor. ]
   ]
@@ -55794,18 +61215,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/strand.hpp]
+['Header: ][^boost/asio/strand.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:dispatch io_service::strand::dispatch]
@@ -55816,7 +61237,7 @@
 
   template<
       typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
- void dispatch(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` dispatch(
       CompletionHandler handler);
 
 
@@ -55878,7 +61299,7 @@
 
   template<
       typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
- void post(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` post(
       CompletionHandler handler);
 
 
@@ -55907,6 +61328,27 @@
 
 
 
+[section:running_in_this_thread io_service::strand::running_in_this_thread]
+
+[indexterm2 running_in_this_thread..io_service::strand]
+Determine whether the strand is running in the current thread.
+
+
+ bool running_in_this_thread() const;
+
+
+
+[heading Return Value]
+
+`true` if the current thread is executing a handler that was submitted to the strand using `post()`, `dispatch()` or `wrap()`. Otherwise returns `false`.
+
+
+
+
+[endsect]
+
+
+
 [section:strand io_service::strand::strand]
 
 [indexterm2 strand..io_service::strand]
@@ -56054,9 +61496,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:get_io_service io_service::work::get_io_service]
@@ -56277,17 +61719,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:address ip::address::address]
 
@@ -56555,9 +61997,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -56577,9 +62019,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -56639,9 +62081,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -56734,9 +62176,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -56756,9 +62198,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -56778,9 +62220,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address.hpp]
+['Header: ][^boost/asio/ip/address.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57029,17 +62471,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:address_v4 ip::address_v4::address_v4]
 
@@ -57219,9 +62661,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57442,9 +62884,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57464,9 +62906,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57526,9 +62968,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57563,9 +63005,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57585,9 +63027,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57607,9 +63049,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v4.hpp]
+['Header: ][^boost/asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -57889,17 +63331,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:address_v6 ip::address_v6::address_v6]
 
@@ -58008,9 +63450,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58300,9 +63742,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58322,9 +63764,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58384,9 +63826,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58421,9 +63863,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58443,9 +63885,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58465,9 +63907,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/address_v6.hpp]
+['Header: ][^boost/asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -58770,18 +64212,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:address ip::basic_endpoint::address]
 
@@ -59015,9 +64457,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59037,9 +64479,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59059,9 +64501,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59118,9 +64560,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59155,9 +64597,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59177,9 +64619,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59199,9 +64641,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59282,9 +64724,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_endpoint.hpp]
+['Header: ][^boost/asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59455,17 +64897,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:async_resolve ip::basic_resolver::async_resolve]
 
@@ -59475,7 +64917,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload1 async_resolve]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload1 async_resolve]``(
       const query & q,
       ResolveHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.async_resolve.overload1 more...]]``
@@ -59486,7 +64928,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload2 async_resolve]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload2 async_resolve]``(
       const endpoint_type & e,
       ResolveHandler handler);
   `` [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.async_resolve.overload2 more...]]``
@@ -59500,7 +64942,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void async_resolve(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       const query & q,
       ResolveHandler handler);
 
@@ -59548,7 +64990,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void async_resolve(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       const endpoint_type & e,
       ResolveHandler handler);
 
@@ -59647,9 +65089,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59810,9 +65252,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59932,18 +65374,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -59962,9 +65404,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60078,18 +65520,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60347,9 +65789,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver.hpp]
+['Header: ][^boost/asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60427,17 +65869,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_entry.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_entry.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:basic_resolver_entry ip::basic_resolver_entry::basic_resolver_entry]
 
@@ -60518,9 +65960,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_entry.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_entry.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60567,9 +66009,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_entry.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_entry.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60707,17 +66149,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:basic_resolver_iterator ip::basic_resolver_iterator::basic_resolver_iterator]
@@ -60804,9 +66246,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60825,9 +66267,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60861,9 +66303,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60945,9 +66387,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -60966,9 +66408,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -61042,18 +66484,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -61127,18 +66569,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -61257,17 +66699,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_query.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_query.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:address_configured ip::basic_resolver_query::address_configured]
@@ -61540,9 +66982,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_query.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_query.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -61640,9 +67082,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/basic_resolver_query.hpp]
+['Header: ][^boost/asio/ip/basic_resolver_query.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -61697,9 +67139,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/host_name.hpp]
+['Header: ][^boost/asio/ip/host_name.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 ip::host_name (1 of 2 overloads)]
@@ -61820,18 +67262,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/icmp.hpp]
+['Header: ][^boost/asio/ip/icmp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:endpoint ip::icmp::endpoint]
@@ -61976,9 +67418,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -61986,9 +67428,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/icmp.hpp]
+['Header: ][^boost/asio/ip/icmp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62022,9 +67464,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/icmp.hpp]
+['Header: ][^boost/asio/ip/icmp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62044,9 +67486,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/icmp.hpp]
+['Header: ][^boost/asio/ip/icmp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62196,18 +67638,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/icmp.hpp]
+['Header: ][^boost/asio/ip/icmp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62437,7 +67879,9 @@
 
      Construct a basic_raw_socket on an existing native socket.
 
- Move-construct a basic_raw_socket from another. ]
+ Move-construct a basic_raw_socket from another.
+
+ Move-construct a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -62523,7 +67967,9 @@
   
   [
     [[link boost_asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_raw_socket from another. ]
+ [Move-assign a basic_raw_socket from another.
+
+ Move-assign a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -62631,18 +68077,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/icmp.hpp]
+['Header: ][^boost/asio/ip/icmp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62736,9 +68182,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/multicast.hpp]
+['Header: ][^boost/asio/ip/multicast.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62787,9 +68233,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/multicast.hpp]
+['Header: ][^boost/asio/ip/multicast.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62828,9 +68274,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/multicast.hpp]
+['Header: ][^boost/asio/ip/multicast.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62869,9 +68315,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/multicast.hpp]
+['Header: ][^boost/asio/ip/multicast.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62910,9 +68356,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/multicast.hpp]
+['Header: ][^boost/asio/ip/multicast.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -62994,9 +68440,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_query_base.hpp]
+['Header: ][^boost/asio/ip/resolver_query_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:address_configured ip::resolver_query_base::address_configured]
@@ -63053,9 +68499,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_query_base.hpp]
+['Header: ][^boost/asio/ip/resolver_query_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -63245,9 +68691,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_service.hpp]
+['Header: ][^boost/asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:async_resolve ip::resolver_service::async_resolve]
 
@@ -63257,7 +68703,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void ``[link boost_asio.reference.ip__resolver_service.async_resolve.overload1 async_resolve]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.ip__resolver_service.async_resolve.overload1 async_resolve]``(
       implementation_type & impl,
       const query_type & query,
       ResolveHandler handler);
@@ -63269,7 +68715,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void ``[link boost_asio.reference.ip__resolver_service.async_resolve.overload2 async_resolve]``(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.ip__resolver_service.async_resolve.overload2 async_resolve]``(
       implementation_type & impl,
       const endpoint_type & endpoint,
       ResolveHandler handler);
@@ -63284,7 +68730,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void async_resolve(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       implementation_type & impl,
       const query_type & query,
       ResolveHandler handler);
@@ -63303,7 +68749,7 @@
 
   template<
       typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void async_resolve(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       implementation_type & impl,
       const endpoint_type & endpoint,
       ResolveHandler handler);
@@ -63373,9 +68819,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_service.hpp]
+['Header: ][^boost/asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -63425,9 +68871,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_service.hpp]
+['Header: ][^boost/asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -63547,18 +68993,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_service.hpp]
+['Header: ][^boost/asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -63577,9 +69023,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_service.hpp]
+['Header: ][^boost/asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -63693,18 +69139,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/resolver_service.hpp]
+['Header: ][^boost/asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -63895,18 +69341,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:acceptor ip::tcp::acceptor]
@@ -64102,7 +69548,9 @@
 
      Construct a basic_socket_acceptor on an existing native acceptor.
 
- Move-construct a basic_socket_acceptor from another. ]
+ Move-construct a basic_socket_acceptor from another.
+
+ Move-construct a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -64181,7 +69629,9 @@
   
   [
     [[link boost_asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket_acceptor from another. ]
+ [Move-assign a basic_socket_acceptor from another.
+
+ Move-assign a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -64259,9 +69709,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -64283,9 +69733,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -64434,9 +69884,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -64444,9 +69894,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -64553,9 +70003,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -64604,9 +70054,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -64626,9 +70076,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -64648,9 +70098,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -64800,18 +70250,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -65041,7 +70491,9 @@
 
      Construct a basic_stream_socket on an existing native socket.
 
- Move-construct a basic_stream_socket from another. ]
+ Move-construct a basic_stream_socket from another.
+
+ Move-construct a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -65127,7 +70579,9 @@
   
   [
     [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_stream_socket from another. ]
+ [Move-assign a basic_stream_socket from another.
+
+ Move-assign a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -65237,9 +70691,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -65247,9 +70701,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/tcp.hpp]
+['Header: ][^boost/asio/ip/tcp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -65388,18 +70842,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/udp.hpp]
+['Header: ][^boost/asio/ip/udp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:endpoint ip::udp::endpoint]
@@ -65544,9 +70998,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -65554,9 +71008,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/udp.hpp]
+['Header: ][^boost/asio/ip/udp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -65590,9 +71044,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/udp.hpp]
+['Header: ][^boost/asio/ip/udp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -65612,9 +71066,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/udp.hpp]
+['Header: ][^boost/asio/ip/udp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -65764,18 +71218,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/udp.hpp]
+['Header: ][^boost/asio/ip/udp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66005,7 +71459,9 @@
 
      Construct a basic_datagram_socket on an existing native socket.
 
- Move-construct a basic_datagram_socket from another. ]
+ Move-construct a basic_datagram_socket from another.
+
+ Move-construct a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -66091,7 +71547,9 @@
   
   [
     [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_datagram_socket from another. ]
+ [Move-assign a basic_datagram_socket from another.
+
+ Move-assign a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -66199,18 +71657,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/udp.hpp]
+['Header: ][^boost/asio/ip/udp.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66304,9 +71762,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/unicast.hpp]
+['Header: ][^boost/asio/ip/unicast.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66355,9 +71813,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ip/v6_only.hpp]
+['Header: ][^boost/asio/ip/v6_only.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66387,9 +71845,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read_until.hpp]
+['Header: ][^boost/asio/read_until.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value is_match_condition::value]
@@ -66432,9 +71890,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/is_read_buffered.hpp]
+['Header: ][^boost/asio/is_read_buffered.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value is_read_buffered::value]
@@ -66477,9 +71935,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/is_write_buffered.hpp]
+['Header: ][^boost/asio/is_write_buffered.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value is_write_buffered::value]
@@ -66633,18 +72091,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:basic_endpoint local::basic_endpoint::basic_endpoint]
 
@@ -66805,9 +72263,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66827,9 +72285,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66849,9 +72307,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66908,9 +72366,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66945,9 +72403,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66967,9 +72425,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -66989,9 +72447,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -67091,9 +72549,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/basic_endpoint.hpp]
+['Header: ][^boost/asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -67158,9 +72616,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/connect_pair.hpp]
+['Header: ][^boost/asio/local/connect_pair.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 local::connect_pair (1 of 2 overloads)]
@@ -67260,18 +72718,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/datagram_protocol.hpp]
+['Header: ][^boost/asio/local/datagram_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:endpoint local::datagram_protocol::endpoint]
@@ -67407,9 +72865,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -67417,9 +72875,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/datagram_protocol.hpp]
+['Header: ][^boost/asio/local/datagram_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -67677,7 +73135,9 @@
 
      Construct a basic_datagram_socket on an existing native socket.
 
- Move-construct a basic_datagram_socket from another. ]
+ Move-construct a basic_datagram_socket from another.
+
+ Move-construct a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -67763,7 +73223,9 @@
   
   [
     [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_datagram_socket from another. ]
+ [Move-assign a basic_datagram_socket from another.
+
+ Move-assign a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -67871,18 +73333,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/datagram_protocol.hpp]
+['Header: ][^boost/asio/local/datagram_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -67974,18 +73436,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/stream_protocol.hpp]
+['Header: ][^boost/asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:acceptor local::stream_protocol::acceptor]
@@ -68181,7 +73643,9 @@
 
      Construct a basic_socket_acceptor on an existing native acceptor.
 
- Move-construct a basic_socket_acceptor from another. ]
+ Move-construct a basic_socket_acceptor from another.
+
+ Move-construct a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -68260,7 +73724,9 @@
   
   [
     [[link boost_asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
- [Move-assign a basic_socket_acceptor from another. ]
+ [Move-assign a basic_socket_acceptor from another.
+
+ Move-assign a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -68338,9 +73804,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -68362,9 +73828,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/stream_protocol.hpp]
+['Header: ][^boost/asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -68504,9 +73970,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -68514,9 +73980,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/stream_protocol.hpp]
+['Header: ][^boost/asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -68623,9 +74089,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/stream_protocol.hpp]
+['Header: ][^boost/asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -68869,7 +74335,9 @@
 
      Construct a basic_stream_socket on an existing native socket.
 
- Move-construct a basic_stream_socket from another. ]
+ Move-construct a basic_stream_socket from another.
+
+ Move-construct a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -68955,7 +74423,9 @@
   
   [
     [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
- [Move-assign a basic_stream_socket from another. ]
+ [Move-assign a basic_stream_socket from another.
+
+ Move-assign a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -69065,9 +74535,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -69075,9 +74545,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/local/stream_protocol.hpp]
+['Header: ][^boost/asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69155,9 +74625,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:mutable_buffer mutable_buffer::mutable_buffer]
 
@@ -69328,9 +74798,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:begin mutable_buffers_1::begin]
@@ -69359,9 +74829,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69546,9 +75016,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69604,9 +75074,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:begin null_buffers::begin]
@@ -69635,9 +75105,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69714,9 +75184,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/buffer.hpp]
+['Header: ][^boost/asio/buffer.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69737,9 +75207,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/placeholders.hpp]
+['Header: ][^boost/asio/placeholders.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69757,9 +75227,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/placeholders.hpp]
+['Header: ][^boost/asio/placeholders.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69777,9 +75247,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/placeholders.hpp]
+['Header: ][^boost/asio/placeholders.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -69797,9 +75267,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/placeholders.hpp]
+['Header: ][^boost/asio/placeholders.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -70001,17 +75471,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign posix::basic_descriptor::assign]
 
@@ -70230,9 +75700,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -70537,9 +76007,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -70947,18 +76417,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -71009,9 +76479,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -71153,9 +76623,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -71322,9 +76792,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -71422,9 +76892,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -71657,18 +77127,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign posix::basic_stream_descriptor::assign]
 
@@ -71734,7 +77204,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -71791,7 +77261,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -72007,9 +77477,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -72326,9 +77796,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -72750,18 +78220,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -72818,9 +78288,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -72971,9 +78441,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -73149,9 +78619,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -73378,9 +78848,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -73557,9 +79027,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/descriptor_base.hpp]
+['Header: ][^boost/asio/posix/descriptor_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:bytes_readable posix::descriptor_base::bytes_readable]
@@ -73593,9 +79063,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/descriptor_base.hpp]
+['Header: ][^boost/asio/posix/descriptor_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -73632,9 +79102,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/descriptor_base.hpp]
+['Header: ][^boost/asio/posix/descriptor_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -73865,9 +79335,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -73875,9 +79345,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/stream_descriptor.hpp]
+['Header: ][^boost/asio/posix/stream_descriptor.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -74043,9 +79513,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
+['Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign posix::stream_descriptor_service::assign]
@@ -74074,7 +79544,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -74094,7 +79564,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -74210,9 +79680,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
+['Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -74328,9 +79798,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
+['Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -74403,9 +79873,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
+['Header: ][^boost/asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -74659,6 +80129,11 @@
   ]
   
   [
+ [[link boost_asio.reference.raw_socket_service.converting_move_construct [*converting_move_construct]]]
+ [Move-construct a new raw socket implementation from another protocol type. ]
+ ]
+
+ [
     [[link boost_asio.reference.raw_socket_service.destroy [*destroy]]]
     [Destroy a raw socket implementation. ]
   ]
@@ -74782,9 +80257,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/raw_socket_service.hpp]
+['Header: ][^boost/asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign raw_socket_service::assign]
@@ -74813,7 +80288,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -74833,7 +80308,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -74854,7 +80329,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive_from(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
@@ -74876,7 +80351,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -74897,7 +80372,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send_to(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
@@ -75021,6 +80496,25 @@
 
 
 
+[section:converting_move_construct raw_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..raw_socket_service]
+Move-construct a new raw socket implementation from another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``>
+ void converting_move_construct(
+ implementation_type & impl,
+ typename raw_socket_service< Protocol1 >::implementation_type & other_impl,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy raw_socket_service::destroy]
 
 [indexterm2 destroy..raw_socket_service]
@@ -75048,9 +80542,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/raw_socket_service.hpp]
+['Header: ][^boost/asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -75119,9 +80613,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/raw_socket_service.hpp]
+['Header: ][^boost/asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -75253,9 +80747,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/raw_socket_service.hpp]
+['Header: ][^boost/asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -75328,9 +80822,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/raw_socket_service.hpp]
+['Header: ][^boost/asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -75418,9 +80912,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/raw_socket_service.hpp]
+['Header: ][^boost/asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -75662,9 +81156,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read.hpp]
+['Header: ][^boost/asio/read.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 read (1 of 8 overloads)]
@@ -76250,7 +81744,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t ``[link boost_asio.reference.read_at.overload1 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers);
   `` [''''&raquo;''' [link boost_asio.reference.read_at.overload1 more...]]``
 
@@ -76259,7 +81753,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t ``[link boost_asio.reference.read_at.overload2 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.read_at.overload2 more...]]``
@@ -76270,7 +81764,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.read_at.overload3 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition);
   `` [''''&raquo;''' [link boost_asio.reference.read_at.overload3 more...]]``
@@ -76281,7 +81775,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.read_at.overload4 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -76292,7 +81786,7 @@
       typename Allocator>
   std::size_t ``[link boost_asio.reference.read_at.overload5 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b);
   `` [''''&raquo;''' [link boost_asio.reference.read_at.overload5 more...]]``
 
@@ -76301,7 +81795,7 @@
       typename Allocator>
   std::size_t ``[link boost_asio.reference.read_at.overload6 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.read_at.overload6 more...]]``
@@ -76312,7 +81806,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.read_at.overload7 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition);
   `` [''''&raquo;''' [link boost_asio.reference.read_at.overload7 more...]]``
@@ -76323,7 +81817,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.read_at.overload8 read_at]``(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -76331,9 +81825,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read_at.hpp]
+['Header: ][^boost/asio/read_at.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 read_at (1 of 8 overloads)]
@@ -76347,7 +81841,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers);
 
 
@@ -76430,7 +81924,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
@@ -76508,7 +82002,7 @@
       typename CompletionCondition>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition);
 
@@ -76594,7 +82088,7 @@
       typename CompletionCondition>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -76661,7 +82155,7 @@
       typename Allocator>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b);
 
 
@@ -76731,7 +82225,7 @@
       typename Allocator>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       boost::system::error_code & ec);
 
@@ -76795,7 +82289,7 @@
       typename CompletionCondition>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition);
 
@@ -76867,7 +82361,7 @@
       typename CompletionCondition>
   std::size_t read_at(
       SyncRandomAccessReadDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -76992,7 +82486,7 @@
       SyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
- typename boost::enable_if< is_match_condition< MatchCondition > >::type * = 0);
+ typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
   `` [''''&raquo;''' [link boost_asio.reference.read_until.overload7 more...]]``
 
   template<
@@ -77004,14 +82498,14 @@
       boost::asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
       boost::system::error_code & ec,
- typename boost::enable_if< is_match_condition< MatchCondition > >::type * = 0);
+ typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
   `` [''''&raquo;''' [link boost_asio.reference.read_until.overload8 more...]]``
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/read_until.hpp]
+['Header: ][^boost/asio/read_until.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 read_until (1 of 8 overloads)]
@@ -77490,7 +82984,7 @@
       SyncReadStream & s,
       boost::asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
- typename boost::enable_if< is_match_condition< MatchCondition > >::type * = 0);
+ typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
 
 
 This function is used to read data into the specified streambuf until a user-defined match condition function object, when applied to the data contained in the streambuf, indicates a successful match. The call will block until one of the following conditions is true:
@@ -77624,7 +83118,7 @@
       boost::asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
       boost::system::error_code & ec,
- typename boost::enable_if< is_match_condition< MatchCondition > >::type * = 0);
+ typename enable_if< is_match_condition< MatchCondition >::value >::type * = 0);
 
 
 This function is used to read data into the specified streambuf until a user-defined match condition function object, when applied to the data contained in the streambuf, indicates a successful match. The call will block until one of the following conditions is true:
@@ -77794,6 +83288,11 @@
   ]
   
   [
+ [[link boost_asio.reference.seq_packet_socket_service.converting_move_construct [*converting_move_construct]]]
+ [Move-construct a new sequenced packet socket implementation from another protocol type. ]
+ ]
+
+ [
     [[link boost_asio.reference.seq_packet_socket_service.destroy [*destroy]]]
     [Destroy a sequenced packet socket implementation. ]
   ]
@@ -77907,9 +83406,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/seq_packet_socket_service.hpp]
+['Header: ][^boost/asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign seq_packet_socket_service::assign]
@@ -77938,7 +83437,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -78105,6 +83604,25 @@
 
 
 
+[section:converting_move_construct seq_packet_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..seq_packet_socket_service]
+Move-construct a new sequenced packet socket implementation from another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``>
+ void converting_move_construct(
+ implementation_type & impl,
+ typename seq_packet_socket_service< Protocol1 >::implementation_type & other_impl,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy seq_packet_socket_service::destroy]
 
 [indexterm2 destroy..seq_packet_socket_service]
@@ -78132,9 +83650,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/seq_packet_socket_service.hpp]
+['Header: ][^boost/asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -78203,9 +83721,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/seq_packet_socket_service.hpp]
+['Header: ][^boost/asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -78337,9 +83855,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/seq_packet_socket_service.hpp]
+['Header: ][^boost/asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -78412,9 +83930,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/seq_packet_socket_service.hpp]
+['Header: ][^boost/asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -78504,9 +84022,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/seq_packet_socket_service.hpp]
+['Header: ][^boost/asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -78815,18 +84333,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port.hpp]
+['Header: ][^boost/asio/serial_port.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -78895,9 +84413,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_base.hpp]
+['Header: ][^boost/asio/serial_port_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:_serial_port_base serial_port_base::~serial_port_base]
@@ -78955,9 +84473,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_base.hpp]
+['Header: ][^boost/asio/serial_port_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:baud_rate serial_port_base::baud_rate::baud_rate]
@@ -79054,9 +84572,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_base.hpp]
+['Header: ][^boost/asio/serial_port_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:character_size serial_port_base::character_size::character_size]
@@ -79166,9 +84684,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_base.hpp]
+['Header: ][^boost/asio/serial_port_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:flow_control serial_port_base::flow_control::flow_control]
@@ -79314,9 +84832,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_base.hpp]
+['Header: ][^boost/asio/serial_port_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:load serial_port_base::parity::load]
@@ -79462,9 +84980,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_base.hpp]
+['Header: ][^boost/asio/serial_port_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:load serial_port_base::stop_bits::load]
@@ -79714,9 +85232,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_service.hpp]
+['Header: ][^boost/asio/serial_port_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign serial_port_service::assign]
@@ -79745,7 +85263,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -79765,7 +85283,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -79900,9 +85418,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_service.hpp]
+['Header: ][^boost/asio/serial_port_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -79999,9 +85517,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_service.hpp]
+['Header: ][^boost/asio/serial_port_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -80020,9 +85538,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/serial_port_service.hpp]
+['Header: ][^boost/asio/serial_port_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -80158,9 +85676,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:service_already_exists service_already_exists::service_already_exists]
@@ -80293,9 +85811,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -80351,9 +85869,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/signal_set.hpp]
+['Header: ][^boost/asio/signal_set.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -80446,9 +85964,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/signal_set_service.hpp]
+['Header: ][^boost/asio/signal_set_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:add signal_set_service::add]
@@ -80474,7 +85992,7 @@
 
   template<
       typename ``[link boost_asio.reference.SignalHandler SignalHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       SignalHandler handler);
 
@@ -80589,9 +86107,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/signal_set_service.hpp]
+['Header: ][^boost/asio/signal_set_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -80725,6 +86243,11 @@
   ]
   
   [
+ [[link boost_asio.reference.socket_acceptor_service.converting_move_construct [*converting_move_construct]]]
+ [Move-construct a new socket acceptor implementation from another protocol type. ]
+ ]
+
+ [
     [[link boost_asio.reference.socket_acceptor_service.destroy [*destroy]]]
     [Destroy a socket acceptor implementation. ]
   ]
@@ -80823,9 +86346,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_acceptor_service.hpp]
+['Header: ][^boost/asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:accept socket_acceptor_service::accept]
@@ -80835,12 +86358,14 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``>
   boost::system::error_code accept(
       implementation_type & impl,
- basic_socket< protocol_type, SocketService > & peer,
+ basic_socket< Protocol1, SocketService > & peer,
       endpoint_type * peer_endpoint,
- boost::system::error_code & ec);
+ boost::system::error_code & ec,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
 
 
 
@@ -80873,13 +86398,15 @@
 
 
   template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``,
       typename ``[link boost_asio.reference.SocketService SocketService]``,
       typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
- void async_accept(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_accept(
       implementation_type & impl,
- basic_socket< protocol_type, SocketService > & peer,
+ basic_socket< Protocol1, SocketService > & peer,
       endpoint_type * peer_endpoint,
- AcceptHandler handler);
+ AcceptHandler handler,
+ typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type * = 0);
 
 
 
@@ -80951,6 +86478,25 @@
 
 
 
+[section:converting_move_construct socket_acceptor_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..socket_acceptor_service]
+Move-construct a new socket acceptor implementation from another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``>
+ void converting_move_construct(
+ implementation_type & impl,
+ typename socket_acceptor_service< Protocol1 >::implementation_type & other_impl,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy socket_acceptor_service::destroy]
 
 [indexterm2 destroy..socket_acceptor_service]
@@ -80978,9 +86524,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_acceptor_service.hpp]
+['Header: ][^boost/asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81049,9 +86595,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_acceptor_service.hpp]
+['Header: ][^boost/asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81200,9 +86746,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_acceptor_service.hpp]
+['Header: ][^boost/asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81275,9 +86821,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_acceptor_service.hpp]
+['Header: ][^boost/asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81367,9 +86913,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_acceptor_service.hpp]
+['Header: ][^boost/asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81576,9 +87122,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:broadcast socket_base::broadcast]
@@ -81623,9 +87169,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81663,9 +87209,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81714,9 +87260,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81765,9 +87311,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81816,9 +87362,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81867,9 +87413,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81919,9 +87465,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -81982,9 +87528,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82049,9 +87595,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82100,9 +87646,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82151,9 +87697,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82202,9 +87748,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82253,9 +87799,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82304,9 +87850,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/socket_base.hpp]
+['Header: ][^boost/asio/socket_base.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -82367,6 +87913,256 @@
 
 [endsect]
 
+[section:spawn spawn]
+
+[indexterm1 spawn]
+Start a new stackful coroutine.
+
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``,
+ typename Function>
+ void ``[link boost_asio.reference.spawn.overload1 spawn]``(
+ Handler handler,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+ `` [''''&raquo;''' [link boost_asio.reference.spawn.overload1 more...]]``
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``,
+ typename Function>
+ void ``[link boost_asio.reference.spawn.overload2 spawn]``(
+ basic_yield_context< Handler > ctx,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+ `` [''''&raquo;''' [link boost_asio.reference.spawn.overload2 more...]]``
+
+ template<
+ typename Function>
+ void ``[link boost_asio.reference.spawn.overload3 spawn]``(
+ boost::asio::io_service::strand strand,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+ `` [''''&raquo;''' [link boost_asio.reference.spawn.overload3 more...]]``
+
+ template<
+ typename Function>
+ void ``[link boost_asio.reference.spawn.overload4 spawn]``(
+ boost::asio::io_service & io_service,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+ `` [''''&raquo;''' [link boost_asio.reference.spawn.overload4 more...]]``
+
+The `spawn()` function is a high-level wrapper over the Boost.Coroutine library. This function enables programs to implement asynchronous logic in a synchronous manner, as illustrated by the following example:
+
+
+
+ boost::asio::spawn(my_strand, do_echo);
+
+ // ...
+
+ void do_echo(boost::asio::yield_context yield)
+ {
+ try
+ {
+ char data[128];
+ for (;;)
+ {
+ std::size_t length =
+ my_socket.async_read_some(
+ boost::asio::buffer(data), yield);
+
+ boost::asio::async_write(my_socket,
+ boost::asio::buffer(data, length), yield);
+ }
+ }
+ catch (std::exception& e)
+ {
+ // ...
+ }
+ }
+
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/spawn.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:overload1 spawn (1 of 4 overloads)]
+
+
+Start a new stackful coroutine, calling the specified handler when it completes.
+
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``,
+ typename Function>
+ void spawn(
+ Handler handler,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+
+
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[handler][A handler to be called when the coroutine exits. More importantly, the handler provides an execution context (via the the handler invocation hook) for the coroutine. The handler must have the signature:
+``
+ void handler();
+``
+]]
+
+[[function][The coroutine function. The function must have the signature:
+``
+ void function(basic_yield_context<Handler> yield);
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 spawn (2 of 4 overloads)]
+
+
+Start a new stackful coroutine, inheriting the execution context of another.
+
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``,
+ typename Function>
+ void spawn(
+ basic_yield_context< Handler > ctx,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+
+
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ctx][Identifies the current coroutine as a parent of the new coroutine. This specifies that the new coroutine should inherit the execution context of the parent. For example, if the parent coroutine is executing in a particular strand, then the new coroutine will execute in the same strand.]]
+
+[[function][The coroutine function. The function must have the signature:
+``
+ void function(basic_yield_context<Handler> yield);
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+
+[section:overload3 spawn (3 of 4 overloads)]
+
+
+Start a new stackful coroutine that executes in the contex of a strand.
+
+
+ template<
+ typename Function>
+ void spawn(
+ boost::asio::io_service::strand strand,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+
+
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[strand][Identifies a strand. By starting multiple coroutines on the same strand, the implementation ensures that none of those coroutines can execute simultaneously.]]
+
+[[function][The coroutine function. The function must have the signature:
+``
+ void function(yield_context yield);
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+
+[section:overload4 spawn (4 of 4 overloads)]
+
+
+Start a new stackful coroutine that executes on a given [link boost_asio.reference.io_service `io_service`].
+
+
+ template<
+ typename Function>
+ void spawn(
+ boost::asio::io_service & io_service,
+ Function function,
+ const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
+
+
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][Identifies the [link boost_asio.reference.io_service `io_service`] that will run the coroutine. The new coroutine is implicitly given its own strand within this [link boost_asio.reference.io_service `io_service`].]]
+
+[[function][The coroutine function. The function must have the signature:
+``
+ void function(yield_context yield);
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:ssl__context ssl::context]
 
 
@@ -82429,11 +88225,21 @@
   [[Name][Description]]
 
   [
+ [[link boost_asio.reference.ssl__context.add_certificate_authority [*add_certificate_authority]]]
+ [Add certification authority for performing verification. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.add_verify_path [*add_verify_path]]]
     [Add a directory containing certificate authority files to be used for performing verification. ]
   ]
   
   [
+ [[link boost_asio.reference.ssl__context.clear_options [*clear_options]]]
+ [Clear options on the context. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.context [*context]]]
     [Constructor.
 
@@ -82483,11 +88289,26 @@
   ]
   
   [
+ [[link boost_asio.reference.ssl__context.set_verify_depth [*set_verify_depth]]]
+ [Set the peer verification depth. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.set_verify_mode [*set_verify_mode]]]
     [Set the peer verification mode. ]
   ]
   
   [
+ [[link boost_asio.reference.ssl__context.use_certificate [*use_certificate]]]
+ [Use a certificate from a memory buffer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ssl__context.use_certificate_chain [*use_certificate_chain]]]
+ [Use a certificate chain from a memory buffer. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.use_certificate_chain_file [*use_certificate_chain_file]]]
     [Use a certificate chain from a file. ]
   ]
@@ -82498,16 +88319,31 @@
   ]
   
   [
+ [[link boost_asio.reference.ssl__context.use_private_key [*use_private_key]]]
+ [Use a private key from a memory buffer. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.use_private_key_file [*use_private_key_file]]]
     [Use a private key from a file. ]
   ]
   
   [
+ [[link boost_asio.reference.ssl__context.use_rsa_private_key [*use_rsa_private_key]]]
+ [Use an RSA private key from a memory buffer. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.use_rsa_private_key_file [*use_rsa_private_key_file]]]
     [Use an RSA private key from a file. ]
   ]
   
   [
+ [[link boost_asio.reference.ssl__context.use_tmp_dh [*use_tmp_dh]]]
+ [Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.use_tmp_dh_file [*use_tmp_dh_file]]]
     [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
   ]
@@ -82529,6 +88365,11 @@
   ]
 
   [
+ [[link boost_asio.reference.ssl__context.no_compression [*no_compression]]]
+ [Disable compression. Compression is disabled by default. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context.no_sslv2 [*no_sslv2]]]
     [Disable SSL v2. ]
   ]
@@ -82552,9 +88393,107 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/context.hpp]
+['Header: ][^boost/asio/ssl/context.hpp]
+
+['Convenience header: ][^boost/asio/ssl.hpp]
+
+[section:add_certificate_authority ssl::context::add_certificate_authority]
+
+[indexterm2 add_certificate_authority..ssl::context]
+Add certification authority for performing verification.
+
+
+ void ``[link boost_asio.reference.ssl__context.add_certificate_authority.overload1 add_certificate_authority]``(
+ const const_buffer & ca);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.add_certificate_authority.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.add_certificate_authority.overload2 add_certificate_authority]``(
+ const const_buffer & ca,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.add_certificate_authority.overload2 more...]]``
+
+
+[section:overload1 ssl::context::add_certificate_authority (1 of 2 overloads)]
+
+
+Add certification authority for performing verification.
+
+
+ void add_certificate_authority(
+ const const_buffer & ca);
+
+
+This function is used to add one trusted certification authority from a memory buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ca][The buffer containing the certification authority certificate. The certificate must use the PEM format.]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_get_cert_store` and `X509_STORE_add_cert`.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::add_certificate_authority (2 of 2 overloads)]
+
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+Add certification authority for performing verification.
+
+
+ boost::system::error_code add_certificate_authority(
+ const const_buffer & ca,
+ boost::system::error_code & ec);
+
+
+This function is used to add one trusted certification authority from a memory buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ca][The buffer containing the certification authority certificate. The certificate must use the PEM format.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_get_cert_store` and `X509_STORE_add_cert`.
+
+
+
+
+[endsect]
+
+
+[endsect]
 
 [section:add_verify_path ssl::context::add_verify_path]
 
@@ -82654,6 +88593,104 @@
 
 [endsect]
 
+[section:clear_options ssl::context::clear_options]
+
+[indexterm2 clear_options..ssl::context]
+Clear options on the context.
+
+
+ void ``[link boost_asio.reference.ssl__context.clear_options.overload1 clear_options]``(
+ options o);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.clear_options.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.clear_options.overload2 clear_options]``(
+ options o,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.clear_options.overload2 more...]]``
+
+
+[section:overload1 ssl::context::clear_options (1 of 2 overloads)]
+
+
+Clear options on the context.
+
+
+ void clear_options(
+ options o);
+
+
+This function may be used to configure the SSL options used by the context.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[o][A bitmask of options. The available option values are defined in the [link boost_asio.reference.ssl__context_base `ssl::context_base`] class. The specified options, if currently enabled on the context, are cleared.]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_clear_options`.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::clear_options (2 of 2 overloads)]
+
+
+Clear options on the context.
+
+
+ boost::system::error_code clear_options(
+ options o,
+ boost::system::error_code & ec);
+
+
+This function may be used to configure the SSL options used by the context.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[o][A bitmask of options. The available option values are defined in the [link boost_asio.reference.ssl__context_base `ssl::context_base`] class. The specified options, if currently enabled on the context, are cleared.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_clear_options`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:context ssl::context::context]
 
 [indexterm2 context..ssl::context]
@@ -82828,9 +88865,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/context.hpp]
+['Header: ][^boost/asio/ssl/context.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -82955,6 +88992,12 @@
 [indexterm2 sslv23..ssl::context]
 [indexterm2 sslv23_client..ssl::context]
 [indexterm2 sslv23_server..ssl::context]
+[indexterm2 tlsv11..ssl::context]
+[indexterm2 tlsv11_client..ssl::context]
+[indexterm2 tlsv11_server..ssl::context]
+[indexterm2 tlsv12..ssl::context]
+[indexterm2 tlsv12_client..ssl::context]
+[indexterm2 tlsv12_server..ssl::context]
 
 [heading Values]
 [variablelist
@@ -83015,8 +89058,38 @@
   ]
 
   [
- [sslv23_server]
- [SSL/TLS server. ]
+ [sslv23_server]
+ [SSL/TLS server. ]
+ ]
+
+ [
+ [tlsv11]
+ [Generic TLS version 1.1. ]
+ ]
+
+ [
+ [tlsv11_client]
+ [TLS version 1.1 client. ]
+ ]
+
+ [
+ [tlsv11_server]
+ [TLS version 1.1 server. ]
+ ]
+
+ [
+ [tlsv12]
+ [Generic TLS version 1.2. ]
+ ]
+
+ [
+ [tlsv12_client]
+ [TLS version 1.2 client. ]
+ ]
+
+ [
+ [tlsv12_server]
+ [TLS version 1.2 server. ]
   ]
 
 ]
@@ -83055,9 +89128,23 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/context.hpp]
+['Header: ][^boost/asio/ssl/context.hpp]
+
+['Convenience header: ][^boost/asio/ssl.hpp]
+
+
+[endsect]
+
+
+
+[section:no_compression ssl::context::no_compression]
+
+[indexterm2 no_compression..ssl::context]
+Disable compression. Compression is disabled by default.
+
+
+ static const long no_compression = implementation_defined;
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -83157,9 +89244,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/context.hpp]
+['Header: ][^boost/asio/ssl/context.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -83617,6 +89704,104 @@
 
 [endsect]
 
+[section:set_verify_depth ssl::context::set_verify_depth]
+
+[indexterm2 set_verify_depth..ssl::context]
+Set the peer verification depth.
+
+
+ void ``[link boost_asio.reference.ssl__context.set_verify_depth.overload1 set_verify_depth]``(
+ int depth);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.set_verify_depth.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.set_verify_depth.overload2 set_verify_depth]``(
+ int depth,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.set_verify_depth.overload2 more...]]``
+
+
+[section:overload1 ssl::context::set_verify_depth (1 of 2 overloads)]
+
+
+Set the peer verification depth.
+
+
+ void set_verify_depth(
+ int depth);
+
+
+This function may be used to configure the maximum verification depth allowed by the context.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_set_verify_depth`.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::set_verify_depth (2 of 2 overloads)]
+
+
+Set the peer verification depth.
+
+
+ boost::system::error_code set_verify_depth(
+ int depth,
+ boost::system::error_code & ec);
+
+
+This function may be used to configure the maximum verification depth allowed by the context.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_set_verify_depth`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:set_verify_mode ssl::context::set_verify_mode]
 
 [indexterm2 set_verify_mode..ssl::context]
@@ -83729,6 +89914,210 @@
 [endsect]
 
 
+[section:use_certificate ssl::context::use_certificate]
+
+[indexterm2 use_certificate..ssl::context]
+Use a certificate from a memory buffer.
+
+
+ void ``[link boost_asio.reference.ssl__context.use_certificate.overload1 use_certificate]``(
+ const const_buffer & certificate,
+ file_format format);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.use_certificate.overload2 use_certificate]``(
+ const const_buffer & certificate,
+ file_format format,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_certificate (1 of 2 overloads)]
+
+
+Use a certificate from a memory buffer.
+
+
+ void use_certificate(
+ const const_buffer & certificate,
+ file_format format);
+
+
+This function is used to load a certificate into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[certificate][The buffer containing the certificate.]]
+
+[[format][The certificate format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_certificate` or SSL\_CTX\_use\_certificate\_ASN1.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_certificate (2 of 2 overloads)]
+
+
+Use a certificate from a memory buffer.
+
+
+ boost::system::error_code use_certificate(
+ const const_buffer & certificate,
+ file_format format,
+ boost::system::error_code & ec);
+
+
+This function is used to load a certificate into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[certificate][The buffer containing the certificate.]]
+
+[[format][The certificate format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_certificate` or SSL\_CTX\_use\_certificate\_ASN1.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:use_certificate_chain ssl::context::use_certificate_chain]
+
+[indexterm2 use_certificate_chain..ssl::context]
+Use a certificate chain from a memory buffer.
+
+
+ void ``[link boost_asio.reference.ssl__context.use_certificate_chain.overload1 use_certificate_chain]``(
+ const const_buffer & chain);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate_chain.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.use_certificate_chain.overload2 use_certificate_chain]``(
+ const const_buffer & chain,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate_chain.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_certificate_chain (1 of 2 overloads)]
+
+
+Use a certificate chain from a memory buffer.
+
+
+ void use_certificate_chain(
+ const const_buffer & chain);
+
+
+This function is used to load a certificate chain into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[chain][The buffer containing the certificate chain. The certificate chain must use the PEM format.]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_certificate` and SSL\_CTX\_add\_extra\_chain\_cert.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_certificate_chain (2 of 2 overloads)]
+
+
+Use a certificate chain from a memory buffer.
+
+
+ boost::system::error_code use_certificate_chain(
+ const const_buffer & chain,
+ boost::system::error_code & ec);
+
+
+This function is used to load a certificate chain into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[chain][The buffer containing the certificate chain. The certificate chain must use the PEM format.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_certificate` and SSL\_CTX\_add\_extra\_chain\_cert.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:use_certificate_chain_file ssl::context::use_certificate_chain_file]
 
 [indexterm2 use_certificate_chain_file..ssl::context]
@@ -83933,6 +90322,112 @@
 
 [endsect]
 
+[section:use_private_key ssl::context::use_private_key]
+
+[indexterm2 use_private_key..ssl::context]
+Use a private key from a memory buffer.
+
+
+ void ``[link boost_asio.reference.ssl__context.use_private_key.overload1 use_private_key]``(
+ const const_buffer & private_key,
+ file_format format);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_private_key.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.use_private_key.overload2 use_private_key]``(
+ const const_buffer & private_key,
+ file_format format,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_private_key.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_private_key (1 of 2 overloads)]
+
+
+Use a private key from a memory buffer.
+
+
+ void use_private_key(
+ const const_buffer & private_key,
+ file_format format);
+
+
+This function is used to load a private key into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[private_key][The buffer containing the private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_PrivateKey` or SSL\_CTX\_use\_PrivateKey\_ASN1.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_private_key (2 of 2 overloads)]
+
+
+Use a private key from a memory buffer.
+
+
+ boost::system::error_code use_private_key(
+ const const_buffer & private_key,
+ file_format format,
+ boost::system::error_code & ec);
+
+
+This function is used to load a private key into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[private_key][The buffer containing the private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_PrivateKey` or SSL\_CTX\_use\_PrivateKey\_ASN1.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:use_private_key_file ssl::context::use_private_key_file]
 
 [indexterm2 use_private_key_file..ssl::context]
@@ -83957,12 +90452,224 @@
 Use a private key from a file.
 
 
- void use_private_key_file(
+ void use_private_key_file(
+ const std::string & filename,
+ file_format format);
+
+
+This function is used to load a private key into the context from a file.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[filename][The name of the file containing the private key.]]
+
+[[format][The file format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_PrivateKey_file`.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_private_key_file (2 of 2 overloads)]
+
+
+Use a private key from a file.
+
+
+ boost::system::error_code use_private_key_file(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
+
+
+This function is used to load a private key into the context from a file.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[filename][The name of the file containing the private key.]]
+
+[[format][The file format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_PrivateKey_file`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:use_rsa_private_key ssl::context::use_rsa_private_key]
+
+[indexterm2 use_rsa_private_key..ssl::context]
+Use an RSA private key from a memory buffer.
+
+
+ void ``[link boost_asio.reference.ssl__context.use_rsa_private_key.overload1 use_rsa_private_key]``(
+ const const_buffer & private_key,
+ file_format format);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.use_rsa_private_key.overload2 use_rsa_private_key]``(
+ const const_buffer & private_key,
+ file_format format,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_rsa_private_key (1 of 2 overloads)]
+
+
+Use an RSA private key from a memory buffer.
+
+
+ void use_rsa_private_key(
+ const const_buffer & private_key,
+ file_format format);
+
+
+This function is used to load an RSA private key into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[private_key][The buffer containing the RSA private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_RSAPrivateKey` or SSL\_CTX\_use\_RSAPrivateKey\_ASN1.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_rsa_private_key (2 of 2 overloads)]
+
+
+Use an RSA private key from a memory buffer.
+
+
+ boost::system::error_code use_rsa_private_key(
+ const const_buffer & private_key,
+ file_format format,
+ boost::system::error_code & ec);
+
+
+This function is used to load an RSA private key into the context from a buffer.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[private_key][The buffer containing the RSA private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_CTX_use_RSAPrivateKey` or SSL\_CTX\_use\_RSAPrivateKey\_ASN1.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:use_rsa_private_key_file ssl::context::use_rsa_private_key_file]
+
+[indexterm2 use_rsa_private_key_file..ssl::context]
+Use an RSA private key from a file.
+
+
+ void ``[link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload1 use_rsa_private_key_file]``(
+ const std::string & filename,
+ file_format format);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload2 use_rsa_private_key_file]``(
+ const std::string & filename,
+ file_format format,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_rsa_private_key_file (1 of 2 overloads)]
+
+
+Use an RSA private key from a file.
+
+
+ void use_rsa_private_key_file(
       const std::string & filename,
       file_format format);
 
 
-This function is used to load a private key into the context from a file.
+This function is used to load an RSA private key into the context from a file.
 
 
 [heading Parameters]
@@ -83970,7 +90677,7 @@
 
 [variablelist
   
-[[filename][The name of the file containing the private key.]]
+[[filename][The name of the file containing the RSA private key.]]
 
 [[format][The file format (ASN.1 or PEM).]]
 
@@ -83989,7 +90696,7 @@
 
 [heading Remarks]
       
-Calls `SSL_CTX_use_PrivateKey_file`.
+Calls `SSL_CTX_use_RSAPrivateKey_file`.
 
 
 
@@ -83998,19 +90705,19 @@
 
 
 
-[section:overload2 ssl::context::use_private_key_file (2 of 2 overloads)]
+[section:overload2 ssl::context::use_rsa_private_key_file (2 of 2 overloads)]
 
 
-Use a private key from a file.
+Use an RSA private key from a file.
 
 
- boost::system::error_code use_private_key_file(
+ boost::system::error_code use_rsa_private_key_file(
       const std::string & filename,
       file_format format,
       boost::system::error_code & ec);
 
 
-This function is used to load a private key into the context from a file.
+This function is used to load an RSA private key into the context from a file.
 
 
 [heading Parameters]
@@ -84018,7 +90725,7 @@
 
 [variablelist
   
-[[filename][The name of the file containing the private key.]]
+[[filename][The name of the file containing the RSA private key.]]
 
 [[format][The file format (ASN.1 or PEM).]]
 
@@ -84029,7 +90736,7 @@
 
 [heading Remarks]
       
-Calls `SSL_CTX_use_PrivateKey_file`.
+Calls `SSL_CTX_use_RSAPrivateKey_file`.
 
 
 
@@ -84039,36 +90746,33 @@
 
 [endsect]
 
-[section:use_rsa_private_key_file ssl::context::use_rsa_private_key_file]
+[section:use_tmp_dh ssl::context::use_tmp_dh]
 
-[indexterm2 use_rsa_private_key_file..ssl::context]
-Use an RSA private key from a file.
+[indexterm2 use_tmp_dh..ssl::context]
+Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters.
 
 
- void ``[link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload1 use_rsa_private_key_file]``(
- const std::string & filename,
- file_format format);
- `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload1 more...]]``
+ void ``[link boost_asio.reference.ssl__context.use_tmp_dh.overload1 use_tmp_dh]``(
+ const const_buffer & dh);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_tmp_dh.overload1 more...]]``
 
- boost::system::error_code ``[link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload2 use_rsa_private_key_file]``(
- const std::string & filename,
- file_format format,
+ boost::system::error_code ``[link boost_asio.reference.ssl__context.use_tmp_dh.overload2 use_tmp_dh]``(
+ const const_buffer & dh,
       boost::system::error_code & ec);
- `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload2 more...]]``
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__context.use_tmp_dh.overload2 more...]]``
 
 
-[section:overload1 ssl::context::use_rsa_private_key_file (1 of 2 overloads)]
+[section:overload1 ssl::context::use_tmp_dh (1 of 2 overloads)]
 
 
-Use an RSA private key from a file.
+Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters.
 
 
- void use_rsa_private_key_file(
- const std::string & filename,
- file_format format);
+ void use_tmp_dh(
+ const const_buffer & dh);
 
 
-This function is used to load an RSA private key into the context from a file.
+This function is used to load Diffie-Hellman parameters into the context from a buffer.
 
 
 [heading Parameters]
@@ -84076,9 +90780,7 @@
 
 [variablelist
   
-[[filename][The name of the file containing the RSA private key.]]
-
-[[format][The file format (ASN.1 or PEM).]]
+[[dh][The memory buffer containing the Diffie-Hellman parameters. The buffer must use the PEM format.]]
 
 ]
 
@@ -84095,7 +90797,7 @@
 
 [heading Remarks]
       
-Calls `SSL_CTX_use_RSAPrivateKey_file`.
+Calls `SSL_CTX_set_tmp_dh`.
 
 
 
@@ -84104,19 +90806,18 @@
 
 
 
-[section:overload2 ssl::context::use_rsa_private_key_file (2 of 2 overloads)]
+[section:overload2 ssl::context::use_tmp_dh (2 of 2 overloads)]
 
 
-Use an RSA private key from a file.
+Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters.
 
 
- boost::system::error_code use_rsa_private_key_file(
- const std::string & filename,
- file_format format,
+ boost::system::error_code use_tmp_dh(
+ const const_buffer & dh,
       boost::system::error_code & ec);
 
 
-This function is used to load an RSA private key into the context from a file.
+This function is used to load Diffie-Hellman parameters into the context from a buffer.
 
 
 [heading Parameters]
@@ -84124,9 +90825,7 @@
 
 [variablelist
   
-[[filename][The name of the file containing the RSA private key.]]
-
-[[format][The file format (ASN.1 or PEM).]]
+[[dh][The memory buffer containing the Diffie-Hellman parameters. The buffer must use the PEM format.]]
 
 [[ec][Set to indicate what error occurred, if any.]]
 
@@ -84135,7 +90834,7 @@
 
 [heading Remarks]
       
-Calls `SSL_CTX_use_RSAPrivateKey_file`.
+Calls `SSL_CTX_set_tmp_dh`.
 
 
 
@@ -84324,6 +91023,11 @@
   ]
 
   [
+ [[link boost_asio.reference.ssl__context_base.no_compression [*no_compression]]]
+ [Disable compression. Compression is disabled by default. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__context_base.no_sslv2 [*no_sslv2]]]
     [Disable SSL v2. ]
   ]
@@ -84347,9 +91051,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/context_base.hpp]
+['Header: ][^boost/asio/ssl/context_base.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [section:default_workarounds ssl::context_base::default_workarounds]
@@ -84418,6 +91122,12 @@
 [indexterm2 sslv23..ssl::context_base]
 [indexterm2 sslv23_client..ssl::context_base]
 [indexterm2 sslv23_server..ssl::context_base]
+[indexterm2 tlsv11..ssl::context_base]
+[indexterm2 tlsv11_client..ssl::context_base]
+[indexterm2 tlsv11_server..ssl::context_base]
+[indexterm2 tlsv12..ssl::context_base]
+[indexterm2 tlsv12_client..ssl::context_base]
+[indexterm2 tlsv12_server..ssl::context_base]
 
 [heading Values]
 [variablelist
@@ -84482,6 +91192,36 @@
     [SSL/TLS server. ]
   ]
 
+ [
+ [tlsv11]
+ [Generic TLS version 1.1. ]
+ ]
+
+ [
+ [tlsv11_client]
+ [TLS version 1.1 client. ]
+ ]
+
+ [
+ [tlsv11_server]
+ [TLS version 1.1 server. ]
+ ]
+
+ [
+ [tlsv12]
+ [Generic TLS version 1.2. ]
+ ]
+
+ [
+ [tlsv12_client]
+ [TLS version 1.2 client. ]
+ ]
+
+ [
+ [tlsv12_server]
+ [TLS version 1.2 server. ]
+ ]
+
 ]
 
 
@@ -84490,6 +91230,20 @@
 
 
 
+[section:no_compression ssl::context_base::no_compression]
+
+[indexterm2 no_compression..ssl::context_base]
+Disable compression. Compression is disabled by default.
+
+
+ static const long no_compression = implementation_defined;
+
+
+
+[endsect]
+
+
+
 [section:no_sslv2 ssl::context_base::no_sslv2]
 
 [indexterm2 no_sslv2..ssl::context_base]
@@ -84544,9 +91298,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/context_base.hpp]
+['Header: ][^boost/asio/ssl/context_base.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -84688,9 +91442,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/rfc2818_verification.hpp]
+['Header: ][^boost/asio/ssl/rfc2818_verification.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [section:operator_lp__rp_ ssl::rfc2818_verification::operator()]
@@ -84721,9 +91475,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/rfc2818_verification.hpp]
+['Header: ][^boost/asio/ssl/rfc2818_verification.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -84873,6 +91627,11 @@
   ]
   
   [
+ [[link boost_asio.reference.ssl__stream.set_verify_depth [*set_verify_depth]]]
+ [Set the peer verification depth. ]
+ ]
+
+ [
     [[link boost_asio.reference.ssl__stream.set_verify_mode [*set_verify_mode]]]
     [Set the peer verification mode. ]
   ]
@@ -84904,9 +91663,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.
+['Shared] ['objects:] Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.
 
 
 [heading Example]
@@ -84925,10 +91684,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream.hpp]
-
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Header: ][^boost/asio/ssl/stream.hpp]
 
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 [section:async_handshake ssl::stream::async_handshake]
 
@@ -84938,7 +91696,30 @@
 
   template<
       typename ``[link boost_asio.reference.HandshakeHandler HandshakeHandler]``>
- void async_handshake(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.ssl__stream.async_handshake.overload1 async_handshake]``(
+ handshake_type type,
+ HandshakeHandler handler);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.async_handshake.overload1 more...]]``
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.BufferedHandshakeHandler BufferedHandshakeHandler]``>
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link boost_asio.reference.ssl__stream.async_handshake.overload2 async_handshake]``(
+ handshake_type type,
+ const ConstBufferSequence & buffers,
+ BufferedHandshakeHandler handler);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.async_handshake.overload2 more...]]``
+
+
+[section:overload1 ssl::stream::async_handshake (1 of 2 overloads)]
+
+
+Start an asynchronous SSL handshake.
+
+
+ template<
+ typename ``[link boost_asio.reference.HandshakeHandler HandshakeHandler]``>
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_handshake(
       handshake_type type,
       HandshakeHandler handler);
 
@@ -84970,6 +91751,53 @@
 
 
 
+[section:overload2 ssl::stream::async_handshake (2 of 2 overloads)]
+
+
+Start an asynchronous SSL handshake.
+
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.BufferedHandshakeHandler BufferedHandshakeHandler]``>
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_handshake(
+ handshake_type type,
+ const ConstBufferSequence & buffers,
+ BufferedHandshakeHandler handler);
+
+
+This function is used to asynchronously perform an SSL handshake on the stream. This function call always returns immediately.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
+
+[[buffers][The buffered data to be reused for the handshake. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
+
+[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Amount of buffers used in handshake.
+ );
+``
+]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:async_read_some ssl::stream::async_read_some]
 
 [indexterm2 async_read_some..ssl::stream]
@@ -84979,7 +91807,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -85025,7 +91853,7 @@
 
   template<
       typename ``[link boost_asio.reference.ShutdownHandler ShutdownHandler]``>
- void async_shutdown(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_shutdown(
       ShutdownHandler handler);
 
 
@@ -85063,7 +91891,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -85138,8 +91966,23 @@
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.handshake.overload2 more...]]``
 
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ void ``[link boost_asio.reference.ssl__stream.handshake.overload3 handshake]``(
+ handshake_type type,
+ const ConstBufferSequence & buffers);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.handshake.overload3 more...]]``
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ boost::system::error_code ``[link boost_asio.reference.ssl__stream.handshake.overload4 handshake]``(
+ handshake_type type,
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.handshake.overload4 more...]]``
+
 
-[section:overload1 ssl::stream::handshake (1 of 2 overloads)]
+[section:overload1 ssl::stream::handshake (1 of 4 overloads)]
 
 
 Perform SSL handshaking.
@@ -85178,14 +92021,93 @@
 
 
 
-[section:overload2 ssl::stream::handshake (2 of 2 overloads)]
+[section:overload2 ssl::stream::handshake (2 of 4 overloads)]
+
+
+Perform SSL handshaking.
+
+
+ boost::system::error_code handshake(
+ handshake_type type,
+ boost::system::error_code & ec);
+
+
+This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+
+[section:overload3 ssl::stream::handshake (3 of 4 overloads)]
+
+
+Perform SSL handshaking.
+
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ void handshake(
+ handshake_type type,
+ const ConstBufferSequence & buffers);
+
+
+This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
+
+[[buffers][The buffered data to be reused for the handshake.]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+
+[section:overload4 ssl::stream::handshake (4 of 4 overloads)]
 
 
 Perform SSL handshaking.
 
 
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   boost::system::error_code handshake(
       handshake_type type,
+ const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
@@ -85199,6 +92121,8 @@
   
 [[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
 
+[[buffers][The buffered data to be reused for the handshake.]]
+
 [[ec][Set to indicate what error occurred, if any. ]]
 
 ]
@@ -85272,9 +92196,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream.hpp]
+['Header: ][^boost/asio/ssl/stream.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -85353,9 +92277,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream.hpp]
+['Header: ][^boost/asio/ssl/stream.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -85412,9 +92336,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream.hpp]
+['Header: ][^boost/asio/ssl/stream.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -85487,15 +92411,15 @@
 The type of the next layer.
 
 
- typedef boost::remove_reference< Stream >::type next_layer_type;
+ typedef remove_reference< Stream >::type next_layer_type;
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream.hpp]
+['Header: ][^boost/asio/ssl/stream.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -85737,6 +92661,104 @@
 
 [endsect]
 
+[section:set_verify_depth ssl::stream::set_verify_depth]
+
+[indexterm2 set_verify_depth..ssl::stream]
+Set the peer verification depth.
+
+
+ void ``[link boost_asio.reference.ssl__stream.set_verify_depth.overload1 set_verify_depth]``(
+ int depth);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.set_verify_depth.overload1 more...]]``
+
+ boost::system::error_code ``[link boost_asio.reference.ssl__stream.set_verify_depth.overload2 set_verify_depth]``(
+ int depth,
+ boost::system::error_code & ec);
+ `` [''''&raquo;''' [link boost_asio.reference.ssl__stream.set_verify_depth.overload2 more...]]``
+
+
+[section:overload1 ssl::stream::set_verify_depth (1 of 2 overloads)]
+
+
+Set the peer verification depth.
+
+
+ void set_verify_depth(
+ int depth);
+
+
+This function may be used to configure the maximum verification depth allowed by the stream.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+]
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_set_verify_depth`.
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::stream::set_verify_depth (2 of 2 overloads)]
+
+
+Set the peer verification depth.
+
+
+ boost::system::error_code set_verify_depth(
+ int depth,
+ boost::system::error_code & ec);
+
+
+This function may be used to configure the maximum verification depth allowed by the stream.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+
+Calls `SSL_set_verify_depth`.
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:set_verify_mode ssl::stream::set_verify_mode]
 
 [indexterm2 set_verify_mode..ssl::stream]
@@ -86096,9 +93118,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream.hpp]
+['Header: ][^boost/asio/ssl/stream.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [section:ssl ssl::stream::impl_struct::ssl]
@@ -86150,9 +93172,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/stream_base.hpp]
+['Header: ][^boost/asio/ssl/stream_base.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [section:handshake_type ssl::stream_base::handshake_type]
@@ -86215,9 +93237,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_mode.hpp]
+['Header: ][^boost/asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -86271,9 +93293,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_context.hpp]
+['Header: ][^boost/asio/ssl/verify_context.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [section:native_handle ssl::verify_context::native_handle]
@@ -86304,9 +93326,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_context.hpp]
+['Header: ][^boost/asio/ssl/verify_context.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -86342,9 +93364,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_mode.hpp]
+['Header: ][^boost/asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -86376,9 +93398,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_mode.hpp]
+['Header: ][^boost/asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -86396,9 +93418,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_mode.hpp]
+['Header: ][^boost/asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -86416,9 +93438,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/verify_mode.hpp]
+['Header: ][^boost/asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [endsect]
@@ -86572,7 +93594,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the boost::asio::waitable\_timer typedef.
+Most applications will use one of the [link boost_asio.reference.steady_timer `steady_timer`], [link boost_asio.reference.system_timer `system_timer`] or [link boost_asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -86582,20 +93604,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait:
+Performing a blocking wait (C++11):
 
    // Construct a timer without setting an expiry time.
- boost::asio::waitable_timer timer(io_service);
+ boost::asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
- timer.expires_from_now(boost::posix_time::seconds(5));
+ timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -86604,7 +93626,7 @@
 
 
 
-Performing an asynchronous wait:
+Performing an asynchronous wait (C++11):
 
    void handler(const boost::system::error_code& error)
    {
@@ -86617,8 +93639,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
- boost::asio::waitable_timer timer(io_service,
- boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+ boost::asio::steady_timer timer(io_service,
+ std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -86627,7 +93649,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -86677,9 +93699,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/steady_timer.hpp]
+['Header: ][^boost/asio/steady_timer.hpp]
 
-[*Convenience header: ]None
+['Convenience header: ]None
 
 
 [endsect]
@@ -86715,6 +93737,11 @@
   ]
   
   [
+ [[link boost_asio.reference.io_service__strand.running_in_this_thread [*running_in_this_thread]]]
+ [Determine whether the strand is running in the current thread. ]
+ ]
+
+ [
     [[link boost_asio.reference.io_service__strand.strand [*strand]]]
     [Constructor. ]
   ]
@@ -86780,9 +93807,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
@@ -86790,9 +93817,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/strand.hpp]
+['Header: ][^boost/asio/strand.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -86911,6 +93938,11 @@
   ]
   
   [
+ [[link boost_asio.reference.stream_socket_service.converting_move_construct [*converting_move_construct]]]
+ [Move-construct a new stream socket implementation from another protocol type. ]
+ ]
+
+ [
     [[link boost_asio.reference.stream_socket_service.destroy [*destroy]]]
     [Destroy a stream socket implementation. ]
   ]
@@ -87024,9 +94056,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/stream_socket_service.hpp]
+['Header: ][^boost/asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign stream_socket_service::assign]
@@ -87055,7 +94087,7 @@
 
   template<
       typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
- void async_connect(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -87075,7 +94107,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_receive(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -87096,7 +94128,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_send(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -87221,6 +94253,25 @@
 
 
 
+[section:converting_move_construct stream_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..stream_socket_service]
+Move-construct a new stream socket implementation from another protocol type.
+
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol1]``>
+ void converting_move_construct(
+ implementation_type & impl,
+ typename stream_socket_service< Protocol1 >::implementation_type & other_impl,
+ typename enable_if< is_convertible< Protocol1, Protocol >::value >::type * = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy stream_socket_service::destroy]
 
 [indexterm2 destroy..stream_socket_service]
@@ -87248,9 +94299,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/stream_socket_service.hpp]
+['Header: ][^boost/asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -87319,9 +94370,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/stream_socket_service.hpp]
+['Header: ][^boost/asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -87453,9 +94504,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/stream_socket_service.hpp]
+['Header: ][^boost/asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -87528,9 +94579,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/stream_socket_service.hpp]
+['Header: ][^boost/asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -87620,9 +94671,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/stream_socket_service.hpp]
+['Header: ][^boost/asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -87891,9 +94942,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/streambuf.hpp]
+['Header: ][^boost/asio/streambuf.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88047,7 +95098,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the boost::asio::waitable\_timer typedef.
+Most applications will use one of the [link boost_asio.reference.steady_timer `steady_timer`], [link boost_asio.reference.system_timer `system_timer`] or [link boost_asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -88057,20 +95108,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait:
+Performing a blocking wait (C++11):
 
    // Construct a timer without setting an expiry time.
- boost::asio::waitable_timer timer(io_service);
+ boost::asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
- timer.expires_from_now(boost::posix_time::seconds(5));
+ timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -88079,7 +95130,7 @@
 
 
 
-Performing an asynchronous wait:
+Performing an asynchronous wait (C++11):
 
    void handler(const boost::system::error_code& error)
    {
@@ -88092,8 +95143,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
- boost::asio::waitable_timer timer(io_service,
- boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+ boost::asio::steady_timer timer(io_service,
+ std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -88102,7 +95153,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -88152,9 +95203,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/system_timer.hpp]
+['Header: ][^boost/asio/system_timer.hpp]
 
-[*Convenience header: ]None
+['Convenience header: ]None
 
 
 [endsect]
@@ -88223,9 +95274,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/time_traits.hpp]
+['Header: ][^boost/asio/time_traits.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:add time_traits< boost::posix_time::ptime >::add]
@@ -88256,9 +95307,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/time_traits.hpp]
+['Header: ][^boost/asio/time_traits.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88323,9 +95374,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/time_traits.hpp]
+['Header: ][^boost/asio/time_traits.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88387,9 +95438,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/completion_condition.hpp]
+['Header: ][^boost/asio/completion_condition.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88434,9 +95485,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/completion_condition.hpp]
+['Header: ][^boost/asio/completion_condition.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88481,14 +95532,202 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/completion_condition.hpp]
+['Header: ][^boost/asio/completion_condition.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:use_future use_future]
+
+[indexterm1 use_future]
+A special value, similar to std::nothrow.
+
+
+ constexpr use_future_t use_future;
+
+
+See the documentation for [link boost_asio.reference.use_future_t `use_future_t`] for a usage example.
+
+[heading Requirements]
+
+['Header: ][^boost/asio/use_future.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+[section:use_future_t use_future_t]
+
+
+Class used to specify that an asynchronous operation should return a future.
+
+
+ template<
+ typename Allocator = std::allocator<void>>
+ class use_future_t
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.use_future_t.allocator_type [*allocator_type]]]
+ []
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.use_future_t.get_allocator [*get_allocator]]]
+ [Obtain allocator. ]
+ ]
+
+ [
+ [[link boost_asio.reference.use_future_t.operator_lb__rb_ [*operator\[\]]]]
+ [Specify an alternate allocator. ]
+ ]
+
+ [
+ [[link boost_asio.reference.use_future_t.use_future_t [*use_future_t]]]
+ [Construct using default-constructed allocator.
+
+ Construct using specified allocator. ]
+ ]
+
+]
+
+The [link boost_asio.reference.use_future_t `use_future_t`] class is used to indicate that an asynchronous operation should return a std::future object. A [link boost_asio.reference.use_future_t `use_future_t`] object may be passed as a handler to an asynchronous operation, typically using the special value `boost::asio::use_future`. For example:
+
+
+
+ std::future<std::size_t> my_future
+ = my_socket.async_read_some(my_buffer, boost::asio::use_future);
+
+
+
+
+The initiating function (async\_read\_some in the above example) returns a future that will receive the result of the operation. If the operation completes with an error\_code indicating failure, it is converted into a system\_error and passed back to the caller via the future.
+
+[heading Requirements]
+
+['Header: ][^boost/asio/use_future.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[section:allocator_type use_future_t::allocator_type]
+
+[indexterm2 allocator_type..use_future_t]
+
+ typedef Allocator allocator_type;
+
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/use_future.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
+
+[section:get_allocator use_future_t::get_allocator]
+
+[indexterm2 get_allocator..use_future_t]
+Obtain allocator.
+
+
+ allocator_type get_allocator() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_lb__rb_ use_future_t::operator\[\]]
+
+[indexterm2 operator\[\]..use_future_t]
+Specify an alternate allocator.
+
+
+ template<
+ typename OtherAllocator>
+ use_future_t< OtherAllocator > operator[](
+ const OtherAllocator & allocator) const;
+
+
+
+[endsect]
+
+
+[section:use_future_t use_future_t::use_future_t]
+
+[indexterm2 use_future_t..use_future_t]
+Construct using default-constructed allocator.
+
+
+ constexpr ``[link boost_asio.reference.use_future_t.use_future_t.overload1 use_future_t]``();
+ `` [''''&raquo;''' [link boost_asio.reference.use_future_t.use_future_t.overload1 more...]]``
+
+
+Construct using specified allocator.
+
+
+ explicit ``[link boost_asio.reference.use_future_t.use_future_t.overload2 use_future_t]``(
+ const Allocator & allocator);
+ `` [''''&raquo;''' [link boost_asio.reference.use_future_t.use_future_t.overload2 more...]]``
 
-[*Convenience header: ][^boost/asio.hpp]
+
+[section:overload1 use_future_t::use_future_t (1 of 2 overloads)]
+
+
+Construct using default-constructed allocator.
+
+
+ constexpr use_future_t();
+
+
+
+[endsect]
+
+
+
+[section:overload2 use_future_t::use_future_t (2 of 2 overloads)]
+
+
+Construct using specified allocator.
+
+
+ use_future_t(
+ const Allocator & allocator);
+
+
+
+[endsect]
 
 
 [endsect]
 
 
+[endsect]
+
 
 [section:use_service use_service]
 
@@ -88521,9 +95760,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/io_service.hpp]
+['Header: ][^boost/asio/io_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88553,9 +95792,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/wait_traits.hpp]
+['Header: ][^boost/asio/wait_traits.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:to_wait_duration wait_traits::to_wait_duration]
@@ -88709,9 +95948,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/waitable_timer_service.hpp]
+['Header: ][^boost/asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:async_wait waitable_timer_service::async_wait]
@@ -88720,7 +95959,7 @@
 
   template<
       typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       WaitHandler handler);
 
@@ -88774,9 +96013,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/waitable_timer_service.hpp]
+['Header: ][^boost/asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88825,9 +96064,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/waitable_timer_service.hpp]
+['Header: ][^boost/asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -88985,9 +96224,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/waitable_timer_service.hpp]
+['Header: ][^boost/asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -89006,9 +96245,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/waitable_timer_service.hpp]
+['Header: ][^boost/asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -89027,9 +96266,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/waitable_timer_service.hpp]
+['Header: ][^boost/asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -89224,17 +96463,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_handle.hpp]
+['Header: ][^boost/asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign windows::basic_handle::assign]
 
@@ -89717,9 +96956,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_handle.hpp]
+['Header: ][^boost/asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -89958,18 +97197,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_handle.hpp]
+['Header: ][^boost/asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -90020,9 +97259,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_handle.hpp]
+['Header: ][^boost/asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -90041,9 +97280,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_handle.hpp]
+['Header: ][^boost/asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -90123,9 +97362,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_handle.hpp]
+['Header: ][^boost/asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -90310,17 +97549,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_object_handle.hpp]
+['Header: ][^boost/asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign windows::basic_object_handle::assign]
 
@@ -90385,7 +97624,7 @@
 
   template<
       typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       WaitHandler handler);
 
 
@@ -90858,9 +98097,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_object_handle.hpp]
+['Header: ][^boost/asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -91111,18 +98350,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_object_handle.hpp]
+['Header: ][^boost/asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -91179,9 +98418,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_object_handle.hpp]
+['Header: ][^boost/asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -91203,9 +98442,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_object_handle.hpp]
+['Header: ][^boost/asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -91285,9 +98524,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_object_handle.hpp]
+['Header: ][^boost/asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -91540,17 +98779,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
+['Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign windows::basic_random_access_handle::assign]
 
@@ -91616,8 +98855,8 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some_at(
- boost::uint64_t offset,
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some_at(
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -91676,8 +98915,8 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some_at(
- boost::uint64_t offset,
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some_at(
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -92171,9 +99410,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
+['Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -92424,18 +99663,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
+['Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -92492,9 +99731,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
+['Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -92513,9 +99752,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
+['Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -92564,14 +99803,14 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload1 read_some_at]``(
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers);
   `` [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload1 more...]]``
 
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload2 read_some_at]``(
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload2 more...]]``
@@ -92586,7 +99825,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t read_some_at(
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers);
 
 
@@ -92650,7 +99889,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t read_some_at(
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
@@ -92729,9 +99968,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
+['Header: ][^boost/asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -92746,14 +99985,14 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload1 write_some_at]``(
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers);
   `` [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload1 more...]]``
 
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload2 write_some_at]``(
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload2 more...]]``
@@ -92768,7 +100007,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t write_some_at(
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers);
 
 
@@ -92832,7 +100071,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t write_some_at(
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
@@ -93046,18 +100285,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]
+['Header: ][^boost/asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 [section:assign windows::basic_stream_handle::assign]
 
@@ -93123,7 +100362,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -93180,7 +100419,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -93672,9 +100911,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]
+['Header: ][^boost/asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -93925,18 +101164,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]
+['Header: ][^boost/asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -93993,9 +101232,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]
+['Header: ][^boost/asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -94014,9 +101253,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]
+['Header: ][^boost/asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -94222,9 +101461,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]
+['Header: ][^boost/asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -94519,18 +101758,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/object_handle.hpp]
+['Header: ][^boost/asio/windows/object_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -94650,9 +101889,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/object_handle_service.hpp]
+['Header: ][^boost/asio/windows/object_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign windows::object_handle_service::assign]
@@ -94680,7 +101919,7 @@
 
   template<
       typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
- void async_wait(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       WaitHandler handler);
 
@@ -94795,9 +102034,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/object_handle_service.hpp]
+['Header: ][^boost/asio/windows/object_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -94879,9 +102118,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/object_handle_service.hpp]
+['Header: ][^boost/asio/windows/object_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -94974,17 +102213,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/overlapped_ptr.hpp]
+['Header: ][^boost/asio/windows/overlapped_ptr.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:complete windows::overlapped_ptr::complete]
@@ -95353,18 +102592,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/random_access_handle.hpp]
+['Header: ][^boost/asio/windows/random_access_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -95506,9 +102745,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]
+['Header: ][^boost/asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign windows::random_access_handle_service::assign]
@@ -95537,9 +102776,9 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some_at(
       implementation_type & impl,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -95558,9 +102797,9 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some_at(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some_at(
       implementation_type & impl,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -95675,9 +102914,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]
+['Header: ][^boost/asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -95774,9 +103013,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]
+['Header: ][^boost/asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -95795,9 +103034,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]
+['Header: ][^boost/asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -95829,7 +103068,7 @@
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
   std::size_t read_some_at(
       implementation_type & impl,
- boost::uint64_t offset,
+ uint64_t offset,
       const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
@@ -95849,7 +103088,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t write_some_at(
       implementation_type & impl,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
@@ -96031,9 +103270,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -96041,9 +103280,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/stream_handle.hpp]
+['Header: ][^boost/asio/windows/stream_handle.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -96185,9 +103424,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/stream_handle_service.hpp]
+['Header: ][^boost/asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:assign windows::stream_handle_service::assign]
@@ -96216,7 +103455,7 @@
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -96236,7 +103475,7 @@
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ ``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -96352,9 +103591,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/stream_handle_service.hpp]
+['Header: ][^boost/asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -96451,9 +103690,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/stream_handle_service.hpp]
+['Header: ][^boost/asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -96472,9 +103711,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/windows/stream_handle_service.hpp]
+['Header: ][^boost/asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [endsect]
@@ -96620,9 +103859,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/write.hpp]
+['Header: ][^boost/asio/write.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 write (1 of 8 overloads)]
@@ -97208,7 +104447,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t ``[link boost_asio.reference.write_at.overload1 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers);
   `` [''''&raquo;''' [link boost_asio.reference.write_at.overload1 more...]]``
 
@@ -97217,7 +104456,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t ``[link boost_asio.reference.write_at.overload2 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.write_at.overload2 more...]]``
@@ -97228,7 +104467,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.write_at.overload3 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition);
   `` [''''&raquo;''' [link boost_asio.reference.write_at.overload3 more...]]``
@@ -97239,7 +104478,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.write_at.overload4 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -97250,7 +104489,7 @@
       typename Allocator>
   std::size_t ``[link boost_asio.reference.write_at.overload5 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b);
   `` [''''&raquo;''' [link boost_asio.reference.write_at.overload5 more...]]``
 
@@ -97259,7 +104498,7 @@
       typename Allocator>
   std::size_t ``[link boost_asio.reference.write_at.overload6 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       boost::system::error_code & ec);
   `` [''''&raquo;''' [link boost_asio.reference.write_at.overload6 more...]]``
@@ -97270,7 +104509,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.write_at.overload7 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition);
   `` [''''&raquo;''' [link boost_asio.reference.write_at.overload7 more...]]``
@@ -97281,7 +104520,7 @@
       typename CompletionCondition>
   std::size_t ``[link boost_asio.reference.write_at.overload8 write_at]``(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -97289,9 +104528,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/write_at.hpp]
+['Header: ][^boost/asio/write_at.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:overload1 write_at (1 of 8 overloads)]
@@ -97305,7 +104544,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers);
 
 
@@ -97388,7 +104627,7 @@
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
@@ -97466,7 +104705,7 @@
       typename CompletionCondition>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition);
 
@@ -97552,7 +104791,7 @@
       typename CompletionCondition>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -97619,7 +104858,7 @@
       typename Allocator>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b);
 
 
@@ -97692,7 +104931,7 @@
       typename Allocator>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       boost::system::error_code & ec);
 
@@ -97759,7 +104998,7 @@
       typename CompletionCondition>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition);
 
@@ -97834,7 +105073,7 @@
       typename CompletionCondition>
   std::size_t write_at(
       SyncRandomAccessWriteDevice & d,
- boost::uint64_t offset,
+ uint64_t offset,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
       boost::system::error_code & ec);
@@ -97891,6 +105130,60 @@
 
 [endsect]
 
+
+[section:yield_context yield_context]
+
+[indexterm1 yield_context]
+Context object the represents the currently executing coroutine.
+
+
+ typedef basic_yield_context< unspecified > yield_context;
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_yield_context.basic_yield_context [*basic_yield_context]]]
+ [Construct a yield context to represent the specified coroutine. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_yield_context.operator_lb__rb_ [*operator\[\]]]]
+ [Return a yield context that sets the specified error_code. ]
+ ]
+
+]
+
+The [link boost_asio.reference.basic_yield_context `basic_yield_context`] class is used to represent the currently executing stackful coroutine. A [link boost_asio.reference.basic_yield_context `basic_yield_context`] may be passed as a handler to an asynchronous operation. For example:
+
+
+
+ template <typename Handler>
+ void my_coroutine(basic_yield_context<Handler> yield)
+ {
+ ...
+ std::size_t n = my_socket.async_read_some(buffer, yield);
+ ...
+ }
+
+
+
+
+The initiating function (async\_read\_some in the above example) suspends the current coroutine. The coroutine is resumed when the asynchronous operation completes, and the result of the operation is returned.
+
+
+[heading Requirements]
+
+['Header: ][^boost/asio/spawn.hpp]
+
+['Convenience header: ][^boost/asio.hpp]
+
+
+[endsect]
+
+
 [section:is_error_code_enum_lt__addrinfo_errors__gt_ boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >]
 
 
@@ -97912,9 +105205,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >::value]
@@ -97952,9 +105245,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value boost::system::is_error_code_enum< boost::asio::error::basic_errors >::value]
@@ -97992,9 +105285,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value boost::system::is_error_code_enum< boost::asio::error::misc_errors >::value]
@@ -98032,9 +105325,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/error.hpp]
+['Header: ][^boost/asio/error.hpp]
 
-[*Convenience header: ][^boost/asio.hpp]
+['Convenience header: ][^boost/asio.hpp]
 
 
 [section:value boost::system::is_error_code_enum< boost::asio::error::netdb_errors >::value]
@@ -98072,9 +105365,9 @@
 
 [heading Requirements]
 
-[*Header: ][^boost/asio/ssl/error.hpp]
+['Header: ][^boost/asio/ssl/error.hpp]
 
-[*Convenience header: ][^boost/asio/ssl.hpp]
+['Convenience header: ][^boost/asio/ssl.hpp]
 
 
 [section:value boost::system::is_error_code_enum< boost::asio::error::ssl_errors >::value]

Modified: branches/release/libs/asio/doc/reference.xsl
==============================================================================
--- branches/release/libs/asio/doc/reference.xsl (original)
+++ branches/release/libs/asio/doc/reference.xsl 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -194,7 +194,7 @@
   </xsl:variable>
   <xsl:choose>
     <xsl:when test="$type='void_or_deduced'">
- <xsl:text>``[link boost_asio.reference.asynchronous_operations.return_type ['void-or-deduced]]``</xsl:text>
+ <xsl:text>``[link boost_asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]``</xsl:text>
     </xsl:when>
     <xsl:otherwise>
       <xsl:value-of select="$type"/>
@@ -738,13 +738,13 @@
   <xsl:text>[heading Requirements]</xsl:text>
   <xsl:value-of select="$newline"/>
   <xsl:value-of select="$newline"/>
- <xsl:text>[*Header: ]</xsl:text>
+ <xsl:text>['Header: ]</xsl:text>
   <xsl:text>[^boost/asio/</xsl:text>
   <xsl:value-of select="substring-after($file, 'boost/asio/')"/>
   <xsl:text>]</xsl:text>
   <xsl:value-of select="$newline"/>
   <xsl:value-of select="$newline"/>
- <xsl:text>[*Convenience header: ]</xsl:text>
+ <xsl:text>['Convenience header: ]</xsl:text>
   <xsl:choose>
     <xsl:when test="contains($file, 'boost/asio/ssl')">
       <xsl:text>[^boost/asio/ssl.hpp]</xsl:text>
@@ -1464,6 +1464,9 @@
         <xsl:when test="declname = 'N'">
           <xsl:value-of select="declname"/>
         </xsl:when>
+ <xsl:when test="declname = 'OtherAllocator'">
+ <xsl:value-of select="declname"/>
+ </xsl:when>
         <xsl:when test="declname = 'PasswordCallback'">
           <xsl:value-of select="declname"/>
         </xsl:when>
@@ -1482,6 +1485,12 @@
         <xsl:when test="declname = 'SeqPacketSocketService1'">
           <xsl:value-of select="concat('``[link boost_asio.reference.SeqPacketSocketService ', declname, ']``')"/>
         </xsl:when>
+ <xsl:when test="declname = 'Signature'">
+ <xsl:value-of select="declname"/>
+ </xsl:when>
+ <xsl:when test="declname = 'SocketAcceptorService1' or declname = 'SocketAcceptorService2'">
+ <xsl:value-of select="concat('``[link boost_asio.reference.SocketAcceptorService ', declname, ']``')"/>
+ </xsl:when>
         <xsl:when test="declname = 'SocketService1' or declname = 'SocketService2'">
           <xsl:value-of select="concat('``[link boost_asio.reference.SocketService ', declname, ']``')"/>
         </xsl:when>

Modified: branches/release/libs/asio/doc/requirements/asynchronous_operations.qbk
==============================================================================
--- branches/release/libs/asio/doc/requirements/asynchronous_operations.qbk (original)
+++ branches/release/libs/asio/doc/requirements/asynchronous_operations.qbk 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -173,8 +173,45 @@
 `asio_handler_invoke`. Multiple storage blocks may be allocated for a single
 asynchronous operation.
 
-[section:return_type Return type of an initiating function]
+[heading Return type of an initiating function]
 
-[endsect]
+By default, initiating functions return `void`. This is always the case when
+the handler is a function pointer, C++11 lambda, or a function object produced
+by `boost::bind` or `std::bind`.
+
+For other types, the return type may be customised via a two-step process:
+
+# A specialisation of the [link boost_asio.reference.handler_type `handler_type`]
+template, which is used to determine the true handler type based on the
+asynchronous operation's handler's signature.
+
+# A specialisation of the [link boost_asio.reference.async_result `async_result`]
+template, which is used both to determine the return type and to extract the
+return value from the handler.
+
+These two templates have been specialised to provide support for [link
+boost_asio.overview.core.spawn stackful coroutines] and the C++11 `std::future`
+class.
+
+As an example, consider what happens when enabling `std::future` support by
+using the `boost::asio::use_future` special value, as in:
+
+ std::future<std::size_t> length =
+ my_socket.async_read_some(my_buffer, boost::asio::use_future);
+
+When a handler signature has the form:
+
+ void handler(error_code ec, result_type result);
+
+the initiating function returns a `std::future` templated on `result_type`. In
+the above `async_read_some` example, this is `std::size_t`. If the asynchronous
+operation fails, the `error_code` is converted into a `system_error` exception
+and passed back to the caller through the future.
+
+Where a handler signature has the form:
+
+ void handler(error_code ec);
+
+the initiating function instead returns `std::future<void>`.
 
 [endsect]

Modified: branches/release/libs/asio/doc/tutorial.dox
==============================================================================
--- branches/release/libs/asio/doc/tutorial.dox (original)
+++ branches/release/libs/asio/doc/tutorial.dox 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -72,9 +72,9 @@
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
-INPUT = ./../example/tutorial/index_dox.txt \
- ./../example/tutorial/timer_dox.txt \
- ./../example/tutorial/daytime_dox.txt
+INPUT = ./../example/cpp03/tutorial/index_dox.txt \
+ ./../example/cpp03/tutorial/timer_dox.txt \
+ ./../example/cpp03/tutorial/daytime_dox.txt
 FILE_PATTERNS =
 RECURSIVE = NO
 EXCLUDE =

Modified: branches/release/libs/asio/test/Jamfile
==============================================================================
--- branches/release/libs/asio/test/Jamfile (original)
+++ branches/release/libs/asio/test/Jamfile 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+# Copyright (c) 2003-2013 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)
@@ -54,10 +54,16 @@
   [ run buffers_iterator.cpp <template>asio_unit_test ]
   [ run completion_condition.cpp <template>asio_unit_test ]
   [ run connect.cpp <template>asio_unit_test ]
+ [ run coroutine.cpp <template>asio_unit_test ]
   [ run datagram_socket_service.cpp <template>asio_unit_test ]
   [ run deadline_timer_service.cpp <template>asio_unit_test ]
   [ run deadline_timer.cpp <template>asio_unit_test ]
   [ run error.cpp <template>asio_unit_test ]
+ [ run generic/basic_endpoint.cpp <template>asio_unit_test ]
+ [ run generic/datagram_protocol.cpp <template>asio_unit_test ]
+ [ run generic/raw_protocol.cpp <template>asio_unit_test ]
+ [ run generic/seq_packet_protocol.cpp <template>asio_unit_test ]
+ [ run generic/stream_protocol.cpp <template>asio_unit_test ]
   [ run io_service.cpp <template>asio_unit_test ]
   [ run ip/address.cpp <template>asio_unit_test ]
   [ run ip/address_v4.cpp <template>asio_unit_test ]
@@ -68,6 +74,7 @@
   [ run ip/basic_resolver_iterator.cpp <template>asio_unit_test ]
   [ run ip/basic_resolver_query.cpp <template>asio_unit_test ]
   [ run ip/host_name.cpp <template>asio_unit_test ]
+ [ run ip/icmp.cpp <template>asio_unit_test ]
   [ run ip/multicast.cpp <template>asio_unit_test ]
   [ run ip/resolver_query_base.cpp <template>asio_unit_test ]
   [ run ip/resolver_service.cpp <template>asio_unit_test ]

Modified: branches/release/libs/asio/test/Jamfile.v2
==============================================================================
--- branches/release/libs/asio/test/Jamfile.v2 (original)
+++ branches/release/libs/asio/test/Jamfile.v2 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+# Copyright (c) 2003-2013 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)
@@ -93,6 +93,8 @@
   [ link completion_condition.cpp : $(USE_SELECT) : completion_condition_select ]
   [ link connect.cpp ]
   [ link connect.cpp : $(USE_SELECT) : connect_select ]
+ [ link coroutine.cpp ]
+ [ link coroutine.cpp : $(USE_SELECT) : coroutine_select ]
   [ link datagram_socket_service.cpp ]
   [ link datagram_socket_service.cpp : $(USE_SELECT) : datagram_socket_service_select ]
   [ link deadline_timer_service.cpp ]
@@ -101,6 +103,16 @@
   [ run deadline_timer.cpp : : : $(USE_SELECT) : deadline_timer_select ]
   [ run error.cpp ]
   [ run error.cpp : : : $(USE_SELECT) : error_select ]
+ [ link generic/basic_endpoint.cpp : : generic_basic_endpoint ]
+ [ link generic/basic_endpoint.cpp : $(USE_SELECT) : generic_basic_endpoint_select ]
+ [ link generic/datagram_protocol.cpp : : generic_datagram_protocol ]
+ [ link generic/datagram_protocol.cpp : $(USE_SELECT) : generic_datagram_protocol_select ]
+ [ link generic/raw_protocol.cpp : : generic_raw_protocol ]
+ [ link generic/raw_protocol.cpp : $(USE_SELECT) : generic_raw_protocol_select ]
+ [ link generic/seq_packet_protocol.cpp : : generic_seq_packet_protocol ]
+ [ link generic/seq_packet_protocol.cpp : $(USE_SELECT) : generic_seq_packet_protocol_select ]
+ [ link generic/stream_protocol.cpp : : generic_stream_protocol ]
+ [ link generic/stream_protocol.cpp : $(USE_SELECT) : generic_stream_protocol_select ]
   [ link high_resolution_timer.cpp ]
   [ link high_resolution_timer.cpp : $(USE_SELECT) : high_resolution_timer_select ]
   [ run io_service.cpp ]
@@ -123,6 +135,8 @@
   [ link ip/basic_resolver_query.cpp : $(USE_SELECT) : ip_basic_resolver_query_select ]
   [ run ip/host_name.cpp : : : : ip_host_name ]
   [ run ip/host_name.cpp : : : $(USE_SELECT) : ip_host_name_select ]
+ [ run ip/icmp.cpp : : : : ip_icmp ]
+ [ run ip/icmp.cpp : : : $(USE_SELECT) : ip_icmp_select ]
   [ run ip/multicast.cpp : : : : ip_multicast ]
   [ run ip/multicast.cpp : : : $(USE_SELECT) : ip_multicast_select ]
   [ link ip/resolver_query_base.cpp : : ip_resolver_query_base ]

Modified: branches/release/libs/asio/test/latency/Jamfile.v2
==============================================================================
--- branches/release/libs/asio/test/latency/Jamfile.v2 (original)
+++ branches/release/libs/asio/test/latency/Jamfile.v2 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+# Copyright (c) 2003-2013 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)

Modified: branches/release/libs/asio/test/ssl/Jamfile
==============================================================================
--- branches/release/libs/asio/test/ssl/Jamfile (original)
+++ branches/release/libs/asio/test/ssl/Jamfile 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+# Copyright (c) 2003-2013 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)

Modified: branches/release/libs/asio/test/ssl/Jamfile.v2
==============================================================================
--- branches/release/libs/asio/test/ssl/Jamfile.v2 (original)
+++ branches/release/libs/asio/test/ssl/Jamfile.v2 2013-05-27 08:36:39 EDT (Mon, 27 May 2013)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+# Copyright (c) 2003-2013 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)


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk