Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2008-05-14 15:40:40


Author: eric_niebler
Date: 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
New Revision: 45360
URL: http://svn.boost.org/trac/boost/changeset/45360

Log:
merged from trunk
Properties modified:
   branches/proto/v4/ (props changed)
Text files modified:
   branches/proto/v4/boost/asio/detail/timer_queue.hpp | 2
   branches/proto/v4/boost/detail/sp_convertible.hpp | 4
   branches/proto/v4/boost/enable_shared_from_this.hpp | 17
   branches/proto/v4/boost/exception/enable_error_info.hpp | 16
   branches/proto/v4/boost/intrusive/detail/ebo_functor_holder.hpp | 2
   branches/proto/v4/boost/regex/v4/perl_matcher_common.hpp | 4
   branches/proto/v4/libs/asio/doc/reference.qbk | 11791 ++++++++++++++++++++++++++++++---------
   branches/proto/v4/libs/asio/doc/reference.xsl | 5
   branches/proto/v4/libs/interprocess/doc/Jamfile.v2 | 2
   branches/proto/v4/libs/interprocess/example/Jamfile.v2 | 2
   branches/proto/v4/libs/interprocess/test/Jamfile.v2 | 2
   branches/proto/v4/libs/intrusive/doc/Jamfile.v2 | 2
   branches/proto/v4/libs/intrusive/doc/intrusive.qbk | 4
   branches/proto/v4/libs/intrusive/example/Jamfile.v2 | 2
   branches/proto/v4/libs/intrusive/perf/Jamfile.v2 | 2
   branches/proto/v4/libs/intrusive/test/Jamfile.v2 | 2
   branches/proto/v4/libs/optional/test/optional_test.cpp | 41
   branches/proto/v4/libs/regex/src/usinstances.cpp | 2
   branches/proto/v4/libs/regex/src/wc_regex_traits.cpp | 2
   branches/proto/v4/libs/regex/test/regress/test_escapes.cpp | 3
   branches/proto/v4/libs/thread/doc/thread_ref.qbk | 18
   branches/proto/v4/status/explicit-failures-markup.xml | 4
   branches/proto/v4/tools/boostbook/xsl/type.xsl | 2
   branches/proto/v4/tools/build/v2/kernel/modules.jam | 24
   branches/proto/v4/tools/build/v2/roll.sh | 2
   25 files changed, 9060 insertions(+), 2897 deletions(-)

Modified: branches/proto/v4/boost/asio/detail/timer_queue.hpp
==============================================================================
--- branches/proto/v4/boost/asio/detail/timer_queue.hpp (original)
+++ branches/proto/v4/boost/asio/detail/timer_queue.hpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -102,6 +102,8 @@
   // Get the time for the timer that is earliest in the queue.
   virtual boost::posix_time::time_duration wait_duration() const
   {
+ if (heap_.empty())
+ return boost::posix_time::pos_infin;
     return Time_Traits::to_posix_duration(
         Time_Traits::subtract(heap_[0]->time_, Time_Traits::now()));
   }

Modified: branches/proto/v4/boost/detail/sp_convertible.hpp
==============================================================================
--- branches/proto/v4/boost/detail/sp_convertible.hpp (original)
+++ branches/proto/v4/boost/detail/sp_convertible.hpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -25,6 +25,10 @@
 # define BOOST_SP_NO_SP_CONVERTIBLE
 #endif
 
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE ) && defined( __BORLANDC__ ) && ( __BORLANDC__ < 0x600 )
+# define BOOST_SP_NO_SP_CONVERTIBLE
+#endif
+
 #if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
 
 namespace boost

Modified: branches/proto/v4/boost/enable_shared_from_this.hpp
==============================================================================
--- branches/proto/v4/boost/enable_shared_from_this.hpp (original)
+++ branches/proto/v4/boost/enable_shared_from_this.hpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -21,10 +21,14 @@
 namespace boost
 {
 
+#if !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS )
+
 template< class T > class enable_shared_from_this;
 template< class T, class Y > void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe );
 template< class T, class Y > void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe, void * /*pd*/ );
 
+#endif
+
 template< class T > class enable_shared_from_this
 {
 protected:
@@ -78,7 +82,12 @@
         }
     }
 
-#if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, <= 0x551 )
+#if !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS )
+
+ template< class U, class Y > friend void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<U> const * pe );
+ template< class U, class Y > friend void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<U> const * pe, void * /*pd*/ );
+
+#else
 
 public:
 
@@ -90,7 +99,8 @@
         if( _weak_count.use_count() == 0 )
         {
             _weak_count = owner.get_shared_count();
- }else if( !_shared_count.empty() )
+ }
+ else if( !_shared_count.empty() )
         {
             BOOST_ASSERT( owner.unique() ); // no weak_ptrs to owner should exist either, but there's no way to check that
             detail::sp_deleter_wrapper * pd = detail::basic_get_deleter<detail::sp_deleter_wrapper>( _shared_count );
@@ -101,9 +111,6 @@
             detail::shared_count().swap( _shared_count );
         }
     }
-
- template< class U, class Y > friend void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<U> const * pe );
- template< class U, class Y > friend void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<U> const * pe, void * /*pd*/ );
 };
 
 template< class T, class Y > inline void sp_accept_owner( shared_ptr<Y> * ptr, enable_shared_from_this<T> const * pe )

Modified: branches/proto/v4/boost/exception/enable_error_info.hpp
==============================================================================
--- branches/proto/v4/boost/exception/enable_error_info.hpp (original)
+++ branches/proto/v4/boost/exception/enable_error_info.hpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -8,6 +8,7 @@
 
 #include <boost/exception/exception.hpp>
 #include <boost/detail/workaround.hpp>
+#include <boost/config.hpp> // For BOOST_STATIC_CONSTANT.
 
 namespace
 boost
@@ -55,12 +56,12 @@
             typedef error_info_injector<T> type;
             };
 
- #if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582))
+#if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582))
         template <class T>
         struct
         sizeof_dispatch
             {
- enum e { value=sizeof(dispatch((T*)0)) };
+ BOOST_STATIC_CONSTANT(int, value = sizeof(dispatch((T*)0)) );
             };
 
         template <class T>
@@ -80,10 +81,17 @@
         }
 
     template <class T>
- typename exception_detail::enable_error_info_return_type<T>::type
+#if !BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582))
+ typename
+#endif
+ exception_detail::enable_error_info_return_type<T>::type
     enable_error_info( T const & x )
         {
- return typename exception_detail::enable_error_info_return_type<T>::type(x);
+ return
+#if !BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x582))
+ typename
+#endif
+ exception_detail::enable_error_info_return_type<T>::type(x);
         }
     }
 

Modified: branches/proto/v4/boost/intrusive/detail/ebo_functor_holder.hpp
==============================================================================
--- branches/proto/v4/boost/intrusive/detail/ebo_functor_holder.hpp (original)
+++ branches/proto/v4/boost/intrusive/detail/ebo_functor_holder.hpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 /////////////////////////////////////////////////////////////////////////////
 //
-// (C) Copyright Joaquín M López Muñoz 2006-2007
+// (C) Copyright Joaquin M Lopez Munoz 2006-2007
 //
 // Distributed under the Boost Software License, Version 1.0.
 // (See accompanying file LICENSE_1_0.txt or copy at

Modified: branches/proto/v4/boost/regex/v4/perl_matcher_common.hpp
==============================================================================
--- branches/proto/v4/boost/regex/v4/perl_matcher_common.hpp (original)
+++ branches/proto/v4/boost/regex/v4/perl_matcher_common.hpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -535,7 +535,7 @@
    if(position == last)
       return false;
    // both prev and this character must be m_word_mask:
- if(traits_inst.isctype(*position, m_word_mask))
+ bool prev = traits_inst.isctype(*position, m_word_mask);
    {
       bool b;
       if((position == backstop) && ((m_match_flags & match_prev_avail) == 0))
@@ -546,7 +546,7 @@
          b = traits_inst.isctype(*position, m_word_mask);
          ++position;
       }
- if(b)
+ if(b == prev)
       {
          pstate = pstate->next.p;
          return true;

Modified: branches/proto/v4/libs/asio/doc/reference.qbk
==============================================================================
--- branches/proto/v4/libs/asio/doc/reference.qbk (original)
+++ branches/proto/v4/libs/asio/doc/reference.qbk 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -6559,16 +6559,15 @@
 
 [endsect]
 
-[section:basic_socket basic_socket]
+[section:basic_raw_socket basic_raw_socket]
 
-Provides socket functionality.
+Provides raw-oriented socket functionality.
 
   template<
       typename ``[link boost_asio.reference.Protocol Protocol]``,
- typename ``[link boost_asio.reference.SocketService SocketService]``>
- class basic_socket :
- public basic_io_object< SocketService >,
- public socket_base
+ typename ``[link boost_asio.reference.RawSocketService RawSocketService]`` = raw_socket_service<Protocol>>
+ class basic_raw_socket :
+ public basic_socket< Protocol, RawSocketService >
 
 
 [heading Types]
@@ -6577,147 +6576,147 @@
 
   [
 
- [[link boost_asio.reference.basic_socket.broadcast [*broadcast]]]
+ [[link boost_asio.reference.basic_raw_socket.broadcast [*broadcast]]]
     [Socket option to permit sending of broadcast messages. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.bytes_readable [*bytes_readable]]]
+ [[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_socket.debug [*debug]]]
+ [[link boost_asio.reference.basic_raw_socket.debug [*debug]]]
     [Socket option to enable socket-level debugging. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.do_not_route [*do_not_route]]]
+ [[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_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [[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_socket.endpoint_type [*endpoint_type]]]
+ [[link boost_asio.reference.basic_raw_socket.endpoint_type [*endpoint_type]]]
     [The endpoint type. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.implementation_type [*implementation_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_socket.keep_alive [*keep_alive]]]
+ [[link boost_asio.reference.basic_raw_socket.keep_alive [*keep_alive]]]
     [Socket option to send keep-alives. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.linger [*linger]]]
+ [[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_socket.lowest_layer_type [*lowest_layer_type]]]
+ [[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_socket.message_flags [*message_flags]]]
+ [[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_socket.native_type [*native_type]]]
+ [[link boost_asio.reference.basic_raw_socket.native_type [*native_type]]]
     [The native representation of a socket. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
+ [[link boost_asio.reference.basic_raw_socket.non_blocking_io [*non_blocking_io]]]
     [IO control command to set the blocking mode of the socket. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.protocol_type [*protocol_type]]]
+ [[link boost_asio.reference.basic_raw_socket.protocol_type [*protocol_type]]]
     [The protocol type. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.basic_socket.receive_buffer_size [*receive_buffer_size]]]
+ [[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_socket.receive_low_watermark [*receive_low_watermark]]]
+ [[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_socket.reuse_address [*reuse_address]]]
+ [[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_socket.send_buffer_size [*send_buffer_size]]]
+ [[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_socket.send_low_watermark [*send_low_watermark]]]
+ [[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_socket.service_type [*service_type]]]
+ [[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_socket.shutdown_type [*shutdown_type]]]
+ [[link boost_asio.reference.basic_raw_socket.shutdown_type [*shutdown_type]]]
     [Different ways a socket may be shutdown. ]
   
   ]
@@ -6729,119 +6728,148 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.basic_socket.assign [*assign]]]
+ [[link boost_asio.reference.basic_raw_socket.assign [*assign]]]
     [Assign an existing native socket to the socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.async_connect [*async_connect]]]
+ [[link boost_asio.reference.basic_raw_socket.async_connect [*async_connect]]]
     [Start an asynchronous connect. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.at_mark [*at_mark]]]
+ [[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_socket.available [*available]]]
+ [[link boost_asio.reference.basic_raw_socket.available [*available]]]
     [Determine the number of bytes available for reading. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.basic_socket [*basic_socket]]]
- [Construct a basic_socket without opening it. ]
+ [[link boost_asio.reference.basic_raw_socket.basic_raw_socket [*basic_raw_socket]]]
+ [Construct a basic_raw_socket without opening it. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.bind [*bind]]]
+ [[link boost_asio.reference.basic_raw_socket.bind [*bind]]]
     [Bind the socket to the given local endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.cancel [*cancel]]]
+ [[link boost_asio.reference.basic_raw_socket.cancel [*cancel]]]
     [Cancel all asynchronous operations associated with the socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.close [*close]]]
+ [[link boost_asio.reference.basic_raw_socket.close [*close]]]
     [Close the socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.connect [*connect]]]
+ [[link boost_asio.reference.basic_raw_socket.connect [*connect]]]
     [Connect the socket to the specified endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.get_io_service [*get_io_service]]]
+ [[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_socket.get_option [*get_option]]]
+ [[link boost_asio.reference.basic_raw_socket.get_option [*get_option]]]
     [Get an option from the socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.io_control [*io_control]]]
+ [[link boost_asio.reference.basic_raw_socket.io_control [*io_control]]]
     [Perform an IO control command on the socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.io_service [*io_service]]]
+ [[link boost_asio.reference.basic_raw_socket.io_service [*io_service]]]
     [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.is_open [*is_open]]]
+ [[link boost_asio.reference.basic_raw_socket.is_open [*is_open]]]
     [Determine whether the socket is open. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.local_endpoint [*local_endpoint]]]
+ [[link boost_asio.reference.basic_raw_socket.local_endpoint [*local_endpoint]]]
     [Get the local endpoint of the socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.lowest_layer [*lowest_layer]]]
+ [[link boost_asio.reference.basic_raw_socket.lowest_layer [*lowest_layer]]]
     [Get a reference to the lowest layer. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.native [*native]]]
+ [[link boost_asio.reference.basic_raw_socket.native [*native]]]
     [Get the native socket representation. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.open [*open]]]
+ [[link boost_asio.reference.basic_raw_socket.open [*open]]]
     [Open the socket using the specified protocol. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.remote_endpoint [*remote_endpoint]]]
+ [[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_socket.set_option [*set_option]]]
- [Set an option on the socket. ]
+ [[link boost_asio.reference.basic_raw_socket.send [*send]]]
+ [Send some data on a connected socket. ]
   ]
   
   [
- [[link boost_asio.reference.basic_socket.shutdown [*shutdown]]]
- [Disable sends or receives on the socket. ]
+ [[link boost_asio.reference.basic_raw_socket.send_to [*send_to]]]
+ [Send raw data to the specified endpoint. ]
   ]
   
-]
-
-[heading Protected Member Functions]
-[table
- [[Name][Description]]
-
   [
- [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
- [Protected destructor to prevent deletion through this type. ]
+ [[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. ]
   ]
   
 ]
@@ -6851,22 +6879,22 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.basic_socket.max_connections [*max_connections]]]
+ [[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_socket.message_do_not_route [*message_do_not_route]]]
+ [[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_socket.message_out_of_band [*message_out_of_band]]]
+ [[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_socket.message_peek [*message_peek]]]
+ [[link boost_asio.reference.basic_raw_socket.message_peek [*message_peek]]]
     [Peek at incoming data without removing it from the input queue. ]
   ]
 
@@ -6877,18 +6905,18 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.basic_socket.implementation [*implementation]]]
+ [[link boost_asio.reference.basic_raw_socket.implementation [*implementation]]]
     [The underlying implementation of the I/O object. ]
   ]
 
   [
- [[link boost_asio.reference.basic_socket.service [*service]]]
+ [[link boost_asio.reference.basic_raw_socket.service [*service]]]
     [The service associated with the I/O object. ]
   ]
 
 ]
 
-The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
+The basic_raw_socket class template provides asynchronous and blocking raw-oriented socket functionality.
 
 
 [heading Thread Safety]
@@ -6898,21 +6926,24 @@
 [*Shared] [*objects:] Unsafe.
 
 
-[section:assign basic_socket::assign]
+[section:assign basic_raw_socket::assign]
 
 Assign an existing native socket to the socket.
 
- void ``[link boost_asio.reference.basic_socket.assign.overload1 assign]``(
+ void ``[link boost_asio.reference.basic_raw_socket.assign.overload1 assign]``(
       const protocol_type & protocol,
       const native_type & native_socket);
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.assign.overload2 assign]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.assign.overload2 assign]``(
       const protocol_type & protocol,
       const native_type & native_socket,
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::assign (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::assign (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Assign an existing native socket to the socket.
 
@@ -6926,7 +6957,10 @@
 
 
 
-[section:overload2 basic_socket::assign (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::assign (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Assign an existing native socket to the socket.
 
@@ -6943,12 +6977,13 @@
 [endsect]
 
 
-[section:async_connect basic_socket::async_connect]
+[section:async_connect basic_raw_socket::async_connect]
+
+
+['Inherited from basic_socket.]
 
 Start an asynchronous connect.
 
- template<
- typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
   void async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -7004,54 +7039,95 @@
 [endsect]
 
 
-[section:at_mark basic_socket::at_mark]
-
-Determine whether the socket is at the out-of-band data mark.
+[section:async_receive basic_raw_socket::async_receive]
 
- bool ``[link boost_asio.reference.basic_socket.at_mark.overload1 at_mark]``() const;
+Start an asynchronous receive on a connected socket.
 
- bool ``[link boost_asio.reference.basic_socket.at_mark.overload2 at_mark]``(
- boost::system::error_code & ec) const;
+ 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]``(
+ const MutableBufferSequence & buffers,
+ ReadHandler handler);
 
+ 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]``(
+ const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
+ ReadHandler handler);
 
-[section:overload1 basic_socket::at_mark (1 of 2 overloads)]
 
-Determine whether the socket is at the out-of-band data mark.
+[section:overload1 basic_raw_socket::async_receive (1 of 2 overloads)]
 
- bool at_mark() const;
+Start an asynchronous receive on a connected socket.
 
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_receive(
+ const MutableBufferSequence & buffers,
+ ReadHandler handler);
 
-This function is used to check whether the socket input is currently positioned at the out-of-band data mark.
 
+This function is used to asynchronously receive data from the raw socket. The function call always returns immediately.
 
-[heading Return Value]
-
-A bool indicating whether the socket is at the out-of-band data mark.
 
-[heading Exceptions]
+[heading Parameters]
     
 
 [variablelist
   
-[[boost::system::system_error][Thrown on failure. ]]
+[[buffers][One or more buffers into which the data will be received. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks 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 receive operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes received.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
 ]
 
+[heading Remarks]
+
+The async\_receive operation can only be used with a connected socket. Use the async\_receive\_from function to receive data on an unconnected raw socket.
+
+[heading Example]
+
+To receive into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ socket.async_receive(boost::asio::buffer(data, size), handler);
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
 
 
 [endsect]
 
 
 
-[section:overload2 basic_socket::at_mark (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::async_receive (2 of 2 overloads)]
 
-Determine whether the socket is at the out-of-band data mark.
+Start an asynchronous receive on a connected socket.
 
- bool at_mark(
- boost::system::error_code & ec) const;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_receive(
+ const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
+ ReadHandler handler);
 
 
-This function is used to check whether the socket input is currently positioned at the out-of-band data mark.
+This function is used to asynchronously receive data from the raw socket. The function call always returns immediately.
 
 
 [heading Parameters]
@@ -7059,13 +7135,25 @@
 
 [variablelist
   
-[[ec][Set to indicate what error occurred, if any.]]
+[[buffers][One or more buffers into which the data will be received. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
+
+[[flags][Flags specifying how the receive call is to be made.]]
+
+[[handler][The handler to be called when the receive operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes received.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
 ]
 
-[heading Return Value]
+[heading Remarks]
       
-A bool indicating whether the socket is at the out-of-band data mark.
+The async\_receive operation can only be used with a connected socket. Use the async\_receive\_from function to receive data on an unconnected raw socket.
 
 
 
@@ -7074,54 +7162,98 @@
 
 [endsect]
 
-[section:available basic_socket::available]
-
-Determine the number of bytes available for reading.
+[section:async_receive_from basic_raw_socket::async_receive_from]
 
- std::size_t ``[link boost_asio.reference.basic_socket.available.overload1 available]``() const;
+Start an asynchronous receive.
 
- std::size_t ``[link boost_asio.reference.basic_socket.available.overload2 available]``(
- boost::system::error_code & ec) const;
+ 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]``(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ ReadHandler handler);
 
+ 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]``(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags,
+ ReadHandler handler);
 
-[section:overload1 basic_socket::available (1 of 2 overloads)]
 
-Determine the number of bytes available for reading.
+[section:overload1 basic_raw_socket::async_receive_from (1 of 2 overloads)]
 
- std::size_t available() const;
+Start an asynchronous receive.
 
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_receive_from(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ ReadHandler handler);
 
-This function is used to determine the number of bytes that may be read without blocking.
 
+This function is used to asynchronously receive raw data. The function call always returns immediately.
 
-[heading Return Value]
-
-The number of bytes that may be read without blocking, or 0 if an error occurs.
 
-[heading Exceptions]
+[heading Parameters]
     
 
 [variablelist
   
-[[boost::system::system_error][Thrown on failure. ]]
+[[buffers][One or more buffers into which the data will be received. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
+
+[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the data. Ownership of the sender\_endpoint object is retained by the caller, which must guarantee that it is valid until the handler is called.]]
+
+[[handler][The handler to be called when the receive operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes received.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
 ]
 
+[heading Example]
+
+To receive into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ socket.async_receive_from(
+ boost::asio::buffer(data, size), 0, sender_endpoint, handler);
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
 
 
 [endsect]
 
 
 
-[section:overload2 basic_socket::available (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::async_receive_from (2 of 2 overloads)]
 
-Determine the number of bytes available for reading.
+Start an asynchronous receive.
 
- std::size_t available(
- boost::system::error_code & ec) const;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_receive_from(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags,
+ ReadHandler handler);
 
 
-This function is used to determine the number of bytes that may be read without blocking.
+This function is used to asynchronously receive raw data. The function call always returns immediately.
 
 
 [heading Parameters]
@@ -7129,51 +7261,64 @@
 
 [variablelist
   
-[[ec][Set to indicate what error occurred, if any.]]
+[[buffers][One or more buffers into which the data will be received. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-]
+[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the data. Ownership of the sender\_endpoint object is retained by the caller, which must guarantee that it is valid until the handler is called.]]
 
-[heading Return Value]
-
-The number of bytes that may be read without blocking, or 0 if an error occurs.
+[[flags][Flags specifying how the receive call is to be made.]]
 
+[[handler][The handler to be called when the receive operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes received.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post(). ]]
 
+]
 
-[endsect]
 
 
 [endsect]
 
-[section:basic_socket basic_socket::basic_socket]
 
-Construct a basic_socket without opening it.
+[endsect]
 
- ``[link boost_asio.reference.basic_socket.basic_socket.overload1 basic_socket]``(
- boost::asio::io_service & io_service);
+[section:async_send basic_raw_socket::async_send]
 
- ``[link boost_asio.reference.basic_socket.basic_socket.overload2 basic_socket]``(
- boost::asio::io_service & io_service,
- const protocol_type & protocol);
+Start an asynchronous send on a connected socket.
 
- ``[link boost_asio.reference.basic_socket.basic_socket.overload3 basic_socket]``(
- boost::asio::io_service & io_service,
- const endpoint_type & endpoint);
+ 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]``(
+ const ConstBufferSequence & buffers,
+ WriteHandler handler);
 
- ``[link boost_asio.reference.basic_socket.basic_socket.overload4 basic_socket]``(
- boost::asio::io_service & io_service,
- const protocol_type & protocol,
- const native_type & native_socket);
+ 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]``(
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
+ WriteHandler handler);
 
 
-[section:overload1 basic_socket::basic_socket (1 of 4 overloads)]
+[section:overload1 basic_raw_socket::async_send (1 of 2 overloads)]
 
-Construct a basic_socket without opening it.
+Start an asynchronous send on a connected socket.
 
- basic_socket(
- boost::asio::io_service & io_service);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_send(
+ const ConstBufferSequence & buffers,
+ WriteHandler handler);
 
 
-This constructor creates a socket without opening it.
+This function is used to send data on the raw socket. The function call will block until the data has been sent successfully or an error occurs.
 
 
 [heading Parameters]
@@ -7181,26 +7326,55 @@
 
 [variablelist
   
-[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket. ]]
+[[buffers][One or more data buffers to be sent on the socket. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks 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 send operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes sent.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
 ]
 
+[heading Remarks]
+
+The async\_send operation can only be used with a connected socket. Use the async\_send\_to function to send data on an unconnected raw socket.
+
+[heading Example]
+
+To send a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ socket.async_send(boost::asio::buffer(data, size), handler);
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
 
 
 [endsect]
 
 
 
-[section:overload2 basic_socket::basic_socket (2 of 4 overloads)]
+[section:overload2 basic_raw_socket::async_send (2 of 2 overloads)]
 
-Construct and open a basic_socket.
+Start an asynchronous send on a connected socket.
 
- basic_socket(
- boost::asio::io_service & io_service,
- const protocol_type & protocol);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_send(
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
+ WriteHandler handler);
 
 
-This constructor creates and opens a socket.
+This function is used to send data on the raw socket. The function call will block until the data has been sent successfully or an error occurs.
 
 
 [heading Parameters]
@@ -7208,37 +7382,69 @@
 
 [variablelist
   
-[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+[[buffers][One or more data buffers to be sent on the socket. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-[[protocol][An object specifying protocol parameters to be used.]]
+[[flags][Flags specifying how the send call is to be made.]]
+
+[[handler][The handler to be called when the send operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes sent.
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
 ]
 
-[heading Exceptions]
-
+[heading Remarks]
+
+The async\_send operation can only be used with a connected socket. Use the async\_send\_to function to send data on an unconnected raw socket.
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
 
-]
 
+[endsect]
 
 
 [endsect]
 
+[section:async_send_to basic_raw_socket::async_send_to]
 
+Start an asynchronous send.
 
-[section:overload3 basic_socket::basic_socket (3 of 4 overloads)]
+ 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]``(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ WriteHandler handler);
 
-Construct a basic_socket, opening it and binding it to the given local endpoint.
+ 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]``(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags,
+ WriteHandler handler);
 
- basic_socket(
- boost::asio::io_service & io_service,
- const endpoint_type & endpoint);
 
+[section:overload1 basic_raw_socket::async_send_to (1 of 2 overloads)]
+
+Start an asynchronous send.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_send_to(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ WriteHandler handler);
 
-This constructor creates a socket and automatically opens it bound to the specified endpoint on the local machine. The protocol used is the protocol associated with the given endpoint.
+
+This function is used to asynchronously send raw data to the specified remote endpoint. The function call always returns immediately.
 
 
 [heading Parameters]
@@ -7246,20 +7452,35 @@
 
 [variablelist
   
-[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+[[buffers][One or more data buffers to be sent to the remote endpoint. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-[[endpoint][An endpoint on the local machine to which the socket will be bound.]]
+[[destination][The remote endpoint to which the data will be sent. Copies will be made of the endpoint as required.]]
 
-]
+[[handler][The handler to be called when the send operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes sent.
+ );
 
-[heading Exceptions]
-
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
-[variablelist
+]
+
+[heading Example]
   
-[[boost::system::system_error][Thrown on failure. ]]
+To send a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ boost::asio::ip::udp::endpoint destination(
+ boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+ socket.async_send_to(
+ boost::asio::buffer(data, size), destination, handler);
 
-]
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
 
 
@@ -7267,17 +7488,21 @@
 
 
 
-[section:overload4 basic_socket::basic_socket (4 of 4 overloads)]
+[section:overload2 basic_raw_socket::async_send_to (2 of 2 overloads)]
 
-Construct a basic_socket on an existing native socket.
+Start an asynchronous send.
 
- basic_socket(
- boost::asio::io_service & io_service,
- const protocol_type & protocol,
- const native_type & native_socket);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_send_to(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags,
+ WriteHandler handler);
 
 
-This constructor creates a socket object to hold an existing native socket.
+This function is used to asynchronously send raw data to the specified remote endpoint. The function call always returns immediately.
 
 
 [heading Parameters]
@@ -7285,20 +7510,21 @@
 
 [variablelist
   
-[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+[[buffers][One or more data buffers to be sent to the remote endpoint. Although the buffers object may be copied as necessary, ownership of the underlying memory blocks is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
 
-[[protocol][An object specifying protocol parameters to be used.]]
-
-[[native_socket][A native socket.]]
+[[flags][Flags specifying how the send call is to be made.]]
 
-]
+[[destination][The remote endpoint to which the data will be sent. Copies will be made of the endpoint as required.]]
 
-[heading Exceptions]
-
+[[handler][The handler to be called when the send operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ std::size_t bytes_transferred // Number of bytes sent.
+ );
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post(). ]]
 
 ]
 
@@ -7309,48 +7535,368 @@
 
 [endsect]
 
-[section:bind basic_socket::bind]
+[section:at_mark basic_raw_socket::at_mark]
 
-Bind the socket to the given local endpoint.
+Determine whether the socket is at the out-of-band data mark.
 
- void ``[link boost_asio.reference.basic_socket.bind.overload1 bind]``(
- const endpoint_type & endpoint);
+ bool ``[link boost_asio.reference.basic_raw_socket.at_mark.overload1 at_mark]``() const;
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.bind.overload2 bind]``(
- const endpoint_type & endpoint,
- boost::system::error_code & ec);
+ bool ``[link boost_asio.reference.basic_raw_socket.at_mark.overload2 at_mark]``(
+ boost::system::error_code & ec) const;
 
 
-[section:overload1 basic_socket::bind (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::at_mark (1 of 2 overloads)]
 
-Bind the socket to the given local endpoint.
 
- void bind(
- const endpoint_type & endpoint);
+['Inherited from basic_socket.]
 
+Determine whether the socket is at the out-of-band data mark.
 
-This function binds the socket to the specified endpoint on the local machine.
+ bool at_mark() const;
 
 
-[heading Parameters]
-
+This function is used to check whether the socket input is currently positioned at the out-of-band data mark.
 
-[variablelist
-
-[[endpoint][An endpoint on the local machine to which the socket will be bound.]]
 
-]
+[heading Return Value]
+
+A bool indicating whether the socket is at the out-of-band data mark.
 
 [heading Exceptions]
     
 
 [variablelist
   
-[[boost::system::system_error][Thrown on failure.]]
+[[boost::system::system_error][Thrown on failure. ]]
 
 ]
 
-[heading Example]
+
+
+[endsect]
+
+
+
+[section:overload2 basic_raw_socket::at_mark (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Determine whether the socket is at the out-of-band data mark.
+
+ bool at_mark(
+ boost::system::error_code & ec) const;
+
+
+This function is used to check whether the socket input is currently positioned at the out-of-band data mark.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+A bool indicating whether the socket is at the out-of-band data mark.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:available basic_raw_socket::available]
+
+Determine the number of bytes available for reading.
+
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.available.overload1 available]``() const;
+
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.available.overload2 available]``(
+ boost::system::error_code & ec) const;
+
+
+[section:overload1 basic_raw_socket::available (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Determine the number of bytes available for reading.
+
+ std::size_t available() const;
+
+
+This function is used to determine the number of bytes that may be read without blocking.
+
+
+[heading Return Value]
+
+The number of bytes that may be read without blocking, or 0 if an error occurs.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_raw_socket::available (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Determine the number of bytes available for reading.
+
+ std::size_t available(
+ boost::system::error_code & ec) const;
+
+
+This function is used to determine the number of bytes that may be read without blocking.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes that may be read without blocking, or 0 if an error occurs.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:basic_raw_socket basic_raw_socket::basic_raw_socket]
+
+Construct a basic_raw_socket without opening it.
+
+ ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload1 basic_raw_socket]``(
+ boost::asio::io_service & io_service);
+
+ ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload2 basic_raw_socket]``(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol);
+
+ ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload3 basic_raw_socket]``(
+ boost::asio::io_service & io_service,
+ const endpoint_type & endpoint);
+
+ ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload4 basic_raw_socket]``(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol,
+ const native_type & native_socket);
+
+
+[section:overload1 basic_raw_socket::basic_raw_socket (1 of 4 overloads)]
+
+Construct a basic_raw_socket without opening it.
+
+ basic_raw_socket(
+ boost::asio::io_service & io_service);
+
+
+This constructor creates a raw socket without opening it. The open() function must be called before data can be sent or received on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_raw_socket::basic_raw_socket (2 of 4 overloads)]
+
+Construct and open a basic_raw_socket.
+
+ basic_raw_socket(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol);
+
+
+This constructor creates and opens a raw socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+
+[[protocol][An object specifying protocol parameters to be used.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload3 basic_raw_socket::basic_raw_socket (3 of 4 overloads)]
+
+Construct a basic_raw_socket, opening it and binding it to the given local endpoint.
+
+ basic_raw_socket(
+ boost::asio::io_service & io_service,
+ const endpoint_type & endpoint);
+
+
+This constructor creates a raw socket and automatically opens it bound to the specified endpoint on the local machine. The protocol used is the protocol associated with the given endpoint.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+
+[[endpoint][An endpoint on the local machine to which the raw socket will be bound.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload4 basic_raw_socket::basic_raw_socket (4 of 4 overloads)]
+
+Construct a basic_raw_socket on an existing native socket.
+
+ basic_raw_socket(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol,
+ const native_type & native_socket);
+
+
+This constructor creates a raw socket object to hold an existing native socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+
+[[protocol][An object specifying protocol parameters to be used.]]
+
+[[native_socket][The new underlying socket implementation.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:bind basic_raw_socket::bind]
+
+Bind the socket to the given local endpoint.
+
+ void ``[link boost_asio.reference.basic_raw_socket.bind.overload1 bind]``(
+ const endpoint_type & endpoint);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.bind.overload2 bind]``(
+ const endpoint_type & endpoint,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_raw_socket::bind (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Bind the socket to the given local endpoint.
+
+ void bind(
+ const endpoint_type & endpoint);
+
+
+This function binds the socket to the specified endpoint on the local machine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[endpoint][An endpoint on the local machine to which the socket will be bound.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
   
 
 
@@ -7368,7 +7914,10 @@
 
 
 
-[section:overload2 basic_socket::bind (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::bind (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Bind the socket to the given local endpoint.
 
@@ -7416,7 +7965,7 @@
 [endsect]
 
 
-[section:broadcast basic_socket::broadcast]
+[section:broadcast basic_raw_socket::broadcast]
 
 
 ['Inherited from socket_base.]
@@ -7459,7 +8008,7 @@
 
 
 
-[section:bytes_readable basic_socket::bytes_readable]
+[section:bytes_readable basic_raw_socket::bytes_readable]
 
 
 ['Inherited from socket_base.]
@@ -7491,17 +8040,20 @@
 [endsect]
 
 
-[section:cancel basic_socket::cancel]
+[section:cancel basic_raw_socket::cancel]
 
 Cancel all asynchronous operations associated with the socket.
 
- void ``[link boost_asio.reference.basic_socket.cancel.overload1 cancel]``();
+ void ``[link boost_asio.reference.basic_raw_socket.cancel.overload1 cancel]``();
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.cancel.overload2 cancel]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.cancel.overload2 cancel]``(
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::cancel (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::cancel (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Cancel all asynchronous operations associated with the socket.
 
@@ -7542,7 +8094,10 @@
 
 
 
-[section:overload2 basic_socket::cancel (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::cancel (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Cancel all asynchronous operations associated with the socket.
 
@@ -7585,17 +8140,20 @@
 
 [endsect]
 
-[section:close basic_socket::close]
+[section:close basic_raw_socket::close]
 
 Close the socket.
 
- void ``[link boost_asio.reference.basic_socket.close.overload1 close]``();
+ void ``[link boost_asio.reference.basic_raw_socket.close.overload1 close]``();
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.close.overload2 close]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.close.overload2 close]``(
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::close (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::close (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Close the socket.
 
@@ -7624,7 +8182,10 @@
 
 
 
-[section:overload2 basic_socket::close (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::close (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Close the socket.
 
@@ -7671,19 +8232,22 @@
 
 [endsect]
 
-[section:connect basic_socket::connect]
+[section:connect basic_raw_socket::connect]
 
 Connect the socket to the specified endpoint.
 
- void ``[link boost_asio.reference.basic_socket.connect.overload1 connect]``(
+ void ``[link boost_asio.reference.basic_raw_socket.connect.overload1 connect]``(
       const endpoint_type & peer_endpoint);
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.connect.overload2 connect]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.connect.overload2 connect]``(
       const endpoint_type & peer_endpoint,
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::connect (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::connect (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Connect the socket to the specified endpoint.
 
@@ -7732,7 +8296,10 @@
 
 
 
-[section:overload2 basic_socket::connect (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::connect (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Connect the socket to the specified endpoint.
 
@@ -7782,7 +8349,7 @@
 [endsect]
 
 
-[section:debug basic_socket::debug]
+[section:debug basic_raw_socket::debug]
 
 
 ['Inherited from socket_base.]
@@ -7825,7 +8392,7 @@
 
 
 
-[section:do_not_route basic_socket::do_not_route]
+[section:do_not_route basic_raw_socket::do_not_route]
 
 
 ['Inherited from socket_base.]
@@ -7868,7 +8435,7 @@
 
 
 
-[section:enable_connection_aborted basic_socket::enable_connection_aborted]
+[section:enable_connection_aborted basic_raw_socket::enable_connection_aborted]
 
 
 ['Inherited from socket_base.]
@@ -7911,7 +8478,7 @@
 
 
 
-[section:endpoint_type basic_socket::endpoint_type]
+[section:endpoint_type basic_raw_socket::endpoint_type]
 
 The endpoint type.
 
@@ -7924,7 +8491,7 @@
 
 
 
-[section:get_io_service basic_socket::get_io_service]
+[section:get_io_service basic_raw_socket::get_io_service]
 
 
 ['Inherited from basic_io_object.]
@@ -7946,28 +8513,25 @@
 [endsect]
 
 
-[section:get_option basic_socket::get_option]
+[section:get_option basic_raw_socket::get_option]
 
 Get an option from the socket.
 
- template<
- typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
- void ``[link boost_asio.reference.basic_socket.get_option.overload1 get_option]``(
+ void ``[link boost_asio.reference.basic_raw_socket.get_option.overload1 get_option]``(
       GettableSocketOption & option) const;
 
- template<
- typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
- boost::system::error_code ``[link boost_asio.reference.basic_socket.get_option.overload2 get_option]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.get_option.overload2 get_option]``(
       GettableSocketOption & option,
       boost::system::error_code & ec) const;
 
 
-[section:overload1 basic_socket::get_option (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::get_option (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Get an option from the socket.
 
- template<
- typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
   void get_option(
       GettableSocketOption & option) const;
 
@@ -8012,12 +8576,13 @@
 
 
 
-[section:overload2 basic_socket::get_option (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::get_option (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Get an option from the socket.
 
- template<
- typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
   boost::system::error_code get_option(
       GettableSocketOption & option,
       boost::system::error_code & ec) const;
@@ -8063,7 +8628,7 @@
 [endsect]
 
 
-[section:implementation basic_socket::implementation]
+[section:implementation basic_raw_socket::implementation]
 
 
 ['Inherited from basic_io_object.]
@@ -8078,7 +8643,7 @@
 
 
 
-[section:implementation_type basic_socket::implementation_type]
+[section:implementation_type basic_raw_socket::implementation_type]
 
 
 ['Inherited from basic_io_object.]
@@ -8093,28 +8658,25 @@
 [endsect]
 
 
-[section:io_control basic_socket::io_control]
+[section:io_control basic_raw_socket::io_control]
 
 Perform an IO control command on the socket.
 
- template<
- typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
- void ``[link boost_asio.reference.basic_socket.io_control.overload1 io_control]``(
+ void ``[link boost_asio.reference.basic_raw_socket.io_control.overload1 io_control]``(
       IoControlCommand & command);
 
- template<
- typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
- boost::system::error_code ``[link boost_asio.reference.basic_socket.io_control.overload2 io_control]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.io_control.overload2 io_control]``(
       IoControlCommand & command,
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::io_control (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::io_control (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Perform an IO control command on the socket.
 
- template<
- typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
   void io_control(
       IoControlCommand & command);
 
@@ -8159,12 +8721,13 @@
 
 
 
-[section:overload2 basic_socket::io_control (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::io_control (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Perform an IO control command on the socket.
 
- template<
- typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
   boost::system::error_code io_control(
       IoControlCommand & command,
       boost::system::error_code & ec);
@@ -8210,7 +8773,7 @@
 [endsect]
 
 
-[section:io_service basic_socket::io_service]
+[section:io_service basic_raw_socket::io_service]
 
 
 ['Inherited from basic_io_object.]
@@ -8233,7 +8796,10 @@
 
 
 
-[section:is_open basic_socket::is_open]
+[section:is_open basic_raw_socket::is_open]
+
+
+['Inherited from basic_socket.]
 
 Determine whether the socket is open.
 
@@ -8245,7 +8811,7 @@
 
 
 
-[section:keep_alive basic_socket::keep_alive]
+[section:keep_alive basic_raw_socket::keep_alive]
 
 
 ['Inherited from socket_base.]
@@ -8288,7 +8854,7 @@
 
 
 
-[section:linger basic_socket::linger]
+[section:linger basic_raw_socket::linger]
 
 
 ['Inherited from socket_base.]
@@ -8331,17 +8897,20 @@
 [endsect]
 
 
-[section:local_endpoint basic_socket::local_endpoint]
+[section:local_endpoint basic_raw_socket::local_endpoint]
 
 Get the local endpoint of the socket.
 
- endpoint_type ``[link boost_asio.reference.basic_socket.local_endpoint.overload1 local_endpoint]``() const;
+ endpoint_type ``[link boost_asio.reference.basic_raw_socket.local_endpoint.overload1 local_endpoint]``() const;
 
- endpoint_type ``[link boost_asio.reference.basic_socket.local_endpoint.overload2 local_endpoint]``(
+ endpoint_type ``[link boost_asio.reference.basic_raw_socket.local_endpoint.overload2 local_endpoint]``(
       boost::system::error_code & ec) const;
 
 
-[section:overload1 basic_socket::local_endpoint (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::local_endpoint (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Get the local endpoint of the socket.
 
@@ -8381,7 +8950,10 @@
 
 
 
-[section:overload2 basic_socket::local_endpoint (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::local_endpoint (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Get the local endpoint of the socket.
 
@@ -8429,7 +9001,10 @@
 [endsect]
 
 
-[section:lowest_layer basic_socket::lowest_layer]
+[section:lowest_layer basic_raw_socket::lowest_layer]
+
+
+['Inherited from basic_socket.]
 
 Get a reference to the lowest layer.
 
@@ -8449,11 +9024,14 @@
 
 
 
-[section:lowest_layer_type basic_socket::lowest_layer_type]
+[section:lowest_layer_type basic_raw_socket::lowest_layer_type]
+
+
+['Inherited from basic_socket.]
 
 A basic_socket is always the lowest layer.
 
- typedef basic_socket< Protocol, SocketService > lowest_layer_type;
+ typedef basic_socket< Protocol, RawSocketService > lowest_layer_type;
 
 
 [heading Types]
@@ -8789,7 +9367,7 @@
 
 
 
-[section:max_connections basic_socket::max_connections]
+[section:max_connections basic_raw_socket::max_connections]
 
 
 ['Inherited from socket_base.]
@@ -8804,7 +9382,7 @@
 
 
 
-[section:message_do_not_route basic_socket::message_do_not_route]
+[section:message_do_not_route basic_raw_socket::message_do_not_route]
 
 
 ['Inherited from socket_base.]
@@ -8819,7 +9397,7 @@
 
 
 
-[section:message_flags basic_socket::message_flags]
+[section:message_flags basic_raw_socket::message_flags]
 
 
 ['Inherited from socket_base.]
@@ -8835,7 +9413,7 @@
 
 
 
-[section:message_out_of_band basic_socket::message_out_of_band]
+[section:message_out_of_band basic_raw_socket::message_out_of_band]
 
 
 ['Inherited from socket_base.]
@@ -8850,7 +9428,7 @@
 
 
 
-[section:message_peek basic_socket::message_peek]
+[section:message_peek basic_raw_socket::message_peek]
 
 
 ['Inherited from socket_base.]
@@ -8865,7 +9443,10 @@
 
 
 
-[section:native basic_socket::native]
+[section:native basic_raw_socket::native]
+
+
+['Inherited from basic_socket.]
 
 Get the native socket representation.
 
@@ -8879,11 +9460,11 @@
 
 
 
-[section:native_type basic_socket::native_type]
+[section:native_type basic_raw_socket::native_type]
 
 The native representation of a socket.
 
- typedef SocketService::native_type native_type;
+ typedef RawSocketService::native_type native_type;
 
 
 
@@ -8892,7 +9473,7 @@
 
 
 
-[section:non_blocking_io basic_socket::non_blocking_io]
+[section:non_blocking_io basic_raw_socket::non_blocking_io]
 
 
 ['Inherited from socket_base.]
@@ -8923,19 +9504,22 @@
 [endsect]
 
 
-[section:open basic_socket::open]
+[section:open basic_raw_socket::open]
 
 Open the socket using the specified protocol.
 
- void ``[link boost_asio.reference.basic_socket.open.overload1 open]``(
+ void ``[link boost_asio.reference.basic_raw_socket.open.overload1 open]``(
       const protocol_type & protocol = protocol_type());
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.open.overload2 open]``(
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.open.overload2 open]``(
       const protocol_type & protocol,
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::open (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::open (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Open the socket using the specified protocol.
 
@@ -8980,7 +9564,10 @@
 
 
 
-[section:overload2 basic_socket::open (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::open (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
 
 Open the socket using the specified protocol.
 
@@ -9026,7 +9613,7 @@
 [endsect]
 
 
-[section:protocol_type basic_socket::protocol_type]
+[section:protocol_type basic_raw_socket::protocol_type]
 
 The protocol type.
 
@@ -9038,132 +9625,210 @@
 [endsect]
 
 
+[section:receive basic_raw_socket::receive]
 
-[section:receive_buffer_size basic_socket::receive_buffer_size]
-
+Receive some data on a connected socket.
 
-['Inherited from socket_base.]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.receive.overload1 receive]``(
+ const MutableBufferSequence & buffers);
 
-Socket option for the receive buffer size of a socket.
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.receive.overload2 receive]``(
+ const MutableBufferSequence & buffers,
+ socket_base::message_flags flags);
 
- typedef implementation_defined receive_buffer_size;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.receive.overload3 receive]``(
+ const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
+[section:overload1 basic_raw_socket::receive (1 of 3 overloads)]
 
-Implements the SOL\_SOCKET/SO\_RCVBUF socket option.
+Receive some data on a connected socket.
 
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive(
+ const MutableBufferSequence & buffers);
 
-[heading Examples]
-
-Setting the option:
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_buffer_size option(8192);
- socket.set_option(option);
+This function is used to receive data on the raw socket. The function call will block until data has been received successfully or an error occurs.
 
 
+[heading Parameters]
+
 
+[variablelist
+
+[[buffers][One or more buffers into which the data will be received.]]
 
-Getting the current option value:
+]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_buffer_size option;
- socket.get_option(option);
- int size = option.value();
+[heading Return Value]
+
+The number of bytes received.
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
+]
 
+[heading Remarks]
+
+The receive operation can only be used with a connected socket. Use the receive\_from function to receive data on an unconnected raw socket.
 
+[heading Example]
+
+To receive into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
 
-[endsect]
+ socket.receive(boost::asio::buffer(data, size));
 
 
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
-[section:receive_low_watermark basic_socket::receive_low_watermark]
 
 
-['Inherited from socket_base.]
+[endsect]
 
-Socket option for the receive low watermark.
 
- typedef implementation_defined receive_low_watermark;
 
+[section:overload2 basic_raw_socket::receive (2 of 3 overloads)]
 
+Receive some data on a connected socket.
 
-Implements the SOL\_SOCKET/SO\_RCVLOWAT socket option.
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive(
+ const MutableBufferSequence & buffers,
+ socket_base::message_flags flags);
 
 
-[heading Examples]
-
-Setting the option:
+This function is used to receive data on the raw socket. The function call will block until data has been received successfully or an error occurs.
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_low_watermark option(1024);
- socket.set_option(option);
 
+[heading Parameters]
+
 
+[variablelist
+
+[[buffers][One or more buffers into which the data will be received.]]
 
+[[flags][Flags specifying how the receive call is to be made.]]
 
-Getting the current option value:
+]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::receive_low_watermark option;
- socket.get_option(option);
- int size = option.value();
+[heading Return Value]
+
+The number of bytes received.
 
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
+]
 
+[heading Remarks]
+
+The receive operation can only be used with a connected socket. Use the receive\_from function to receive data on an unconnected raw socket.
 
 
 
 [endsect]
 
 
-[section:remote_endpoint basic_socket::remote_endpoint]
 
-Get the remote endpoint of the socket.
+[section:overload3 basic_raw_socket::receive (3 of 3 overloads)]
 
- endpoint_type ``[link boost_asio.reference.basic_socket.remote_endpoint.overload1 remote_endpoint]``() const;
+Receive some data on a connected socket.
 
- endpoint_type ``[link boost_asio.reference.basic_socket.remote_endpoint.overload2 remote_endpoint]``(
- boost::system::error_code & ec) const;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive(
+ const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::remote_endpoint (1 of 2 overloads)]
+This function is used to receive data on the raw socket. The function call will block until data has been received successfully or an error occurs.
 
-Get the remote endpoint of the socket.
 
- endpoint_type remote_endpoint() const;
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more buffers into which the data will be received.]]
 
+[[flags][Flags specifying how the receive call is to be made.]]
 
-This function is used to obtain the remote endpoint of the socket.
+[[ec][Set to indicate what error occurred, if any.]]
 
+]
 
 [heading Return Value]
       
-An object that represents the remote endpoint of the socket.
+The number of bytes received.
 
-[heading Exceptions]
-
+[heading Remarks]
+
+The receive operation can only be used with a connected socket. Use the receive\_from function to receive data on an unconnected raw socket.
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
 
-]
 
-[heading Example]
+[endsect]
+
+
+[endsect]
+
+
+[section:receive_buffer_size basic_raw_socket::receive_buffer_size]
+
+
+['Inherited from socket_base.]
+
+Socket option for the receive buffer size of a socket.
+
+ typedef implementation_defined receive_buffer_size;
+
+
+
+Implements the SOL\_SOCKET/SO\_RCVBUF socket option.
+
+
+[heading Examples]
   
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_buffer_size option(8192);
+ socket.set_option(option);
 
 
- boost::asio::ip::tcp::socket socket(io_service);
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
    ...
- boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();
+ boost::asio::socket_base::receive_buffer_size option;
+ socket.get_option(option);
+ int size = option.value();
 
 
 
@@ -9173,16 +9838,44 @@
 [endsect]
 
 
+[section:receive_from basic_raw_socket::receive_from]
 
-[section:overload2 basic_socket::remote_endpoint (2 of 2 overloads)]
+Receive raw data with the endpoint of the sender.
 
-Get the remote endpoint of the socket.
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.receive_from.overload1 receive_from]``(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint);
 
- endpoint_type remote_endpoint(
- boost::system::error_code & ec) const;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.receive_from.overload2 receive_from]``(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags);
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.receive_from.overload3 receive_from]``(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
-This function is used to obtain the remote endpoint of the socket.
+[section:overload1 basic_raw_socket::receive_from (1 of 3 overloads)]
+
+Receive raw data with the endpoint of the sender.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive_from(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint);
+
+
+This function is used to receive raw data. The function call will block until data has been received successfully or an error occurs.
 
 
 [heading Parameters]
@@ -9190,74 +9883,84 @@
 
 [variablelist
   
-[[ec][Set to indicate what error occurred, if any.]]
+[[buffers][One or more buffers into which the data will be received.]]
+
+[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the data.]]
 
 ]
 
 [heading Return Value]
       
-An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.
-
-[heading Example]
-
+The number of bytes received.
 
+[heading Exceptions]
+
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::system::error_code ec;
- boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(ec);
- if (ec)
- {
- // An error occurred.
- }
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
+]
 
+[heading Example]
+
+To receive into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
 
+ boost::asio::ip::udp::endpoint sender_endpoint;
+ socket.receive_from(
+ boost::asio::buffer(data, size), sender_endpoint);
 
 
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
-[endsect]
 
 
 [endsect]
 
 
-[section:reuse_address basic_socket::reuse_address]
-
 
-['Inherited from socket_base.]
+[section:overload2 basic_raw_socket::receive_from (2 of 3 overloads)]
 
-Socket option to allow the socket to be bound to an address that is already in use.
+Receive raw data with the endpoint of the sender.
 
- typedef implementation_defined reuse_address;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive_from(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags);
 
 
+This function is used to receive raw data. The function call will block until data has been received successfully or an error occurs.
 
-Implements the SOL\_SOCKET/SO\_REUSEADDR socket option.
 
+[heading Parameters]
+
 
-[heading Examples]
+[variablelist
   
-Setting the option:
-
- boost::asio::ip::tcp::acceptor acceptor(io_service);
- ...
- boost::asio::socket_base::reuse_address option(true);
- acceptor.set_option(option);
-
+[[buffers][One or more buffers into which the data will be received.]]
 
+[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the data.]]
 
+[[flags][Flags specifying how the receive call is to be made.]]
 
-Getting the current option value:
+]
 
- boost::asio::ip::tcp::acceptor acceptor(io_service);
- ...
- boost::asio::socket_base::reuse_address option;
- acceptor.get_option(option);
- bool is_set = option.value();
+[heading Return Value]
+
+The number of bytes received.
 
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
 
+]
 
 
 
@@ -9265,61 +9968,61 @@
 
 
 
-[section:send_buffer_size basic_socket::send_buffer_size]
-
-
-['Inherited from socket_base.]
+[section:overload3 basic_raw_socket::receive_from (3 of 3 overloads)]
 
-Socket option for the send buffer size of a socket.
+Receive raw data with the endpoint of the sender.
 
- typedef implementation_defined send_buffer_size;
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive_from(
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
+This function is used to receive raw data. The function call will block until data has been received successfully or an error occurs.
 
-Implements the SOL\_SOCKET/SO\_SNDBUF socket option.
 
+[heading Parameters]
+
 
-[heading Examples]
+[variablelist
   
-Setting the option:
-
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::send_buffer_size option(8192);
- socket.set_option(option);
-
+[[buffers][One or more buffers into which the data will be received.]]
 
+[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the data.]]
 
+[[flags][Flags specifying how the receive call is to be made.]]
 
-Getting the current option value:
+[[ec][Set to indicate what error occurred, if any.]]
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::asio::socket_base::send_buffer_size option;
- socket.get_option(option);
- int size = option.value();
+]
 
+[heading Return Value]
+
+The number of bytes received.
 
 
 
+[endsect]
 
 
 [endsect]
 
 
-
-[section:send_low_watermark basic_socket::send_low_watermark]
+[section:receive_low_watermark basic_raw_socket::receive_low_watermark]
 
 
 ['Inherited from socket_base.]
 
-Socket option for the send low watermark.
+Socket option for the receive low watermark.
 
- typedef implementation_defined send_low_watermark;
+ typedef implementation_defined receive_low_watermark;
 
 
 
-Implements the SOL\_SOCKET/SO\_SNDLOWAT socket option.
+Implements the SOL\_SOCKET/SO\_RCVLOWAT socket option.
 
 
 [heading Examples]
@@ -9328,7 +10031,7 @@
 
    boost::asio::ip::tcp::socket socket(io_service);
    ...
- boost::asio::socket_base::send_low_watermark option(1024);
+ boost::asio::socket_base::receive_low_watermark option(1024);
    socket.set_option(option);
 
 
@@ -9338,7 +10041,7 @@
 
    boost::asio::ip::tcp::socket socket(io_service);
    ...
- boost::asio::socket_base::send_low_watermark option;
+ boost::asio::socket_base::receive_low_watermark option;
    socket.get_option(option);
    int size = option.value();
 
@@ -9350,92 +10053,98 @@
 [endsect]
 
 
+[section:remote_endpoint basic_raw_socket::remote_endpoint]
 
-[section:service basic_socket::service]
+Get the remote endpoint of the socket.
 
+ endpoint_type ``[link boost_asio.reference.basic_raw_socket.remote_endpoint.overload1 remote_endpoint]``() const;
 
-['Inherited from basic_io_object.]
+ endpoint_type ``[link boost_asio.reference.basic_raw_socket.remote_endpoint.overload2 remote_endpoint]``(
+ boost::system::error_code & ec) const;
 
-The service associated with the I/O object.
 
- service_type & service;
+[section:overload1 basic_raw_socket::remote_endpoint (1 of 2 overloads)]
 
 
+['Inherited from basic_socket.]
 
-[endsect]
+Get the remote endpoint of the socket.
 
+ endpoint_type remote_endpoint() const;
 
 
-[section:service_type basic_socket::service_type]
+This function is used to obtain the remote endpoint of the socket.
 
 
-['Inherited from basic_io_object.]
+[heading Return Value]
+
+An object that represents the remote endpoint of the socket.
 
-The type of the service that will be used to provide I/O operations.
+[heading Exceptions]
+
 
- typedef SocketService service_type;
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
+]
 
+[heading Example]
+
 
 
-[endsect]
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();
 
 
-[section:set_option basic_socket::set_option]
 
-Set an option on the socket.
 
- template<
- typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
- void ``[link boost_asio.reference.basic_socket.set_option.overload1 set_option]``(
- const SettableSocketOption & option);
 
- template<
- typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
- boost::system::error_code ``[link boost_asio.reference.basic_socket.set_option.overload2 set_option]``(
- const SettableSocketOption & option,
- boost::system::error_code & ec);
 
+[endsect]
 
-[section:overload1 basic_socket::set_option (1 of 2 overloads)]
 
-Set an option on the socket.
 
- template<
- typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
- void set_option(
- const SettableSocketOption & option);
+[section:overload2 basic_raw_socket::remote_endpoint (2 of 2 overloads)]
 
 
-This function is used to set an option on the socket.
+['Inherited from basic_socket.]
+
+Get the remote endpoint of the socket.
 
+ endpoint_type remote_endpoint(
+ boost::system::error_code & ec) const;
 
-[heading Parameters]
-
 
-[variablelist
-
-[[option][The new option value to be set on the socket.]]
+This function is used to obtain the remote endpoint of the socket.
 
-]
 
-[heading Exceptions]
+[heading Parameters]
     
 
 [variablelist
   
-[[boost::system::system_error][Thrown on failure.]]
+[[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
+[heading Return Value]
+
+An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.
+
 [heading Example]
   
-Setting the IPPROTO\_TCP/TCP\_NODELAY option:
+
 
    boost::asio::ip::tcp::socket socket(io_service);
    ...
- boost::asio::ip::tcp::no_delay option(true);
- socket.set_option(option);
+ boost::system::error_code ec;
+ boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
 
 
 
@@ -9445,77 +10154,85 @@
 [endsect]
 
 
+[endsect]
 
-[section:overload2 basic_socket::set_option (2 of 2 overloads)]
 
-Set an option on the socket.
+[section:reuse_address basic_raw_socket::reuse_address]
 
- template<
- typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
- boost::system::error_code set_option(
- const SettableSocketOption & option,
- boost::system::error_code & ec);
 
+['Inherited from socket_base.]
 
-This function is used to set an option on the socket.
+Socket option to allow the socket to be bound to an address that is already in use.
 
+ typedef implementation_defined reuse_address;
 
-[heading Parameters]
-
 
-[variablelist
-
-[[option][The new option value to be set on the socket.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
+Implements the SOL\_SOCKET/SO\_REUSEADDR socket option.
 
-]
 
-[heading Example]
+[heading Examples]
   
-Setting the IPPROTO\_TCP/TCP\_NODELAY option:
+Setting the option:
 
- boost::asio::ip::tcp::socket socket(io_service);
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
    ...
- boost::asio::ip::tcp::no_delay option(true);
- boost::system::error_code ec;
- socket.set_option(option, ec);
- if (ec)
- {
- // An error occurred.
- }
+ boost::asio::socket_base::reuse_address option(true);
+ acceptor.set_option(option);
+
 
 
 
+Getting the current option value:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::reuse_address option;
+ acceptor.get_option(option);
+ bool is_set = option.value();
+
 
 
 
-[endsect]
 
 
 [endsect]
 
-[section:shutdown basic_socket::shutdown]
 
-Disable sends or receives on the socket.
+[section:send basic_raw_socket::send]
 
- void ``[link boost_asio.reference.basic_socket.shutdown.overload1 shutdown]``(
- shutdown_type what);
+Send some data on a connected socket.
 
- boost::system::error_code ``[link boost_asio.reference.basic_socket.shutdown.overload2 shutdown]``(
- shutdown_type what,
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.send.overload1 send]``(
+ const ConstBufferSequence & buffers);
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.send.overload2 send]``(
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags);
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.send.overload3 send]``(
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
       boost::system::error_code & ec);
 
 
-[section:overload1 basic_socket::shutdown (1 of 2 overloads)]
+[section:overload1 basic_raw_socket::send (1 of 3 overloads)]
 
-Disable sends or receives on the socket.
+Send some data on a connected socket.
 
- void shutdown(
- shutdown_type what);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send(
+ const ConstBufferSequence & buffers);
 
 
-This function is used to disable send operations, receive operations, or both.
+This function is used to send data on the raw socket. The function call will block until the data has been sent successfully or an error occurs.
 
 
 [heading Parameters]
@@ -9523,10 +10240,14 @@
 
 [variablelist
   
-[[what][Determines what types of operation will no longer be allowed.]]
+[[buffers][One ore more data buffers to be sent on the socket.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes sent.
+
 [heading Exceptions]
     
 
@@ -9536,16 +10257,20 @@
 
 ]
 
+[heading Remarks]
+
+The send operation can only be used with a connected socket. Use the send\_to function to send data on an unconnected raw socket.
+
 [heading Example]
   
-Shutting down the send side of the socket:
-
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send);
+To send a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
 
+ socket.send(boost::asio::buffer(data, size));
 
 
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
 
 
@@ -9553,16 +10278,18 @@
 
 
 
-[section:overload2 basic_socket::shutdown (2 of 2 overloads)]
+[section:overload2 basic_raw_socket::send (2 of 3 overloads)]
 
-Disable sends or receives on the socket.
+Send some data on a connected socket.
 
- boost::system::error_code shutdown(
- shutdown_type what,
- boost::system::error_code & ec);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send(
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags);
 
 
-This function is used to disable send operations, receive operations, or both.
+This function is used to send data on the raw socket. The function call will block until the data has been sent successfully or an error occurs.
 
 
 [heading Parameters]
@@ -9570,105 +10297,3737 @@
 
 [variablelist
   
-[[what][Determines what types of operation will no longer be allowed.]]
+[[buffers][One ore more data buffers to be sent on the socket.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
+[[flags][Flags specifying how the send call is to be made.]]
 
 ]
 
-[heading Example]
-
-Shutting down the send side of the socket:
+[heading Return Value]
+
+The number of bytes sent.
 
- boost::asio::ip::tcp::socket socket(io_service);
- ...
- boost::system::error_code ec;
- socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send, ec);
- if (ec)
- {
- // An error occurred.
- }
+[heading Exceptions]
+
 
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
+]
 
+[heading Remarks]
+
+The send operation can only be used with a connected socket. Use the send\_to function to send data on an unconnected raw socket.
 
 
 
 [endsect]
 
 
-[endsect]
 
+[section:overload3 basic_raw_socket::send (3 of 3 overloads)]
 
-[section:shutdown_type basic_socket::shutdown_type]
+Send some data on a connected socket.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send(
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
-['Inherited from socket_base.]
+This function is used to send data on the raw socket. The function call will block until the data has been sent successfully or an error occurs.
 
-Different ways a socket may be shutdown.
 
- enum shutdown_type
+[heading Parameters]
+
 
-[heading Values]
 [variablelist
+
+[[buffers][One or more data buffers to be sent on the socket.]]
 
- [
- [shutdown_receive]
- [Shutdown the receive side of the socket. ]
- ]
-
- [
- [shutdown_send]
- [Shutdown the send side of the socket. ]
- ]
+[[flags][Flags specifying how the send call is to be made.]]
 
- [
- [shutdown_both]
- [Shutdown both send and receive on the socket. ]
- ]
+[[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes sent.
+
+[heading Remarks]
+
+The send operation can only be used with a connected socket. Use the send\_to function to send data on an unconnected raw socket.
+
 
 
 [endsect]
 
 
+[endsect]
 
-[section:_basic_socket basic_socket::~basic_socket]
 
-Protected destructor to prevent deletion through this type.
+[section:send_buffer_size basic_raw_socket::send_buffer_size]
 
- ~basic_socket();
 
+['Inherited from socket_base.]
 
+Socket option for the send buffer size of a socket.
 
-[endsect]
+ typedef implementation_defined send_buffer_size;
 
 
 
-[endsect]
+Implements the SOL\_SOCKET/SO\_SNDBUF socket option.
 
-[section:basic_socket_acceptor basic_socket_acceptor]
 
-Provides the ability to accept new connections.
+[heading Examples]
+
+Setting the option:
 
- template<
- typename ``[link boost_asio.reference.Protocol Protocol]``,
- typename ``[link boost_asio.reference.SocketAcceptorService SocketAcceptorService]`` = socket_acceptor_service<Protocol>>
- class basic_socket_acceptor :
- public basic_io_object< SocketAcceptorService >,
- public socket_base
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_buffer_size option(8192);
+ socket.set_option(option);
 
 
-[heading Types]
-[table
- [[Name][Description]]
 
- [
 
- [[link boost_asio.reference.basic_socket_acceptor.broadcast [*broadcast]]]
- [Socket option to permit sending of broadcast messages. ]
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_buffer_size option;
+ socket.get_option(option);
+ int size = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:send_low_watermark basic_raw_socket::send_low_watermark]
+
+
+['Inherited from socket_base.]
+
+Socket option for the send low watermark.
+
+ typedef implementation_defined send_low_watermark;
+
+
+
+Implements the SOL\_SOCKET/SO\_SNDLOWAT socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_low_watermark option(1024);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_low_watermark option;
+ socket.get_option(option);
+ int size = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+[section:send_to basic_raw_socket::send_to]
+
+Send raw data to the specified endpoint.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.send_to.overload1 send_to]``(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination);
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.send_to.overload2 send_to]``(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags);
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.basic_raw_socket.send_to.overload3 send_to]``(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_raw_socket::send_to (1 of 3 overloads)]
+
+Send raw data to the specified endpoint.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send_to(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination);
+
+
+This function is used to send raw data to the specified remote endpoint. The function call will block until the data has been sent successfully or an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more data buffers to be sent to the remote endpoint.]]
+
+[[destination][The remote endpoint to which the data will be sent.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes sent.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+To send a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
+
+ boost::asio::ip::udp::endpoint destination(
+ boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+ socket.send_to(boost::asio::buffer(data, size), destination);
+
+
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_raw_socket::send_to (2 of 3 overloads)]
+
+Send raw data to the specified endpoint.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send_to(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags);
+
+
+This function is used to send raw data to the specified remote endpoint. The function call will block until the data has been sent successfully or an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more data buffers to be sent to the remote endpoint.]]
+
+[[destination][The remote endpoint to which the data will be sent.]]
+
+[[flags][Flags specifying how the send call is to be made.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes sent.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload3 basic_raw_socket::send_to (3 of 3 overloads)]
+
+Send raw data to the specified endpoint.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send_to(
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
+
+
+This function is used to send raw data to the specified remote endpoint. The function call will block until the data has been sent successfully or an error occurs.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more data buffers to be sent to the remote endpoint.]]
+
+[[destination][The remote endpoint to which the data will be sent.]]
+
+[[flags][Flags specifying how the send call is to be made.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes sent.
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:service basic_raw_socket::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
+[section:service_type basic_raw_socket::service_type]
+
+
+['Inherited from basic_io_object.]
+
+The type of the service that will be used to provide I/O operations.
+
+ typedef RawSocketService service_type;
+
+
+
+
+[endsect]
+
+
+[section:set_option basic_raw_socket::set_option]
+
+Set an option on the socket.
+
+ void ``[link boost_asio.reference.basic_raw_socket.set_option.overload1 set_option]``(
+ const SettableSocketOption & option);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.set_option.overload2 set_option]``(
+ const SettableSocketOption & option,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_raw_socket::set_option (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Set an option on the socket.
+
+ void set_option(
+ const SettableSocketOption & option);
+
+
+This function is used to set an option on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[option][The new option value to be set on the socket.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Setting the IPPROTO\_TCP/TCP\_NODELAY option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::no_delay option(true);
+ socket.set_option(option);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_raw_socket::set_option (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Set an option on the socket.
+
+ boost::system::error_code set_option(
+ const SettableSocketOption & option,
+ boost::system::error_code & ec);
+
+
+This function is used to set an option on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[option][The new option value to be set on the socket.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Setting the IPPROTO\_TCP/TCP\_NODELAY option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::no_delay option(true);
+ boost::system::error_code ec;
+ socket.set_option(option, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:shutdown basic_raw_socket::shutdown]
+
+Disable sends or receives on the socket.
+
+ void ``[link boost_asio.reference.basic_raw_socket.shutdown.overload1 shutdown]``(
+ shutdown_type what);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.shutdown.overload2 shutdown]``(
+ shutdown_type what,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_raw_socket::shutdown (1 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Disable sends or receives on the socket.
+
+ void shutdown(
+ shutdown_type what);
+
+
+This function is used to disable send operations, receive operations, or both.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[what][Determines what types of operation will no longer be allowed.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Shutting down the send side of the socket:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_raw_socket::shutdown (2 of 2 overloads)]
+
+
+['Inherited from basic_socket.]
+
+Disable sends or receives on the socket.
+
+ boost::system::error_code shutdown(
+ shutdown_type what,
+ boost::system::error_code & ec);
+
+
+This function is used to disable send operations, receive operations, or both.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[what][Determines what types of operation will no longer be allowed.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Shutting down the send side of the socket:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::system::error_code ec;
+ socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:shutdown_type basic_raw_socket::shutdown_type]
+
+
+['Inherited from socket_base.]
+
+Different ways a socket may be shutdown.
+
+ enum shutdown_type
+
+[heading Values]
+[variablelist
+
+ [
+ [shutdown_receive]
+ [Shutdown the receive side of the socket. ]
+ ]
+
+ [
+ [shutdown_send]
+ [Shutdown the send side of the socket. ]
+ ]
+
+ [
+ [shutdown_both]
+ [Shutdown both send and receive on the socket. ]
+ ]
+
+]
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:basic_socket basic_socket]
+
+Provides socket functionality.
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``,
+ typename ``[link boost_asio.reference.SocketService SocketService]``>
+ class basic_socket :
+ public basic_io_object< SocketService >,
+ public socket_base
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_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_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_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_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.basic_socket [*basic_socket]]]
+ [Construct a basic_socket without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.native [*native]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_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_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+[section:assign basic_socket::assign]
+
+Assign an existing native socket to the socket.
+
+ void ``[link boost_asio.reference.basic_socket.assign.overload1 assign]``(
+ const protocol_type & protocol,
+ const native_type & native_socket);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.assign.overload2 assign]``(
+ const protocol_type & protocol,
+ const native_type & native_socket,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::assign (1 of 2 overloads)]
+
+Assign an existing native socket to the socket.
+
+ void assign(
+ const protocol_type & protocol,
+ const native_type & native_socket);
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::assign (2 of 2 overloads)]
+
+Assign an existing native socket to the socket.
+
+ boost::system::error_code assign(
+ const protocol_type & protocol,
+ const native_type & native_socket,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:async_connect basic_socket::async_connect]
+
+Start an asynchronous connect.
+
+ template<
+ typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
+ void async_connect(
+ const endpoint_type & peer_endpoint,
+ ConnectHandler handler);
+
+
+This function is used to asynchronously connect a socket to the specified remote endpoint. The function call always returns immediately.
+
+The socket is automatically opened if it is not already open. If the connect fails, and the socket was automatically opened, the socket is returned to the closed state.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[peer_endpoint][The remote endpoint to which the socket will be connected. Copies will be made of the endpoint object as required.]]
+
+[[handler][The handler to be called when the connection operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error // Result of operation
+ );
+
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
+
+]
+
+[heading Example]
+
+
+
+ void connect_handler(const boost::system::error_code& error)
+ {
+ if (!error)
+ {
+ // Connect succeeded.
+ }
+ }
+
+ ...
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ boost::asio::ip::tcp::endpoint endpoint(
+ boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+ socket.async_connect(endpoint, connect_handler);
+
+
+
+
+
+
+[endsect]
+
+
+[section:at_mark basic_socket::at_mark]
+
+Determine whether the socket is at the out-of-band data mark.
+
+ bool ``[link boost_asio.reference.basic_socket.at_mark.overload1 at_mark]``() const;
+
+ bool ``[link boost_asio.reference.basic_socket.at_mark.overload2 at_mark]``(
+ boost::system::error_code & ec) const;
+
+
+[section:overload1 basic_socket::at_mark (1 of 2 overloads)]
+
+Determine whether the socket is at the out-of-band data mark.
+
+ bool at_mark() const;
+
+
+This function is used to check whether the socket input is currently positioned at the out-of-band data mark.
+
+
+[heading Return Value]
+
+A bool indicating whether the socket is at the out-of-band data mark.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::at_mark (2 of 2 overloads)]
+
+Determine whether the socket is at the out-of-band data mark.
+
+ bool at_mark(
+ boost::system::error_code & ec) const;
+
+
+This function is used to check whether the socket input is currently positioned at the out-of-band data mark.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+A bool indicating whether the socket is at the out-of-band data mark.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:available basic_socket::available]
+
+Determine the number of bytes available for reading.
+
+ std::size_t ``[link boost_asio.reference.basic_socket.available.overload1 available]``() const;
+
+ std::size_t ``[link boost_asio.reference.basic_socket.available.overload2 available]``(
+ boost::system::error_code & ec) const;
+
+
+[section:overload1 basic_socket::available (1 of 2 overloads)]
+
+Determine the number of bytes available for reading.
+
+ std::size_t available() const;
+
+
+This function is used to determine the number of bytes that may be read without blocking.
+
+
+[heading Return Value]
+
+The number of bytes that may be read without blocking, or 0 if an error occurs.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::available (2 of 2 overloads)]
+
+Determine the number of bytes available for reading.
+
+ std::size_t available(
+ boost::system::error_code & ec) const;
+
+
+This function is used to determine the number of bytes that may be read without blocking.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+The number of bytes that may be read without blocking, or 0 if an error occurs.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:basic_socket basic_socket::basic_socket]
+
+Construct a basic_socket without opening it.
+
+ ``[link boost_asio.reference.basic_socket.basic_socket.overload1 basic_socket]``(
+ boost::asio::io_service & io_service);
+
+ ``[link boost_asio.reference.basic_socket.basic_socket.overload2 basic_socket]``(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol);
+
+ ``[link boost_asio.reference.basic_socket.basic_socket.overload3 basic_socket]``(
+ boost::asio::io_service & io_service,
+ const endpoint_type & endpoint);
+
+ ``[link boost_asio.reference.basic_socket.basic_socket.overload4 basic_socket]``(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol,
+ const native_type & native_socket);
+
+
+[section:overload1 basic_socket::basic_socket (1 of 4 overloads)]
+
+Construct a basic_socket without opening it.
+
+ basic_socket(
+ boost::asio::io_service & io_service);
+
+
+This constructor creates a socket without opening it.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::basic_socket (2 of 4 overloads)]
+
+Construct and open a basic_socket.
+
+ basic_socket(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol);
+
+
+This constructor creates and opens a socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+
+[[protocol][An object specifying protocol parameters to be used.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload3 basic_socket::basic_socket (3 of 4 overloads)]
+
+Construct a basic_socket, opening it and binding it to the given local endpoint.
+
+ basic_socket(
+ boost::asio::io_service & io_service,
+ const endpoint_type & endpoint);
+
+
+This constructor creates a socket and automatically opens it bound to the specified endpoint on the local machine. The protocol used is the protocol associated with the given endpoint.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+
+[[endpoint][An endpoint on the local machine to which the socket will be bound.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload4 basic_socket::basic_socket (4 of 4 overloads)]
+
+Construct a basic_socket on an existing native socket.
+
+ basic_socket(
+ boost::asio::io_service & io_service,
+ const protocol_type & protocol,
+ const native_type & native_socket);
+
+
+This constructor creates a socket object to hold an existing native socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]
+
+[[protocol][An object specifying protocol parameters to be used.]]
+
+[[native_socket][A native socket.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:bind basic_socket::bind]
+
+Bind the socket to the given local endpoint.
+
+ void ``[link boost_asio.reference.basic_socket.bind.overload1 bind]``(
+ const endpoint_type & endpoint);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.bind.overload2 bind]``(
+ const endpoint_type & endpoint,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::bind (1 of 2 overloads)]
+
+Bind the socket to the given local endpoint.
+
+ void bind(
+ const endpoint_type & endpoint);
+
+
+This function binds the socket to the specified endpoint on the local machine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[endpoint][An endpoint on the local machine to which the socket will be bound.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ socket.open(boost::asio::ip::tcp::v4());
+ socket.bind(boost::asio::ip::tcp::endpoint(
+ boost::asio::ip::tcp::v4(), 12345));
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::bind (2 of 2 overloads)]
+
+Bind the socket to the given local endpoint.
+
+ boost::system::error_code bind(
+ const endpoint_type & endpoint,
+ boost::system::error_code & ec);
+
+
+This function binds the socket to the specified endpoint on the local machine.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[endpoint][An endpoint on the local machine to which the socket will be bound.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ socket.open(boost::asio::ip::tcp::v4());
+ boost::system::error_code ec;
+ socket.bind(boost::asio::ip::tcp::endpoint(
+ boost::asio::ip::tcp::v4(), 12345), ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:broadcast basic_socket::broadcast]
+
+
+['Inherited from socket_base.]
+
+Socket option to permit sending of broadcast messages.
+
+ typedef implementation_defined broadcast;
+
+
+
+Implements the SOL\_SOCKET/SO\_BROADCAST socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::broadcast option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::broadcast option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:bytes_readable basic_socket::bytes_readable]
+
+
+['Inherited from socket_base.]
+
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
+
+
+
+Implements the FIONREAD IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::bytes_readable command(true);
+ socket.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[section:cancel basic_socket::cancel]
+
+Cancel all asynchronous operations associated with the socket.
+
+ void ``[link boost_asio.reference.basic_socket.cancel.overload1 cancel]``();
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.cancel.overload2 cancel]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::cancel (1 of 2 overloads)]
+
+Cancel all asynchronous operations associated with the socket.
+
+ void cancel();
+
+
+This function causes all outstanding asynchronous connect, send and receive operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Remarks]
+
+Calls to cancel() will always fail with boost::asio::error::operation\_not\_supported when run on Windows XP, Windows Server 2003, and earlier versions of Windows, unless BOOST\_ASIO\_ENABLE\_CANCELIO is defined. However, the CancelIo function has two issues that should be considered before enabling its use:
+
+* It will only cancel asynchronous operations that were initiated in the current thread.
+
+* It can appear to complete without error, but the request to cancel the unfinished operations may be silently ignored by the operating system. Whether it works or not seems to depend on the drivers that are installed.
+
+For portable cancellation, consider using one of the following alternatives:
+
+
+* Disable asio's I/O completion port backend by defining BOOST_ASIO_DISABLE_IOCP.
+
+* Use the close() function to simultaneously cancel the outstanding operations and close the socket.
+
+When running on Windows Vista, Windows Server 2008, and later, the CancelIoEx function is always used. This function does not have the problems described above.
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::cancel (2 of 2 overloads)]
+
+Cancel all asynchronous operations associated with the socket.
+
+ boost::system::error_code cancel(
+ boost::system::error_code & ec);
+
+
+This function causes all outstanding asynchronous connect, send and receive operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Remarks]
+
+Calls to cancel() will always fail with boost::asio::error::operation\_not\_supported when run on Windows XP, Windows Server 2003, and earlier versions of Windows, unless BOOST\_ASIO\_ENABLE\_CANCELIO is defined. However, the CancelIo function has two issues that should be considered before enabling its use:
+
+* It will only cancel asynchronous operations that were initiated in the current thread.
+
+* It can appear to complete without error, but the request to cancel the unfinished operations may be silently ignored by the operating system. Whether it works or not seems to depend on the drivers that are installed.
+
+For portable cancellation, consider using one of the following alternatives:
+
+
+* Disable asio's I/O completion port backend by defining BOOST_ASIO_DISABLE_IOCP.
+
+* Use the close() function to simultaneously cancel the outstanding operations and close the socket.
+
+When running on Windows Vista, Windows Server 2008, and later, the CancelIoEx function is always used. This function does not have the problems described above.
+
+
+[endsect]
+
+
+[endsect]
+
+[section:close basic_socket::close]
+
+Close the socket.
+
+ void ``[link boost_asio.reference.basic_socket.close.overload1 close]``();
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.close.overload2 close]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::close (1 of 2 overloads)]
+
+Close the socket.
+
+ void close();
+
+
+This function is used to close the socket. Any asynchronous send, receive or connect operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Remarks]
+
+For portable behaviour with respect to graceful closure of a connected socket, call shutdown() before closing the socket.
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::close (2 of 2 overloads)]
+
+Close the socket.
+
+ boost::system::error_code close(
+ boost::system::error_code & ec);
+
+
+This function is used to close the socket. Any asynchronous send, receive or connect operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::system::error_code ec;
+ socket.close(ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+[heading Remarks]
+
+For portable behaviour with respect to graceful closure of a connected socket, call shutdown() before closing the socket.
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:connect basic_socket::connect]
+
+Connect the socket to the specified endpoint.
+
+ void ``[link boost_asio.reference.basic_socket.connect.overload1 connect]``(
+ const endpoint_type & peer_endpoint);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.connect.overload2 connect]``(
+ const endpoint_type & peer_endpoint,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::connect (1 of 2 overloads)]
+
+Connect the socket to the specified endpoint.
+
+ void connect(
+ const endpoint_type & peer_endpoint);
+
+
+This function is used to connect a socket to the specified remote endpoint. The function call will block until the connection is successfully made or an error occurs.
+
+The socket is automatically opened if it is not already open. If the connect fails, and the socket was automatically opened, the socket is returned to the closed state.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[peer_endpoint][The remote endpoint to which the socket will be connected.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ boost::asio::ip::tcp::endpoint endpoint(
+ boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+ socket.connect(endpoint);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::connect (2 of 2 overloads)]
+
+Connect the socket to the specified endpoint.
+
+ boost::system::error_code connect(
+ const endpoint_type & peer_endpoint,
+ boost::system::error_code & ec);
+
+
+This function is used to connect a socket to the specified remote endpoint. The function call will block until the connection is successfully made or an error occurs.
+
+The socket is automatically opened if it is not already open. If the connect fails, and the socket was automatically opened, the socket is returned to the closed state.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[peer_endpoint][The remote endpoint to which the socket will be connected.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ boost::asio::ip::tcp::endpoint endpoint(
+ boost::asio::ip::address::from_string("1.2.3.4"), 12345);
+ boost::system::error_code ec;
+ socket.connect(endpoint, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:debug basic_socket::debug]
+
+
+['Inherited from socket_base.]
+
+Socket option to enable socket-level debugging.
+
+ typedef implementation_defined debug;
+
+
+
+Implements the SOL\_SOCKET/SO\_DEBUG socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::debug option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::debug option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:do_not_route basic_socket::do_not_route]
+
+
+['Inherited from socket_base.]
+
+Socket option to prevent routing, use local interfaces only.
+
+ typedef implementation_defined do_not_route;
+
+
+
+Implements the SOL\_SOCKET/SO\_DONTROUTE socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::do_not_route option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::udp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::do_not_route option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:enable_connection_aborted basic_socket::enable_connection_aborted]
+
+
+['Inherited from socket_base.]
+
+Socket option to report aborted connections on accept.
+
+ typedef implementation_defined enable_connection_aborted;
+
+
+
+Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection\_aborted. By default the option is false.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::enable_connection_aborted option(true);
+ acceptor.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::enable_connection_aborted option;
+ acceptor.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:endpoint_type basic_socket::endpoint_type]
+
+The endpoint type.
+
+ typedef Protocol::endpoint endpoint_type;
+
+
+
+
+[endsect]
+
+
+
+[section:get_io_service basic_socket::get_io_service]
+
+
+['Inherited from basic_io_object.]
+
+Get the io_service associated with the object.
+
+ boost::asio::io_service & get_io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+[section:get_option basic_socket::get_option]
+
+Get an option from the socket.
+
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ void ``[link boost_asio.reference.basic_socket.get_option.overload1 get_option]``(
+ GettableSocketOption & option) const;
+
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.get_option.overload2 get_option]``(
+ GettableSocketOption & option,
+ boost::system::error_code & ec) const;
+
+
+[section:overload1 basic_socket::get_option (1 of 2 overloads)]
+
+Get an option from the socket.
+
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ void get_option(
+ GettableSocketOption & option) const;
+
+
+This function is used to get the current value of an option on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[option][The option value to be obtained from the socket.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Getting the value of the SOL\_SOCKET/SO\_KEEPALIVE option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::socket::keep_alive option;
+ socket.get_option(option);
+ bool is_set = option.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::get_option (2 of 2 overloads)]
+
+Get an option from the socket.
+
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ boost::system::error_code get_option(
+ GettableSocketOption & option,
+ boost::system::error_code & ec) const;
+
+
+This function is used to get the current value of an option on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[option][The option value to be obtained from the socket.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Getting the value of the SOL\_SOCKET/SO\_KEEPALIVE option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::socket::keep_alive option;
+ boost::system::error_code ec;
+ socket.get_option(option, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ bool is_set = option.get();
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:implementation basic_socket::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
+[section:implementation_type basic_socket::implementation_type]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation type of I/O object.
+
+ typedef service_type::implementation_type implementation_type;
+
+
+
+
+[endsect]
+
+
+[section:io_control basic_socket::io_control]
+
+Perform an IO control command on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ void ``[link boost_asio.reference.basic_socket.io_control.overload1 io_control]``(
+ IoControlCommand & command);
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.io_control.overload2 io_control]``(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::io_control (1 of 2 overloads)]
+
+Perform an IO control command on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ void io_control(
+ IoControlCommand & command);
+
+
+This function is used to execute an IO control command on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the socket.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::socket::bytes_readable command;
+ socket.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::io_control (2 of 2 overloads)]
+
+Perform an IO control command on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code io_control(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+This function is used to execute an IO control command on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the socket.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::socket::bytes_readable command;
+ boost::system::error_code ec;
+ socket.io_control(command, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:io_service basic_socket::io_service]
+
+
+['Inherited from basic_io_object.]
+
+(Deprecated: use get_io_service().) Get the io_service associated with the object.
+
+ boost::asio::io_service & io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:is_open basic_socket::is_open]
+
+Determine whether the socket is open.
+
+ bool is_open() const;
+
+
+
+[endsect]
+
+
+
+[section:keep_alive basic_socket::keep_alive]
+
+
+['Inherited from socket_base.]
+
+Socket option to send keep-alives.
+
+ typedef implementation_defined keep_alive;
+
+
+
+Implements the SOL\_SOCKET/SO\_KEEPALIVE socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::keep_alive option(true);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::keep_alive option;
+ socket.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:linger basic_socket::linger]
+
+
+['Inherited from socket_base.]
+
+Socket option to specify whether the socket lingers on close if unsent data is present.
+
+ typedef implementation_defined linger;
+
+
+
+Implements the SOL\_SOCKET/SO\_LINGER socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::linger option(true, 30);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::linger option;
+ socket.get_option(option);
+ bool is_set = option.enabled();
+ unsigned short timeout = option.timeout();
+
+
+
+
+
+
+[endsect]
+
+
+[section:local_endpoint basic_socket::local_endpoint]
+
+Get the local endpoint of the socket.
+
+ endpoint_type ``[link boost_asio.reference.basic_socket.local_endpoint.overload1 local_endpoint]``() const;
+
+ endpoint_type ``[link boost_asio.reference.basic_socket.local_endpoint.overload2 local_endpoint]``(
+ boost::system::error_code & ec) const;
+
+
+[section:overload1 basic_socket::local_endpoint (1 of 2 overloads)]
+
+Get the local endpoint of the socket.
+
+ endpoint_type local_endpoint() const;
+
+
+This function is used to obtain the locally bound endpoint of the socket.
+
+
+[heading Return Value]
+
+An object that represents the local endpoint of the socket.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::local_endpoint (2 of 2 overloads)]
+
+Get the local endpoint of the socket.
+
+ endpoint_type local_endpoint(
+ boost::system::error_code & ec) const;
+
+
+This function is used to obtain the locally bound endpoint of the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::system::error_code ec;
+ boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint(ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:lowest_layer basic_socket::lowest_layer]
+
+Get a reference to the lowest layer.
+
+ lowest_layer_type & lowest_layer();
+
+
+This function returns a reference to the lowest layer in a stack of layers. Since a basic_socket cannot contain any further layers, it simply returns a reference to itself.
+
+
+[heading Return Value]
+
+A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:lowest_layer_type basic_socket::lowest_layer_type]
+
+A basic_socket is always the lowest layer.
+
+ typedef basic_socket< Protocol, SocketService > lowest_layer_type;
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_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_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.do_not_route [*do_not_route]]]
+ [Socket option to prevent routing, use local interfaces only. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.enable_connection_aborted [*enable_connection_aborted]]]
+ [Socket option to report aborted connections on accept. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.keep_alive [*keep_alive]]]
+ [Socket option to send keep-alives. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.linger [*linger]]]
+ [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
+ [The native representation of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_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_socket.send_buffer_size [*send_buffer_size]]]
+ [Socket option for the send buffer size of a socket. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.send_low_watermark [*send_low_watermark]]]
+ [Socket option for the send low watermark. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.basic_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.assign [*assign]]]
+ [Assign an existing native socket to the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.available [*available]]]
+ [Determine the number of bytes available for reading. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.basic_socket [*basic_socket]]]
+ [Construct a basic_socket without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.bind [*bind]]]
+ [Bind the socket to the given local endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.close [*close]]]
+ [Close the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.connect [*connect]]]
+ [Connect the socket to the specified endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.get_option [*get_option]]]
+ [Get an option from the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.native [*native]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint of the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.set_option [*set_option]]]
+ [Set an option on the socket. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
+ ]
+
+]
+
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket._basic_socket [*~basic_socket]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.basic_socket.max_connections [*max_connections]]]
+ [The maximum length of the queue of pending incoming connections. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.message_do_not_route [*message_do_not_route]]]
+ [Specify that the data should not be subject to routing. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_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_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
+
+]
+
+The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+
+
+[endsect]
+
+
+
+[section:max_connections basic_socket::max_connections]
+
+
+['Inherited from socket_base.]
+
+The maximum length of the queue of pending incoming connections.
+
+ static const int max_connections = implementation_defined;
+
+
+
+[endsect]
+
+
+
+[section:message_do_not_route basic_socket::message_do_not_route]
+
+
+['Inherited from socket_base.]
+
+Specify that the data should not be subject to routing.
+
+ static const int message_do_not_route = implementation_defined;
+
+
+
+[endsect]
+
+
+
+[section:message_flags basic_socket::message_flags]
+
+
+['Inherited from socket_base.]
+
+Bitmask type for flags that can be passed to send and receive operations.
+
+ typedef int message_flags;
+
+
+
+
+[endsect]
+
+
+
+[section:message_out_of_band basic_socket::message_out_of_band]
+
+
+['Inherited from socket_base.]
+
+Process out-of-band data.
+
+ static const int message_out_of_band = implementation_defined;
+
+
+
+[endsect]
+
+
+
+[section:message_peek basic_socket::message_peek]
+
+
+['Inherited from socket_base.]
+
+Peek at incoming data without removing it from the input queue.
+
+ static const int message_peek = implementation_defined;
+
+
+
+[endsect]
+
+
+
+[section:native basic_socket::native]
+
+Get the native socket representation.
+
+ native_type native();
+
+
+This function may be used to obtain the underlying representation of the socket. This is intended to allow access to native socket functionality that is not otherwise provided.
+
+
+[endsect]
+
+
+
+[section:native_type basic_socket::native_type]
+
+The native representation of a socket.
+
+ typedef SocketService::native_type native_type;
+
+
+
+
+[endsect]
+
+
+
+[section:non_blocking_io basic_socket::non_blocking_io]
+
+
+['Inherited from socket_base.]
+
+IO control command to set the blocking mode of the socket.
+
+ typedef implementation_defined non_blocking_io;
+
+
+
+Implements the FIONBIO IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::non_blocking_io command(true);
+ socket.io_control(command);
+
+
+
+
+
+
+[endsect]
+
+
+[section:open basic_socket::open]
+
+Open the socket using the specified protocol.
+
+ void ``[link boost_asio.reference.basic_socket.open.overload1 open]``(
+ const protocol_type & protocol = protocol_type());
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.open.overload2 open]``(
+ const protocol_type & protocol,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::open (1 of 2 overloads)]
+
+Open the socket using the specified protocol.
+
+ void open(
+ const protocol_type & protocol = protocol_type());
+
+
+This function opens the socket so that it will use the specified protocol.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[protocol][An object specifying protocol parameters to be used.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ socket.open(boost::asio::ip::tcp::v4());
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::open (2 of 2 overloads)]
+
+Open the socket using the specified protocol.
+
+ boost::system::error_code open(
+ const protocol_type & protocol,
+ boost::system::error_code & ec);
+
+
+This function opens the socket so that it will use the specified protocol.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[protocol][An object specifying which protocol is to be used.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ boost::system::error_code ec;
+ socket.open(boost::asio::ip::tcp::v4(), ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:protocol_type basic_socket::protocol_type]
+
+The protocol type.
+
+ typedef Protocol protocol_type;
+
+
+
+
+[endsect]
+
+
+
+[section:receive_buffer_size basic_socket::receive_buffer_size]
+
+
+['Inherited from socket_base.]
+
+Socket option for the receive buffer size of a socket.
+
+ typedef implementation_defined receive_buffer_size;
+
+
+
+Implements the SOL\_SOCKET/SO\_RCVBUF socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_buffer_size option(8192);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_buffer_size option;
+ socket.get_option(option);
+ int size = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:receive_low_watermark basic_socket::receive_low_watermark]
+
+
+['Inherited from socket_base.]
+
+Socket option for the receive low watermark.
+
+ typedef implementation_defined receive_low_watermark;
+
+
+
+Implements the SOL\_SOCKET/SO\_RCVLOWAT socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_low_watermark option(1024);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::receive_low_watermark option;
+ socket.get_option(option);
+ int size = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+[section:remote_endpoint basic_socket::remote_endpoint]
+
+Get the remote endpoint of the socket.
+
+ endpoint_type ``[link boost_asio.reference.basic_socket.remote_endpoint.overload1 remote_endpoint]``() const;
+
+ endpoint_type ``[link boost_asio.reference.basic_socket.remote_endpoint.overload2 remote_endpoint]``(
+ boost::system::error_code & ec) const;
+
+
+[section:overload1 basic_socket::remote_endpoint (1 of 2 overloads)]
+
+Get the remote endpoint of the socket.
+
+ endpoint_type remote_endpoint() const;
+
+
+This function is used to obtain the remote endpoint of the socket.
+
+
+[heading Return Value]
+
+An object that represents the remote endpoint of the socket.
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::remote_endpoint (2 of 2 overloads)]
+
+Get the remote endpoint of the socket.
+
+ endpoint_type remote_endpoint(
+ boost::system::error_code & ec) const;
+
+
+This function is used to obtain the remote endpoint of the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Return Value]
+
+An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.
+
+[heading Example]
+
+
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::system::error_code ec;
+ boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint(ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:reuse_address basic_socket::reuse_address]
+
+
+['Inherited from socket_base.]
+
+Socket option to allow the socket to be bound to an address that is already in use.
+
+ typedef implementation_defined reuse_address;
+
+
+
+Implements the SOL\_SOCKET/SO\_REUSEADDR socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::reuse_address option(true);
+ acceptor.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::acceptor acceptor(io_service);
+ ...
+ boost::asio::socket_base::reuse_address option;
+ acceptor.get_option(option);
+ bool is_set = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:send_buffer_size basic_socket::send_buffer_size]
+
+
+['Inherited from socket_base.]
+
+Socket option for the send buffer size of a socket.
+
+ typedef implementation_defined send_buffer_size;
+
+
+
+Implements the SOL\_SOCKET/SO\_SNDBUF socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_buffer_size option(8192);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_buffer_size option;
+ socket.get_option(option);
+ int size = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:send_low_watermark basic_socket::send_low_watermark]
+
+
+['Inherited from socket_base.]
+
+Socket option for the send low watermark.
+
+ typedef implementation_defined send_low_watermark;
+
+
+
+Implements the SOL\_SOCKET/SO\_SNDLOWAT socket option.
+
+
+[heading Examples]
+
+Setting the option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_low_watermark option(1024);
+ socket.set_option(option);
+
+
+
+
+Getting the current option value:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::socket_base::send_low_watermark option;
+ socket.get_option(option);
+ int size = option.value();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:service basic_socket::service]
+
+
+['Inherited from basic_io_object.]
+
+The service associated with the I/O object.
+
+ service_type & service;
+
+
+
+[endsect]
+
+
+
+[section:service_type basic_socket::service_type]
+
+
+['Inherited from basic_io_object.]
+
+The type of the service that will be used to provide I/O operations.
+
+ typedef SocketService service_type;
+
+
+
+
+[endsect]
+
+
+[section:set_option basic_socket::set_option]
+
+Set an option on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ void ``[link boost_asio.reference.basic_socket.set_option.overload1 set_option]``(
+ const SettableSocketOption & option);
+
+ template<
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.set_option.overload2 set_option]``(
+ const SettableSocketOption & option,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::set_option (1 of 2 overloads)]
+
+Set an option on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ void set_option(
+ const SettableSocketOption & option);
+
+
+This function is used to set an option on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[option][The new option value to be set on the socket.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Setting the IPPROTO\_TCP/TCP\_NODELAY option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::no_delay option(true);
+ socket.set_option(option);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::set_option (2 of 2 overloads)]
+
+Set an option on the socket.
+
+ template<
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ boost::system::error_code set_option(
+ const SettableSocketOption & option,
+ boost::system::error_code & ec);
+
+
+This function is used to set an option on the socket.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[option][The new option value to be set on the socket.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Setting the IPPROTO\_TCP/TCP\_NODELAY option:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::asio::ip::tcp::no_delay option(true);
+ boost::system::error_code ec;
+ socket.set_option(option, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:shutdown basic_socket::shutdown]
+
+Disable sends or receives on the socket.
+
+ void ``[link boost_asio.reference.basic_socket.shutdown.overload1 shutdown]``(
+ shutdown_type what);
+
+ boost::system::error_code ``[link boost_asio.reference.basic_socket.shutdown.overload2 shutdown]``(
+ shutdown_type what,
+ boost::system::error_code & ec);
+
+
+[section:overload1 basic_socket::shutdown (1 of 2 overloads)]
+
+Disable sends or receives on the socket.
+
+ void shutdown(
+ shutdown_type what);
+
+
+This function is used to disable send operations, receive operations, or both.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[what][Determines what types of operation will no longer be allowed.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Shutting down the send side of the socket:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send);
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 basic_socket::shutdown (2 of 2 overloads)]
+
+Disable sends or receives on the socket.
+
+ boost::system::error_code shutdown(
+ shutdown_type what,
+ boost::system::error_code & ec);
+
+
+This function is used to disable send operations, receive operations, or both.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[what][Determines what types of operation will no longer be allowed.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Shutting down the send side of the socket:
+
+ boost::asio::ip::tcp::socket socket(io_service);
+ ...
+ boost::system::error_code ec;
+ socket.shutdown(boost::asio::ip::tcp::socket::shutdown_send, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:shutdown_type basic_socket::shutdown_type]
+
+
+['Inherited from socket_base.]
+
+Different ways a socket may be shutdown.
+
+ enum shutdown_type
+
+[heading Values]
+[variablelist
+
+ [
+ [shutdown_receive]
+ [Shutdown the receive side of the socket. ]
+ ]
+
+ [
+ [shutdown_send]
+ [Shutdown the send side of the socket. ]
+ ]
+
+ [
+ [shutdown_both]
+ [Shutdown both send and receive on the socket. ]
+ ]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:_basic_socket basic_socket::~basic_socket]
+
+Protected destructor to prevent deletion through this type.
+
+ ~basic_socket();
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:basic_socket_acceptor basic_socket_acceptor]
+
+Provides the ability to accept new connections.
+
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``,
+ typename ``[link boost_asio.reference.SocketAcceptorService SocketAcceptorService]`` = socket_acceptor_service<Protocol>>
+ class basic_socket_acceptor :
+ public basic_io_object< SocketAcceptorService >,
+ public socket_base
+
+
+[heading Types]
+[table
+ [[Name][Description]]
+
+ [
+
+ [[link boost_asio.reference.basic_socket_acceptor.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
   
   ]
 
@@ -24303,11 +28662,6 @@
 
   enum ssl_errors
 
-[heading Values]
-[variablelist
-
-]
-
 
 
 [endsect]
@@ -25394,22 +29748,514 @@
 
 The strand object guarantees that handlers posted or dispatched through the strand will not be executed concurrently. The handler may be executed inside this function if the guarantee can be met. If this function is called from within a handler that was posted or dispatched through the same strand, then the new handler will be executed immediately.
 
-The strand's guarantee is in addition to the guarantee provided by the underlying io_service. The io_service guarantees that the handler will only be called in a thread in which the io\_service's run member function is currently being invoked.
+The strand's guarantee is in addition to the guarantee provided by the underlying io_service. The io_service guarantees that the handler will only be called in a thread in which the io\_service's run member function is currently being invoked.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[handler][The handler to be called. The strand will make a copy of the handler object as required. The function signature of the handler must be:
+``
+ void handler();
+
+``
+]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:get_io_service io_service::strand::get_io_service]
+
+Get the io_service associated with the strand.
+
+ boost::asio::io_service & get_io_service();
+
+
+This function may be used to obtain the io_service object that the strand uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the strand will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:io_service io_service::strand::io_service]
+
+(Deprecated: use get_io_service().) Get the io_service associated with the strand.
+
+ boost::asio::io_service & io_service();
+
+
+This function may be used to obtain the io_service object that the strand uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the strand will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:post io_service::strand::post]
+
+Request the strand to invoke the given handler and return immediately.
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``>
+ void post(
+ Handler handler);
+
+
+This function is used to ask the strand to execute the given handler, but without allowing the strand to call the handler from inside this function.
+
+The strand object guarantees that handlers posted or dispatched through the strand will not be executed concurrently. The strand's guarantee is in addition to the guarantee provided by the underlying io_service. The io_service guarantees that the handler will only be called in a thread in which the io\_service's run member function is currently being invoked.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[handler][The handler to be called. The strand will make a copy of the handler object as required. The function signature of the handler must be:
+``
+ void handler();
+
+``
+]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:strand io_service::strand::strand]
+
+Constructor.
+
+ strand(
+ boost::asio::io_service & io_service);
+
+
+Constructs the strand.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the strand will use to dispatch handlers that are ready to be run. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:wrap io_service::strand::wrap]
+
+Create a new handler that automatically dispatches the wrapped handler on the strand.
+
+ template<
+ typename ``[link boost_asio.reference.Handler Handler]``>
+ unspecified wrap(
+ Handler handler);
+
+
+This function is used to create a new handler function object that, when invoked, will automatically pass the wrapped handler to the strand's dispatch function.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[handler][The handler to be wrapped. The strand will make a copy of the handler object as required. The function signature of the handler must be:
+``
+ void handler(A1 a1, ... An an);
+
+``
+]]
+
+]
+
+[heading Return Value]
+
+A function object that, when invoked, passes the wrapped handler to the strand's dispatch function. Given a function object with the signature:
+
+ R f(A1 a1, ... An an);
+
+
+If this function object is passed to the wrap function like so:
+
+ strand.wrap(f);
+
+
+then the return value is a function object with the signature
+
+ void g(A1 a1, ... An an);
+
+
+that, when invoked, executes code equivalent to:
+
+ strand.dispatch(boost::bind(f, a1, ... an));
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:_strand io_service::strand::~strand]
+
+Destructor.
+
+ ~strand();
+
+
+Destroys a strand.
+
+Handlers posted through the strand that have not yet been invoked will still be dispatched in a way that meets the guarantee of non-concurrency.
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:io_service__work io_service::work]
+
+Class to inform the io_service when it has work to do.
+
+ class work
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.io_service__work.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the work. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__work.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the work. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__work.work [*work]]]
+ [Constructor notifies the io_service that work is starting. ]
+ ]
+
+ [
+ [[link boost_asio.reference.io_service__work._work [*~work]]]
+ [Destructor notifies the io_service that the work is complete. ]
+ ]
+
+]
+
+The work class is used to inform the io_service when work starts and finishes. This ensures that the io\_service's run() function will not exit while work is underway, and that it does exit when there is no unfinished work remaining.
+
+The work class is copy-constructible so that it may be used as a data member in a handler class. It is not assignable.
+
+
+[section:get_io_service io_service::work::get_io_service]
+
+Get the io_service associated with the work.
+
+ boost::asio::io_service & get_io_service();
+
+
+
+[endsect]
+
+
+
+[section:io_service io_service::work::io_service]
+
+(Deprecated: use get_io_service().) Get the io_service associated with the work.
+
+ boost::asio::io_service & io_service();
+
+
+
+[endsect]
+
+
+[section:work io_service::work::work]
+
+Constructor notifies the io_service that work is starting.
+
+ ``[link boost_asio.reference.io_service__work.work.overload1 work]``(
+ boost::asio::io_service & io_service);
+
+ ``[link boost_asio.reference.io_service__work.work.overload2 work]``(
+ const work & other);
+
+
+[section:overload1 io_service::work::work (1 of 2 overloads)]
+
+Constructor notifies the io_service that work is starting.
+
+ work(
+ boost::asio::io_service & io_service);
+
+
+The constructor is used to inform the io_service that some work has begun. This ensures that the io\_service's run() function will not exit while the work is underway.
+
+
+[endsect]
+
+
+
+[section:overload2 io_service::work::work (2 of 2 overloads)]
+
+Copy constructor notifies the io_service that work is starting.
+
+ work(
+ const work & other);
+
+
+The constructor is used to inform the io_service that some work has begun. This ensures that the io\_service's run() function will not exit while the work is underway.
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:_work io_service::work::~work]
+
+Destructor notifies the io_service that the work is complete.
+
+ ~work();
+
+
+The destructor is used to inform the io_service that some work has finished. Once the count of unfinished work reaches zero, the io\_service's run() function is permitted to exit.
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:ip__address ip::address]
+
+Implements version-independent IP addresses.
+
+ class address
+
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__address.address [*address]]]
+ [Default constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.from_string [*from_string]]]
+ [Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.is_v4 [*is_v4]]]
+ [Get whether the address is an IP version 4 address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.is_v6 [*is_v6]]]
+ [Get whether the address is an IP version 6 address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.operator_eq_ [*operator=]]]
+ [Assign from another address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.to_string [*to_string]]]
+ [Get the address as a string in dotted decimal format. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.to_v4 [*to_v4]]]
+ [Get the address as an IP version 4 address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.to_v6 [*to_v6]]]
+ [Get the address as an IP version 6 address. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__address.operator_not__eq_ [*operator!=]]]
+ [Compare two addresses for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.operator_lt_ [*operator<]]]
+ [Compare addresses for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address.operator_eq__eq_ [*operator==]]]
+ [Compare two addresses for equality. ]
+ ]
+
+]
+
+[heading Related Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__address.operator_lt__lt_ [*operator<<]]]
+ [Output an address as a string. ]
+ ]
+
+]
+
+The
+[link boost_asio.reference.ip__address ip::address] class provides the ability to use either IP version 4 or version 6 addresses.
+
+
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
+
+[*Shared] [*objects:] Unsafe.
+
+
+[section:address ip::address::address]
+
+Default constructor.
+
+ ``[link boost_asio.reference.ip__address.address.overload1 address]``();
+
+ ``[link boost_asio.reference.ip__address.address.overload2 address]``(
+ const boost::asio::ip::address_v4 & ipv4_address);
+
+ ``[link boost_asio.reference.ip__address.address.overload3 address]``(
+ const boost::asio::ip::address_v6 & ipv6_address);
+
+ ``[link boost_asio.reference.ip__address.address.overload4 address]``(
+ const address & other);
+
+
+[section:overload1 ip::address::address (1 of 4 overloads)]
+
+Default constructor.
+
+ address();
+
+
+
+[endsect]
+
+
+
+[section:overload2 ip::address::address (2 of 4 overloads)]
+
+Construct an address from an IPv4 address.
+
+ address(
+ const boost::asio::ip::address_v4 & ipv4_address);
+
+
+
+[endsect]
+
+
+
+[section:overload3 ip::address::address (3 of 4 overloads)]
+
+Construct an address from an IPv6 address.
+
+ address(
+ const boost::asio::ip::address_v6 & ipv6_address);
+
+
+
+[endsect]
+
+
+
+[section:overload4 ip::address::address (4 of 4 overloads)]
+
+Copy constructor.
+
+ address(
+ const address & other);
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:from_string ip::address::from_string]
+
+Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
+
+ static address ``[link boost_asio.reference.ip__address.from_string.overload1 from_string]``(
+ const char * str);
+
+ static address ``[link boost_asio.reference.ip__address.from_string.overload2 from_string]``(
+ const char * str,
+ boost::system::error_code & ec);
+
+ static address ``[link boost_asio.reference.ip__address.from_string.overload3 from_string]``(
+ const std::string & str);
 
+ static address ``[link boost_asio.reference.ip__address.from_string.overload4 from_string]``(
+ const std::string & str,
+ boost::system::error_code & ec);
 
-[heading Parameters]
-
 
-[variablelist
-
-[[handler][The handler to be called. The strand will make a copy of the handler object as required. The function signature of the handler must be:
-``
- void handler();
+[section:overload1 ip::address::from_string (1 of 4 overloads)]
 
-``
-]]
+Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
 
-]
+ static address from_string(
+ const char * str);
 
 
 
@@ -25417,74 +30263,66 @@
 
 
 
-[section:get_io_service io_service::strand::get_io_service]
+[section:overload2 ip::address::from_string (2 of 4 overloads)]
 
-Get the io_service associated with the strand.
+Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
 
- boost::asio::io_service & get_io_service();
+ static address from_string(
+ const char * str,
+ boost::system::error_code & ec);
 
 
-This function may be used to obtain the io_service object that the strand uses to dispatch handlers for asynchronous operations.
 
+[endsect]
 
-[heading Return Value]
-
-A reference to the io_service object that the strand will use to dispatch handlers. Ownership is not transferred to the caller.
 
 
+[section:overload3 ip::address::from_string (3 of 4 overloads)]
 
-[endsect]
+Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
 
+ static address from_string(
+ const std::string & str);
 
 
-[section:io_service io_service::strand::io_service]
 
-(Deprecated: use get_io_service().) Get the io_service associated with the strand.
+[endsect]
 
- boost::asio::io_service & io_service();
 
 
-This function may be used to obtain the io_service object that the strand uses to dispatch handlers for asynchronous operations.
+[section:overload4 ip::address::from_string (4 of 4 overloads)]
 
+Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
 
-[heading Return Value]
-
-A reference to the io_service object that the strand will use to dispatch handlers. Ownership is not transferred to the caller.
+ static address from_string(
+ const std::string & str,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:post io_service::strand::post]
 
-Request the strand to invoke the given handler and return immediately.
+[section:is_v4 ip::address::is_v4]
 
- template<
- typename ``[link boost_asio.reference.Handler Handler]``>
- void post(
- Handler handler);
+Get whether the address is an IP version 4 address.
 
+ bool is_v4() const;
 
-This function is used to ask the strand to execute the given handler, but without allowing the strand to call the handler from inside this function.
 
-The strand object guarantees that handlers posted or dispatched through the strand will not be executed concurrently. The strand's guarantee is in addition to the guarantee provided by the underlying io_service. The io_service guarantees that the handler will only be called in a thread in which the io\_service's run member function is currently being invoked.
+
+[endsect]
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[handler][The handler to be called. The strand will make a copy of the handler object as required. The function signature of the handler must be:
-``
- void handler();
+[section:is_v6 ip::address::is_v6]
 
-``
-]]
+Get whether the address is an IP version 6 address.
 
-]
+ bool is_v6() const;
 
 
 
@@ -25492,25 +30330,27 @@
 
 
 
-[section:strand io_service::strand::strand]
+[section:operator_not__eq_ ip::address::operator!=]
 
-Constructor.
+Compare two addresses for inequality.
 
- strand(
- boost::asio::io_service & io_service);
+ friend bool operator!=(
+ const address & a1,
+ const address & a2);
 
 
-Constructs the strand.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[io_service][The io\_service object that the strand will use to dispatch handlers that are ready to be run. ]]
 
-]
+[section:operator_lt_ ip::address::operator<]
+
+Compare addresses for ordering.
+
+ friend bool operator<(
+ const address & a1,
+ const address & a2);
 
 
 
@@ -25518,17 +30358,19 @@
 
 
 
-[section:wrap io_service::strand::wrap]
+[section:operator_lt__lt_ ip::address::operator<<]
 
-Create a new handler that automatically dispatches the wrapped handler on the strand.
+Output an address as a string.
 
   template<
- typename ``[link boost_asio.reference.Handler Handler]``>
- unspecified wrap(
- Handler handler);
+ typename ``[link boost_asio.reference.Elem Elem]``,
+ typename ``[link boost_asio.reference.Traits Traits]``>
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const address & addr);
 
 
-This function is used to create a new handler function object that, when invoked, will automatically pass the wrapped handler to the strand's dispatch function.
+Used to output a human-readable string for a specified address.
 
 
 [heading Parameters]
@@ -25536,38 +30378,41 @@
 
 [variablelist
   
-[[handler][The handler to be wrapped. The strand will make a copy of the handler object as required. The function signature of the handler must be:
-``
- void handler(A1 a1, ... An an);
+[[os][The output stream to which the string will be written.]]
 
-``
-]]
+[[addr][The address to be written.]]
 
 ]
 
 [heading Return Value]
       
-A function object that, when invoked, passes the wrapped handler to the strand's dispatch function. Given a function object with the signature:
+The output stream.
 
- R f(A1 a1, ... An an);
 
 
-If this function object is passed to the wrap function like so:
+[endsect]
 
- strand.wrap(f);
 
+[section:operator_eq_ ip::address::operator=]
 
-then the return value is a function object with the signature
+Assign from another address.
 
- void g(A1 a1, ... An an);
+ address & ``[link boost_asio.reference.ip__address.operator_eq_.overload1 operator=]``(
+ const address & other);
 
+ address & ``[link boost_asio.reference.ip__address.operator_eq_.overload2 operator=]``(
+ const boost::asio::ip::address_v4 & ipv4_address);
 
-that, when invoked, executes code equivalent to:
+ address & ``[link boost_asio.reference.ip__address.operator_eq_.overload3 operator=]``(
+ const boost::asio::ip::address_v6 & ipv6_address);
 
- strand.dispatch(boost::bind(f, a1, ... an));
 
+[section:overload1 ip::address::operator= (1 of 3 overloads)]
 
+Assign from another address.
 
+ address & operator=(
+ const address & other);
 
 
 
@@ -25575,193 +30420,202 @@
 
 
 
-[section:_strand io_service::strand::~strand]
-
-Destructor.
-
- ~strand();
+[section:overload2 ip::address::operator= (2 of 3 overloads)]
 
+Assign from an IPv4 address.
 
-Destroys a strand.
+ address & operator=(
+ const boost::asio::ip::address_v4 & ipv4_address);
 
-Handlers posted through the strand that have not yet been invoked will still be dispatched in a way that meets the guarantee of non-concurrency.
 
 
 [endsect]
 
 
 
-[endsect]
-
-[section:io_service__work io_service::work]
+[section:overload3 ip::address::operator= (3 of 3 overloads)]
 
-Class to inform the io_service when it has work to do.
+Assign from an IPv6 address.
 
- class work
+ address & operator=(
+ const boost::asio::ip::address_v6 & ipv6_address);
 
 
-[heading Member Functions]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.io_service__work.get_io_service [*get_io_service]]]
- [Get the io_service associated with the work. ]
- ]
-
- [
- [[link boost_asio.reference.io_service__work.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service associated with the work. ]
- ]
-
- [
- [[link boost_asio.reference.io_service__work.work [*work]]]
- [Constructor notifies the io_service that work is starting. ]
- ]
-
- [
- [[link boost_asio.reference.io_service__work._work [*~work]]]
- [Destructor notifies the io_service that the work is complete. ]
- ]
-
-]
+[endsect]
 
-The work class is used to inform the io_service when work starts and finishes. This ensures that the io\_service's run() function will not exit while work is underway, and that it does exit when there is no unfinished work remaining.
 
-The work class is copy-constructible so that it may be used as a data member in a handler class. It is not assignable.
+[endsect]
 
 
-[section:get_io_service io_service::work::get_io_service]
+[section:operator_eq__eq_ ip::address::operator==]
 
-Get the io_service associated with the work.
+Compare two addresses for equality.
 
- boost::asio::io_service & get_io_service();
+ friend bool operator==(
+ const address & a1,
+ const address & a2);
 
 
 
 [endsect]
 
 
+[section:to_string ip::address::to_string]
 
-[section:io_service io_service::work::io_service]
-
-(Deprecated: use get_io_service().) Get the io_service associated with the work.
+Get the address as a string in dotted decimal format.
 
- boost::asio::io_service & io_service();
+ std::string ``[link boost_asio.reference.ip__address.to_string.overload1 to_string]``() const;
 
+ std::string ``[link boost_asio.reference.ip__address.to_string.overload2 to_string]``(
+ boost::system::error_code & ec) const;
 
 
-[endsect]
+[section:overload1 ip::address::to_string (1 of 2 overloads)]
 
+Get the address as a string in dotted decimal format.
 
-[section:work io_service::work::work]
+ std::string to_string() const;
 
-Constructor notifies the io_service that work is starting.
 
- ``[link boost_asio.reference.io_service__work.work.overload1 work]``(
- boost::asio::io_service & io_service);
 
- ``[link boost_asio.reference.io_service__work.work.overload2 work]``(
- const work & other);
+[endsect]
 
 
-[section:overload1 io_service::work::work (1 of 2 overloads)]
 
-Constructor notifies the io_service that work is starting.
+[section:overload2 ip::address::to_string (2 of 2 overloads)]
 
- work(
- boost::asio::io_service & io_service);
+Get the address as a string in dotted decimal format.
 
+ std::string to_string(
+ boost::system::error_code & ec) const;
 
-The constructor is used to inform the io_service that some work has begun. This ensures that the io\_service's run() function will not exit while the work is underway.
 
 
 [endsect]
 
 
+[endsect]
 
-[section:overload2 io_service::work::work (2 of 2 overloads)]
 
-Copy constructor notifies the io_service that work is starting.
+[section:to_v4 ip::address::to_v4]
 
- work(
- const work & other);
+Get the address as an IP version 4 address.
 
+ boost::asio::ip::address_v4 to_v4() const;
 
-The constructor is used to inform the io_service that some work has begun. This ensures that the io\_service's run() function will not exit while the work is underway.
 
 
 [endsect]
 
 
-[endsect]
 
+[section:to_v6 ip::address::to_v6]
 
-[section:_work io_service::work::~work]
+Get the address as an IP version 6 address.
 
-Destructor notifies the io_service that the work is complete.
+ boost::asio::ip::address_v6 to_v6() const;
 
- ~work();
 
 
-The destructor is used to inform the io_service that some work has finished. Once the count of unfinished work reaches zero, the io\_service's run() function is permitted to exit.
+[endsect]
+
 
 
 [endsect]
 
+[section:ip__address_v4 ip::address_v4]
 
+Implements IP version 4 style addresses.
 
-[endsect]
+ class address_v4
 
-[section:ip__address ip::address]
 
-Implements version-independent IP addresses.
+[heading Types]
+[table
+ [[Name][Description]]
 
- class address
+ [
+
+ [[link boost_asio.reference.ip__address_v4.bytes_type [*bytes_type]]]
+ [The type used to represent an address as an array of bytes. ]
+
+ ]
 
+]
 
 [heading Member Functions]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address.address [*address]]]
+ [[link boost_asio.reference.ip__address_v4.address_v4 [*address_v4]]]
     [Default constructor. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.from_string [*from_string]]]
- [Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation. ]
+ [[link boost_asio.reference.ip__address_v4.any [*any]]]
+ [Obtain an address object that represents any address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.is_v4 [*is_v4]]]
- [Get whether the address is an IP version 4 address. ]
+ [[link boost_asio.reference.ip__address_v4.broadcast [*broadcast]]]
+ [Obtain an address object that represents the broadcast address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.is_v6 [*is_v6]]]
- [Get whether the address is an IP version 6 address. ]
+ [[link boost_asio.reference.ip__address_v4.from_string [*from_string]]]
+ [Create an address from an IP address string in dotted decimal form. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.operator_eq_ [*operator=]]]
+ [[link boost_asio.reference.ip__address_v4.is_class_a [*is_class_a]]]
+ [Determine whether the address is a class A address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.is_class_b [*is_class_b]]]
+ [Determine whether the address is a class B address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.is_class_c [*is_class_c]]]
+ [Determine whether the address is a class C address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.is_multicast [*is_multicast]]]
+ [Determine whether the address is a multicast address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.loopback [*loopback]]]
+ [Obtain an address object that represents the loopback address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.netmask [*netmask]]]
+ [Obtain the netmask that corresponds to the address, based on its address class. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.operator_eq_ [*operator=]]]
     [Assign from another address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.to_string [*to_string]]]
- [Get the address as a string in dotted decimal format. ]
+ [[link boost_asio.reference.ip__address_v4.to_bytes [*to_bytes]]]
+ [Get the address in bytes. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.to_v4 [*to_v4]]]
- [Get the address as an IP version 4 address. ]
+ [[link boost_asio.reference.ip__address_v4.to_string [*to_string]]]
+ [Get the address as a string in dotted decimal format. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.to_v6 [*to_v6]]]
- [Get the address as an IP version 6 address. ]
+ [[link boost_asio.reference.ip__address_v4.to_ulong [*to_ulong]]]
+ [Get the address as an unsigned long in host byte order. ]
   ]
   
 ]
@@ -25771,20 +30625,35 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address.operator_not__eq_ [*operator!=]]]
+ [[link boost_asio.reference.ip__address_v4.operator_not__eq_ [*operator!=]]]
     [Compare two addresses for inequality. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.operator_lt_ [*operator<]]]
+ [[link boost_asio.reference.ip__address_v4.operator_lt_ [*operator<]]]
     [Compare addresses for ordering. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address.operator_eq__eq_ [*operator==]]]
+ [[link boost_asio.reference.ip__address_v4.operator_lt__eq_ [*operator<=]]]
+ [Compare addresses for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.operator_eq__eq_ [*operator==]]]
     [Compare two addresses for equality. ]
   ]
   
+ [
+ [[link boost_asio.reference.ip__address_v4.operator_gt_ [*operator>]]]
+ [Compare addresses for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v4.operator_gt__eq_ [*operator>=]]]
+ [Compare addresses for ordering. ]
+ ]
+
 ]
 
 [heading Related Functions]
@@ -25792,14 +30661,14 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address.operator_lt__lt_ [*operator<<]]]
+ [[link boost_asio.reference.ip__address_v4.operator_lt__lt_ [*operator<<]]]
     [Output an address as a string. ]
   ]
   
 ]
 
 The
-[link boost_asio.reference.ip__address ip::address] class provides the ability to use either IP version 4 or version 6 addresses.
+[link boost_asio.reference.ip__address_v4 ip::address_v4] class provides the ability to use and manipulate IP version 4 addresses.
 
 
 [heading Thread Safety]
@@ -25809,27 +30678,27 @@
 [*Shared] [*objects:] Unsafe.
 
 
-[section:address ip::address::address]
+[section:address_v4 ip::address_v4::address_v4]
 
 Default constructor.
 
- ``[link boost_asio.reference.ip__address.address.overload1 address]``();
+ ``[link boost_asio.reference.ip__address_v4.address_v4.overload1 address_v4]``();
 
- ``[link boost_asio.reference.ip__address.address.overload2 address]``(
- const boost::asio::ip::address_v4 & ipv4_address);
+ ``[link boost_asio.reference.ip__address_v4.address_v4.overload2 address_v4]``(
+ const bytes_type & bytes);
 
- ``[link boost_asio.reference.ip__address.address.overload3 address]``(
- const boost::asio::ip::address_v6 & ipv6_address);
+ ``[link boost_asio.reference.ip__address_v4.address_v4.overload3 address_v4]``(
+ unsigned long addr);
 
- ``[link boost_asio.reference.ip__address.address.overload4 address]``(
- const address & other);
+ ``[link boost_asio.reference.ip__address_v4.address_v4.overload4 address_v4]``(
+ const address_v4 & other);
 
 
-[section:overload1 ip::address::address (1 of 4 overloads)]
+[section:overload1 ip::address_v4::address_v4 (1 of 4 overloads)]
 
 Default constructor.
 
- address();
+ address_v4();
 
 
 
@@ -25837,12 +30706,12 @@
 
 
 
-[section:overload2 ip::address::address (2 of 4 overloads)]
+[section:overload2 ip::address_v4::address_v4 (2 of 4 overloads)]
 
-Construct an address from an IPv4 address.
+Construct an address from raw bytes.
 
- address(
- const boost::asio::ip::address_v4 & ipv4_address);
+ address_v4(
+ const bytes_type & bytes);
 
 
 
@@ -25850,12 +30719,12 @@
 
 
 
-[section:overload3 ip::address::address (3 of 4 overloads)]
+[section:overload3 ip::address_v4::address_v4 (3 of 4 overloads)]
 
-Construct an address from an IPv6 address.
+Construct an address from a unsigned long in host byte order.
 
- address(
- const boost::asio::ip::address_v6 & ipv6_address);
+ address_v4(
+ unsigned long addr);
 
 
 
@@ -25863,12 +30732,12 @@
 
 
 
-[section:overload4 ip::address::address (4 of 4 overloads)]
+[section:overload4 ip::address_v4::address_v4 (4 of 4 overloads)]
 
 Copy constructor.
 
- address(
- const address & other);
+ address_v4(
+ const address_v4 & other);
 
 
 
@@ -25877,31 +30746,149 @@
 
 [endsect]
 
-[section:from_string ip::address::from_string]
 
-Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
+[section:any ip::address_v4::any]
 
- static address ``[link boost_asio.reference.ip__address.from_string.overload1 from_string]``(
+Obtain an address object that represents any address.
+
+ static address_v4 any();
+
+
+
+[endsect]
+
+
+[section:broadcast ip::address_v4::broadcast]
+
+Obtain an address object that represents the broadcast address.
+
+ static address_v4 ``[link boost_asio.reference.ip__address_v4.broadcast.overload1 broadcast]``();
+
+ static address_v4 ``[link boost_asio.reference.ip__address_v4.broadcast.overload2 broadcast]``(
+ const address_v4 & addr,
+ const address_v4 & mask);
+
+
+[section:overload1 ip::address_v4::broadcast (1 of 2 overloads)]
+
+Obtain an address object that represents the broadcast address.
+
+ static address_v4 broadcast();
+
+
+
+[endsect]
+
+
+
+[section:overload2 ip::address_v4::broadcast (2 of 2 overloads)]
+
+Obtain an address object that represents the broadcast address that corresponds to the specified address and netmask.
+
+ static address_v4 broadcast(
+ const address_v4 & addr,
+ const address_v4 & mask);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:bytes_type ip::address_v4::bytes_type]
+
+The type used to represent an address as an array of bytes.
+
+ typedef boost::array< unsigned char, 4 > bytes_type;
+
+
+
+
+[endsect]
+
+
+[section:from_string ip::address_v4::from_string]
+
+Create an address from an IP address string in dotted decimal form.
+
+ static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload1 from_string]``(
       const char * str);
 
- static address ``[link boost_asio.reference.ip__address.from_string.overload2 from_string]``(
+ static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload2 from_string]``(
+ const char * str,
+ boost::system::error_code & ec);
+
+ static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload3 from_string]``(
+ const std::string & str);
+
+ static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload4 from_string]``(
+ const std::string & str,
+ boost::system::error_code & ec);
+
+
+[section:overload1 ip::address_v4::from_string (1 of 4 overloads)]
+
+Create an address from an IP address string in dotted decimal form.
+
+ static address_v4 from_string(
+ const char * str);
+
+
+
+[endsect]
+
+
+
+[section:overload2 ip::address_v4::from_string (2 of 4 overloads)]
+
+Create an address from an IP address string in dotted decimal form.
+
+ static address_v4 from_string(
       const char * str,
       boost::system::error_code & ec);
 
- static address ``[link boost_asio.reference.ip__address.from_string.overload3 from_string]``(
- const std::string & str);
 
- static address ``[link boost_asio.reference.ip__address.from_string.overload4 from_string]``(
+
+[endsect]
+
+
+
+[section:overload3 ip::address_v4::from_string (3 of 4 overloads)]
+
+Create an address from an IP address string in dotted decimal form.
+
+ static address_v4 from_string(
+ const std::string & str);
+
+
+
+[endsect]
+
+
+
+[section:overload4 ip::address_v4::from_string (4 of 4 overloads)]
+
+Create an address from an IP address string in dotted decimal form.
+
+ static address_v4 from_string(
       const std::string & str,
       boost::system::error_code & ec);
 
 
-[section:overload1 ip::address::from_string (1 of 4 overloads)]
 
-Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
+[endsect]
 
- static address from_string(
- const char * str);
+
+[endsect]
+
+
+[section:is_class_a ip::address_v4::is_class_a]
+
+Determine whether the address is a class A address.
+
+ bool is_class_a() const;
 
 
 
@@ -25909,13 +30896,11 @@
 
 
 
-[section:overload2 ip::address::from_string (2 of 4 overloads)]
+[section:is_class_b ip::address_v4::is_class_b]
 
-Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
+Determine whether the address is a class B address.
 
- static address from_string(
- const char * str,
- boost::system::error_code & ec);
+ bool is_class_b() const;
 
 
 
@@ -25923,12 +30908,11 @@
 
 
 
-[section:overload3 ip::address::from_string (3 of 4 overloads)]
+[section:is_class_c ip::address_v4::is_class_c]
 
-Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
+Determine whether the address is a class C address.
 
- static address from_string(
- const std::string & str);
+ bool is_class_c() const;
 
 
 
@@ -25936,27 +30920,23 @@
 
 
 
-[section:overload4 ip::address::from_string (4 of 4 overloads)]
+[section:is_multicast ip::address_v4::is_multicast]
 
-Create an address from an IPv4 address string in dotted decimal form, or from an IPv6 address in hexadecimal notation.
+Determine whether the address is a multicast address.
 
- static address from_string(
- const std::string & str,
- boost::system::error_code & ec);
+ bool is_multicast() const;
 
 
 
 [endsect]
 
 
-[endsect]
-
 
-[section:is_v4 ip::address::is_v4]
+[section:loopback ip::address_v4::loopback]
 
-Get whether the address is an IP version 4 address.
+Obtain an address object that represents the loopback address.
 
- bool is_v4() const;
+ static address_v4 loopback();
 
 
 
@@ -25964,11 +30944,12 @@
 
 
 
-[section:is_v6 ip::address::is_v6]
+[section:netmask ip::address_v4::netmask]
 
-Get whether the address is an IP version 6 address.
+Obtain the netmask that corresponds to the address, based on its address class.
 
- bool is_v6() const;
+ static address_v4 netmask(
+ const address_v4 & addr);
 
 
 
@@ -25976,13 +30957,13 @@
 
 
 
-[section:operator_not__eq_ ip::address::operator!=]
+[section:operator_not__eq_ ip::address_v4::operator!=]
 
 Compare two addresses for inequality.
 
   friend bool operator!=(
- const address & a1,
- const address & a2);
+ const address_v4 & a1,
+ const address_v4 & a2);
 
 
 
@@ -25990,13 +30971,13 @@
 
 
 
-[section:operator_lt_ ip::address::operator<]
+[section:operator_lt_ ip::address_v4::operator<]
 
 Compare addresses for ordering.
 
   friend bool operator<(
- const address & a1,
- const address & a2);
+ const address_v4 & a1,
+ const address_v4 & a2);
 
 
 
@@ -26004,7 +30985,7 @@
 
 
 
-[section:operator_lt__lt_ ip::address::operator<<]
+[section:operator_lt__lt_ ip::address_v4::operator<<]
 
 Output an address as a string.
 
@@ -26013,7 +30994,7 @@
       typename ``[link boost_asio.reference.Traits Traits]``>
   std::basic_ostream< Elem, Traits > & operator<<(
       std::basic_ostream< Elem, Traits > & os,
- const address & addr);
+ const address_v4 & addr);
 
 
 Used to output a human-readable string for a specified address.
@@ -26039,26 +31020,27 @@
 [endsect]
 
 
-[section:operator_eq_ ip::address::operator=]
 
-Assign from another address.
+[section:operator_lt__eq_ ip::address_v4::operator<=]
 
- address & ``[link boost_asio.reference.ip__address.operator_eq_.overload1 operator=]``(
- const address & other);
+Compare addresses for ordering.
 
- address & ``[link boost_asio.reference.ip__address.operator_eq_.overload2 operator=]``(
- const boost::asio::ip::address_v4 & ipv4_address);
+ friend bool operator<=(
+ const address_v4 & a1,
+ const address_v4 & a2);
 
- address & ``[link boost_asio.reference.ip__address.operator_eq_.overload3 operator=]``(
- const boost::asio::ip::address_v6 & ipv6_address);
 
 
-[section:overload1 ip::address::operator= (1 of 3 overloads)]
+[endsect]
+
+
+
+[section:operator_eq_ ip::address_v4::operator=]
 
 Assign from another address.
 
- address & operator=(
- const address & other);
+ address_v4 & operator=(
+ const address_v4 & other);
 
 
 
@@ -26066,12 +31048,13 @@
 
 
 
-[section:overload2 ip::address::operator= (2 of 3 overloads)]
+[section:operator_eq__eq_ ip::address_v4::operator==]
 
-Assign from an IPv4 address.
+Compare two addresses for equality.
 
- address & operator=(
- const boost::asio::ip::address_v4 & ipv4_address);
+ friend bool operator==(
+ const address_v4 & a1,
+ const address_v4 & a2);
 
 
 
@@ -26079,45 +31062,56 @@
 
 
 
-[section:overload3 ip::address::operator= (3 of 3 overloads)]
+[section:operator_gt_ ip::address_v4::operator>]
 
-Assign from an IPv6 address.
+Compare addresses for ordering.
 
- address & operator=(
- const boost::asio::ip::address_v6 & ipv6_address);
+ friend bool operator>(
+ const address_v4 & a1,
+ const address_v4 & a2);
 
 
 
 [endsect]
 
 
+
+[section:operator_gt__eq_ ip::address_v4::operator>=]
+
+Compare addresses for ordering.
+
+ friend bool operator>=(
+ const address_v4 & a1,
+ const address_v4 & a2);
+
+
+
 [endsect]
 
 
-[section:operator_eq__eq_ ip::address::operator==]
 
-Compare two addresses for equality.
+[section:to_bytes ip::address_v4::to_bytes]
 
- friend bool operator==(
- const address & a1,
- const address & a2);
+Get the address in bytes.
+
+ bytes_type to_bytes() const;
 
 
 
 [endsect]
 
 
-[section:to_string ip::address::to_string]
+[section:to_string ip::address_v4::to_string]
 
 Get the address as a string in dotted decimal format.
 
- std::string ``[link boost_asio.reference.ip__address.to_string.overload1 to_string]``() const;
+ std::string ``[link boost_asio.reference.ip__address_v4.to_string.overload1 to_string]``() const;
 
- std::string ``[link boost_asio.reference.ip__address.to_string.overload2 to_string]``(
+ std::string ``[link boost_asio.reference.ip__address_v4.to_string.overload2 to_string]``(
       boost::system::error_code & ec) const;
 
 
-[section:overload1 ip::address::to_string (1 of 2 overloads)]
+[section:overload1 ip::address_v4::to_string (1 of 2 overloads)]
 
 Get the address as a string in dotted decimal format.
 
@@ -26129,7 +31123,7 @@
 
 
 
-[section:overload2 ip::address::to_string (2 of 2 overloads)]
+[section:overload2 ip::address_v4::to_string (2 of 2 overloads)]
 
 Get the address as a string in dotted decimal format.
 
@@ -26144,23 +31138,11 @@
 [endsect]
 
 
-[section:to_v4 ip::address::to_v4]
-
-Get the address as an IP version 4 address.
-
- boost::asio::ip::address_v4 to_v4() const;
-
-
-
-[endsect]
-
-
-
-[section:to_v6 ip::address::to_v6]
+[section:to_ulong ip::address_v4::to_ulong]
 
-Get the address as an IP version 6 address.
+Get the address as an unsigned long in host byte order.
 
- boost::asio::ip::address_v6 to_v6() const;
+ unsigned long to_ulong() const;
 
 
 
@@ -26170,11 +31152,11 @@
 
 [endsect]
 
-[section:ip__address_v4 ip::address_v4]
+[section:ip__address_v6 ip::address_v6]
 
-Implements IP version 4 style addresses.
+Implements IP version 6 style addresses.
 
- class address_v4
+ class address_v6
 
 
 [heading Types]
@@ -26183,7 +31165,7 @@
 
   [
 
- [[link boost_asio.reference.ip__address_v4.bytes_type [*bytes_type]]]
+ [[link boost_asio.reference.ip__address_v6.bytes_type [*bytes_type]]]
     [The type used to represent an address as an array of bytes. ]
   
   ]
@@ -26195,73 +31177,118 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address_v4.address_v4 [*address_v4]]]
+ [[link boost_asio.reference.ip__address_v6.address_v6 [*address_v6]]]
     [Default constructor. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.any [*any]]]
+ [[link boost_asio.reference.ip__address_v6.any [*any]]]
     [Obtain an address object that represents any address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.broadcast [*broadcast]]]
- [Obtain an address object that represents the broadcast address. ]
+ [[link boost_asio.reference.ip__address_v6.from_string [*from_string]]]
+ [Create an address from an IP address string. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.from_string [*from_string]]]
- [Create an address from an IP address string in dotted decimal form. ]
+ [[link boost_asio.reference.ip__address_v6.is_link_local [*is_link_local]]]
+ [Determine whether the address is link local. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.is_class_a [*is_class_a]]]
- [Determine whether the address is a class A address. ]
+ [[link boost_asio.reference.ip__address_v6.is_loopback [*is_loopback]]]
+ [Determine whether the address is a loopback address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.is_class_b [*is_class_b]]]
- [Determine whether the address is a class B address. ]
+ [[link boost_asio.reference.ip__address_v6.is_multicast [*is_multicast]]]
+ [Determine whether the address is a multicast address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.is_class_c [*is_class_c]]]
- [Determine whether the address is a class C address. ]
+ [[link boost_asio.reference.ip__address_v6.is_multicast_global [*is_multicast_global]]]
+ [Determine whether the address is a global multicast address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.is_multicast [*is_multicast]]]
- [Determine whether the address is a multicast address. ]
+ [[link boost_asio.reference.ip__address_v6.is_multicast_link_local [*is_multicast_link_local]]]
+ [Determine whether the address is a link-local multicast address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.loopback [*loopback]]]
- [Obtain an address object that represents the loopback address. ]
+ [[link boost_asio.reference.ip__address_v6.is_multicast_node_local [*is_multicast_node_local]]]
+ [Determine whether the address is a node-local multicast address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.netmask [*netmask]]]
- [Obtain the netmask that corresponds to the address, based on its address class. ]
+ [[link boost_asio.reference.ip__address_v6.is_multicast_org_local [*is_multicast_org_local]]]
+ [Determine whether the address is a org-local multicast address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.operator_eq_ [*operator=]]]
+ [[link boost_asio.reference.ip__address_v6.is_multicast_site_local [*is_multicast_site_local]]]
+ [Determine whether the address is a site-local multicast address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.is_site_local [*is_site_local]]]
+ [Determine whether the address is site local. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.is_unspecified [*is_unspecified]]]
+ [Determine whether the address is unspecified. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.is_v4_compatible [*is_v4_compatible]]]
+ [Determine whether the address is an IPv4-compatible address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.is_v4_mapped [*is_v4_mapped]]]
+ [Determine whether the address is a mapped IPv4 address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.loopback [*loopback]]]
+ [Obtain an address object that represents the loopback address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.operator_eq_ [*operator=]]]
     [Assign from another address. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.to_bytes [*to_bytes]]]
+ [[link boost_asio.reference.ip__address_v6.scope_id [*scope_id]]]
+ [The scope ID of the address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.to_bytes [*to_bytes]]]
     [Get the address in bytes. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.to_string [*to_string]]]
- [Get the address as a string in dotted decimal format. ]
+ [[link boost_asio.reference.ip__address_v6.to_string [*to_string]]]
+ [Get the address as a string. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.to_ulong [*to_ulong]]]
- [Get the address as an unsigned long in host byte order. ]
+ [[link boost_asio.reference.ip__address_v6.to_v4 [*to_v4]]]
+ [Converts an IPv4-mapped or IPv4-compatible address to an IPv4 address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.v4_compatible [*v4_compatible]]]
+ [Create an IPv4-compatible IPv6 address. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__address_v6.v4_mapped [*v4_mapped]]]
+ [Create an IPv4-mapped IPv6 address. ]
   ]
   
 ]
@@ -26271,32 +31298,32 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address_v4.operator_not__eq_ [*operator!=]]]
+ [[link boost_asio.reference.ip__address_v6.operator_not__eq_ [*operator!=]]]
     [Compare two addresses for inequality. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.operator_lt_ [*operator<]]]
+ [[link boost_asio.reference.ip__address_v6.operator_lt_ [*operator<]]]
     [Compare addresses for ordering. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.operator_lt__eq_ [*operator<=]]]
+ [[link boost_asio.reference.ip__address_v6.operator_lt__eq_ [*operator<=]]]
     [Compare addresses for ordering. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.operator_eq__eq_ [*operator==]]]
+ [[link boost_asio.reference.ip__address_v6.operator_eq__eq_ [*operator==]]]
     [Compare two addresses for equality. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.operator_gt_ [*operator>]]]
+ [[link boost_asio.reference.ip__address_v6.operator_gt_ [*operator>]]]
     [Compare addresses for ordering. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v4.operator_gt__eq_ [*operator>=]]]
+ [[link boost_asio.reference.ip__address_v6.operator_gt__eq_ [*operator>=]]]
     [Compare addresses for ordering. ]
   ]
   
@@ -26307,14 +31334,14 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address_v4.operator_lt__lt_ [*operator<<]]]
+ [[link boost_asio.reference.ip__address_v6.operator_lt__lt_ [*operator<<]]]
     [Output an address as a string. ]
   ]
   
 ]
 
 The
-[link boost_asio.reference.ip__address_v4 ip::address_v4] class provides the ability to use and manipulate IP version 4 addresses.
+[link boost_asio.reference.ip__address_v6 ip::address_v6] class provides the ability to use and manipulate IP version 6 addresses.
 
 
 [heading Thread Safety]
@@ -26324,27 +31351,25 @@
 [*Shared] [*objects:] Unsafe.
 
 
-[section:address_v4 ip::address_v4::address_v4]
+[section:address_v6 ip::address_v6::address_v6]
 
 Default constructor.
 
- ``[link boost_asio.reference.ip__address_v4.address_v4.overload1 address_v4]``();
-
- ``[link boost_asio.reference.ip__address_v4.address_v4.overload2 address_v4]``(
- const bytes_type & bytes);
+ ``[link boost_asio.reference.ip__address_v6.address_v6.overload1 address_v6]``();
 
- ``[link boost_asio.reference.ip__address_v4.address_v4.overload3 address_v4]``(
- unsigned long addr);
+ ``[link boost_asio.reference.ip__address_v6.address_v6.overload2 address_v6]``(
+ const bytes_type & bytes,
+ unsigned long scope_id = 0);
 
- ``[link boost_asio.reference.ip__address_v4.address_v4.overload4 address_v4]``(
- const address_v4 & other);
+ ``[link boost_asio.reference.ip__address_v6.address_v6.overload3 address_v6]``(
+ const address_v6 & other);
 
 
-[section:overload1 ip::address_v4::address_v4 (1 of 4 overloads)]
+[section:overload1 ip::address_v6::address_v6 (1 of 3 overloads)]
 
 Default constructor.
 
- address_v4();
+ address_v6();
 
 
 
@@ -26352,12 +31377,13 @@
 
 
 
-[section:overload2 ip::address_v4::address_v4 (2 of 4 overloads)]
+[section:overload2 ip::address_v6::address_v6 (2 of 3 overloads)]
 
-Construct an address from raw bytes.
+Construct an address from raw bytes and scope ID.
 
- address_v4(
- const bytes_type & bytes);
+ address_v6(
+ const bytes_type & bytes,
+ unsigned long scope_id = 0);
 
 
 
@@ -26365,61 +31391,70 @@
 
 
 
-[section:overload3 ip::address_v4::address_v4 (3 of 4 overloads)]
+[section:overload3 ip::address_v6::address_v6 (3 of 3 overloads)]
 
-Construct an address from a unsigned long in host byte order.
+Copy constructor.
 
- address_v4(
- unsigned long addr);
+ address_v6(
+ const address_v6 & other);
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:overload4 ip::address_v4::address_v4 (4 of 4 overloads)]
 
-Copy constructor.
+[section:any ip::address_v6::any]
 
- address_v4(
- const address_v4 & other);
+Obtain an address object that represents any address.
+
+ static address_v6 any();
 
 
 
 [endsect]
 
 
-[endsect]
 
+[section:bytes_type ip::address_v6::bytes_type]
 
-[section:any ip::address_v4::any]
+The type used to represent an address as an array of bytes.
 
-Obtain an address object that represents any address.
+ typedef boost::array< unsigned char, 16 > bytes_type;
 
- static address_v4 any();
 
 
 
 [endsect]
 
 
-[section:broadcast ip::address_v4::broadcast]
+[section:from_string ip::address_v6::from_string]
 
-Obtain an address object that represents the broadcast address.
+Create an address from an IP address string.
 
- static address_v4 ``[link boost_asio.reference.ip__address_v4.broadcast.overload1 broadcast]``();
+ static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload1 from_string]``(
+ const char * str);
 
- static address_v4 ``[link boost_asio.reference.ip__address_v4.broadcast.overload2 broadcast]``(
- const address_v4 & addr,
- const address_v4 & mask);
+ static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload2 from_string]``(
+ const char * str,
+ boost::system::error_code & ec);
 
+ static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload3 from_string]``(
+ const std::string & str);
 
-[section:overload1 ip::address_v4::broadcast (1 of 2 overloads)]
+ static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload4 from_string]``(
+ const std::string & str,
+ boost::system::error_code & ec);
 
-Obtain an address object that represents the broadcast address.
 
- static address_v4 broadcast();
+[section:overload1 ip::address_v6::from_string (1 of 4 overloads)]
+
+Create an address from an IP address string.
+
+ static address_v6 from_string(
+ const char * str);
 
 
 
@@ -26427,59 +31462,66 @@
 
 
 
-[section:overload2 ip::address_v4::broadcast (2 of 2 overloads)]
+[section:overload2 ip::address_v6::from_string (2 of 4 overloads)]
 
-Obtain an address object that represents the broadcast address that corresponds to the specified address and netmask.
+Create an address from an IP address string.
 
- static address_v4 broadcast(
- const address_v4 & addr,
- const address_v4 & mask);
+ static address_v6 from_string(
+ const char * str,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
+
+[section:overload3 ip::address_v6::from_string (3 of 4 overloads)]
+
+Create an address from an IP address string.
+
+ static address_v6 from_string(
+ const std::string & str);
+
+
+
 [endsect]
 
 
-[section:bytes_type ip::address_v4::bytes_type]
 
-The type used to represent an address as an array of bytes.
+[section:overload4 ip::address_v6::from_string (4 of 4 overloads)]
 
- typedef boost::array< unsigned char, 4 > bytes_type;
+Create an address from an IP address string.
 
+ static address_v6 from_string(
+ const std::string & str,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
-[section:from_string ip::address_v4::from_string]
+[endsect]
 
-Create an address from an IP address string in dotted decimal form.
 
- static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload1 from_string]``(
- const char * str);
+[section:is_link_local ip::address_v6::is_link_local]
 
- static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload2 from_string]``(
- const char * str,
- boost::system::error_code & ec);
+Determine whether the address is link local.
 
- static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload3 from_string]``(
- const std::string & str);
+ bool is_link_local() const;
 
- static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload4 from_string]``(
- const std::string & str,
- boost::system::error_code & ec);
 
 
-[section:overload1 ip::address_v4::from_string (1 of 4 overloads)]
+[endsect]
 
-Create an address from an IP address string in dotted decimal form.
 
- static address_v4 from_string(
- const char * str);
+
+[section:is_loopback ip::address_v6::is_loopback]
+
+Determine whether the address is a loopback address.
+
+ bool is_loopback() const;
 
 
 
@@ -26487,13 +31529,11 @@
 
 
 
-[section:overload2 ip::address_v4::from_string (2 of 4 overloads)]
+[section:is_multicast ip::address_v6::is_multicast]
 
-Create an address from an IP address string in dotted decimal form.
+Determine whether the address is a multicast address.
 
- static address_v4 from_string(
- const char * str,
- boost::system::error_code & ec);
+ bool is_multicast() const;
 
 
 
@@ -26501,12 +31541,11 @@
 
 
 
-[section:overload3 ip::address_v4::from_string (3 of 4 overloads)]
+[section:is_multicast_global ip::address_v6::is_multicast_global]
 
-Create an address from an IP address string in dotted decimal form.
+Determine whether the address is a global multicast address.
 
- static address_v4 from_string(
- const std::string & str);
+ bool is_multicast_global() const;
 
 
 
@@ -26514,27 +31553,35 @@
 
 
 
-[section:overload4 ip::address_v4::from_string (4 of 4 overloads)]
+[section:is_multicast_link_local ip::address_v6::is_multicast_link_local]
 
-Create an address from an IP address string in dotted decimal form.
+Determine whether the address is a link-local multicast address.
 
- static address_v4 from_string(
- const std::string & str,
- boost::system::error_code & ec);
+ bool is_multicast_link_local() const;
 
 
 
 [endsect]
 
 
+
+[section:is_multicast_node_local ip::address_v6::is_multicast_node_local]
+
+Determine whether the address is a node-local multicast address.
+
+ bool is_multicast_node_local() const;
+
+
+
 [endsect]
 
 
-[section:is_class_a ip::address_v4::is_class_a]
 
-Determine whether the address is a class A address.
+[section:is_multicast_org_local ip::address_v6::is_multicast_org_local]
 
- bool is_class_a() const;
+Determine whether the address is a org-local multicast address.
+
+ bool is_multicast_org_local() const;
 
 
 
@@ -26542,11 +31589,11 @@
 
 
 
-[section:is_class_b ip::address_v4::is_class_b]
+[section:is_multicast_site_local ip::address_v6::is_multicast_site_local]
 
-Determine whether the address is a class B address.
+Determine whether the address is a site-local multicast address.
 
- bool is_class_b() const;
+ bool is_multicast_site_local() const;
 
 
 
@@ -26554,11 +31601,11 @@
 
 
 
-[section:is_class_c ip::address_v4::is_class_c]
+[section:is_site_local ip::address_v6::is_site_local]
 
-Determine whether the address is a class C address.
+Determine whether the address is site local.
 
- bool is_class_c() const;
+ bool is_site_local() const;
 
 
 
@@ -26566,11 +31613,11 @@
 
 
 
-[section:is_multicast ip::address_v4::is_multicast]
+[section:is_unspecified ip::address_v6::is_unspecified]
 
-Determine whether the address is a multicast address.
+Determine whether the address is unspecified.
 
- bool is_multicast() const;
+ bool is_unspecified() const;
 
 
 
@@ -26578,11 +31625,11 @@
 
 
 
-[section:loopback ip::address_v4::loopback]
+[section:is_v4_compatible ip::address_v6::is_v4_compatible]
 
-Obtain an address object that represents the loopback address.
+Determine whether the address is an IPv4-compatible address.
 
- static address_v4 loopback();
+ bool is_v4_compatible() const;
 
 
 
@@ -26590,12 +31637,11 @@
 
 
 
-[section:netmask ip::address_v4::netmask]
+[section:is_v4_mapped ip::address_v6::is_v4_mapped]
 
-Obtain the netmask that corresponds to the address, based on its address class.
+Determine whether the address is a mapped IPv4 address.
 
- static address_v4 netmask(
- const address_v4 & addr);
+ bool is_v4_mapped() const;
 
 
 
@@ -26603,13 +31649,25 @@
 
 
 
-[section:operator_not__eq_ ip::address_v4::operator!=]
+[section:loopback ip::address_v6::loopback]
+
+Obtain an address object that represents the loopback address.
+
+ static address_v6 loopback();
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ ip::address_v6::operator!=]
 
 Compare two addresses for inequality.
 
   friend bool operator!=(
- const address_v4 & a1,
- const address_v4 & a2);
+ const address_v6 & a1,
+ const address_v6 & a2);
 
 
 
@@ -26617,13 +31675,13 @@
 
 
 
-[section:operator_lt_ ip::address_v4::operator<]
+[section:operator_lt_ ip::address_v6::operator<]
 
 Compare addresses for ordering.
 
   friend bool operator<(
- const address_v4 & a1,
- const address_v4 & a2);
+ const address_v6 & a1,
+ const address_v6 & a2);
 
 
 
@@ -26631,7 +31689,7 @@
 
 
 
-[section:operator_lt__lt_ ip::address_v4::operator<<]
+[section:operator_lt__lt_ ip::address_v6::operator<<]
 
 Output an address as a string.
 
@@ -26640,7 +31698,7 @@
       typename ``[link boost_asio.reference.Traits Traits]``>
   std::basic_ostream< Elem, Traits > & operator<<(
       std::basic_ostream< Elem, Traits > & os,
- const address_v4 & addr);
+ const address_v6 & addr);
 
 
 Used to output a human-readable string for a specified address.
@@ -26667,13 +31725,13 @@
 
 
 
-[section:operator_lt__eq_ ip::address_v4::operator<=]
+[section:operator_lt__eq_ ip::address_v6::operator<=]
 
 Compare addresses for ordering.
 
   friend bool operator<=(
- const address_v4 & a1,
- const address_v4 & a2);
+ const address_v6 & a1,
+ const address_v6 & a2);
 
 
 
@@ -26681,12 +31739,12 @@
 
 
 
-[section:operator_eq_ ip::address_v4::operator=]
+[section:operator_eq_ ip::address_v6::operator=]
 
 Assign from another address.
 
- address_v4 & operator=(
- const address_v4 & other);
+ address_v6 & operator=(
+ const address_v6 & other);
 
 
 
@@ -26694,13 +31752,13 @@
 
 
 
-[section:operator_eq__eq_ ip::address_v4::operator==]
+[section:operator_eq__eq_ ip::address_v6::operator==]
 
 Compare two addresses for equality.
 
   friend bool operator==(
- const address_v4 & a1,
- const address_v4 & a2);
+ const address_v6 & a1,
+ const address_v6 & a2);
 
 
 
@@ -26708,13 +31766,13 @@
 
 
 
-[section:operator_gt_ ip::address_v4::operator>]
+[section:operator_gt_ ip::address_v6::operator>]
 
 Compare addresses for ordering.
 
   friend bool operator>(
- const address_v4 & a1,
- const address_v4 & a2);
+ const address_v6 & a1,
+ const address_v6 & a2);
 
 
 
@@ -26722,21 +31780,61 @@
 
 
 
-[section:operator_gt__eq_ ip::address_v4::operator>=]
+[section:operator_gt__eq_ ip::address_v6::operator>=]
 
 Compare addresses for ordering.
 
   friend bool operator>=(
- const address_v4 & a1,
- const address_v4 & a2);
+ const address_v6 & a1,
+ const address_v6 & a2);
 
 
 
 [endsect]
 
 
+[section:scope_id ip::address_v6::scope_id]
+
+The scope ID of the address.
+
+ unsigned long ``[link boost_asio.reference.ip__address_v6.scope_id.overload1 scope_id]``() const;
+
+ void ``[link boost_asio.reference.ip__address_v6.scope_id.overload2 scope_id]``(
+ unsigned long id);
+
+
+[section:overload1 ip::address_v6::scope_id (1 of 2 overloads)]
+
+The scope ID of the address.
+
+ unsigned long scope_id() const;
+
+
+Returns the scope ID associated with the IPv6 address.
+
+
+[endsect]
+
+
+
+[section:overload2 ip::address_v6::scope_id (2 of 2 overloads)]
+
+The scope ID of the address.
+
+ void scope_id(
+ unsigned long id);
+
+
+Modifies the scope ID associated with the IPv6 address.
 
-[section:to_bytes ip::address_v4::to_bytes]
+
+[endsect]
+
+
+[endsect]
+
+
+[section:to_bytes ip::address_v6::to_bytes]
 
 Get the address in bytes.
 
@@ -26747,19 +31845,19 @@
 [endsect]
 
 
-[section:to_string ip::address_v4::to_string]
+[section:to_string ip::address_v6::to_string]
 
-Get the address as a string in dotted decimal format.
+Get the address as a string.
 
- std::string ``[link boost_asio.reference.ip__address_v4.to_string.overload1 to_string]``() const;
+ std::string ``[link boost_asio.reference.ip__address_v6.to_string.overload1 to_string]``() const;
 
- std::string ``[link boost_asio.reference.ip__address_v4.to_string.overload2 to_string]``(
+ std::string ``[link boost_asio.reference.ip__address_v6.to_string.overload2 to_string]``(
       boost::system::error_code & ec) const;
 
 
-[section:overload1 ip::address_v4::to_string (1 of 2 overloads)]
+[section:overload1 ip::address_v6::to_string (1 of 2 overloads)]
 
-Get the address as a string in dotted decimal format.
+Get the address as a string.
 
   std::string to_string() const;
 
@@ -26769,9 +31867,9 @@
 
 
 
-[section:overload2 ip::address_v4::to_string (2 of 2 overloads)]
+[section:overload2 ip::address_v6::to_string (2 of 2 overloads)]
 
-Get the address as a string in dotted decimal format.
+Get the address as a string.
 
   std::string to_string(
       boost::system::error_code & ec) const;
@@ -26784,11 +31882,37 @@
 [endsect]
 
 
-[section:to_ulong ip::address_v4::to_ulong]
+[section:to_v4 ip::address_v6::to_v4]
+
+Converts an IPv4-mapped or IPv4-compatible address to an IPv4 address.
+
+ address_v4 to_v4() const;
 
-Get the address as an unsigned long in host byte order.
 
- unsigned long to_ulong() const;
+
+[endsect]
+
+
+
+[section:v4_compatible ip::address_v6::v4_compatible]
+
+Create an IPv4-compatible IPv6 address.
+
+ static address_v6 v4_compatible(
+ const address_v4 & addr);
+
+
+
+[endsect]
+
+
+
+[section:v4_mapped ip::address_v6::v4_mapped]
+
+Create an IPv4-mapped IPv6 address.
+
+ static address_v6 v4_mapped(
+ const address_v4 & addr);
 
 
 
@@ -26798,11 +31922,13 @@
 
 [endsect]
 
-[section:ip__address_v6 ip::address_v6]
+[section:ip__basic_endpoint ip::basic_endpoint]
 
-Implements IP version 6 style addresses.
+Describes an endpoint for a version-independent IP socket.
 
- class address_v6
+ template<
+ typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
+ class basic_endpoint
 
 
 [heading Types]
@@ -26811,8 +31937,15 @@
 
   [
 
- [[link boost_asio.reference.ip__address_v6.bytes_type [*bytes_type]]]
- [The type used to represent an address as an array of bytes. ]
+ [[link boost_asio.reference.ip__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.ip__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
   
   ]
 
@@ -26823,118 +31956,48 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address_v6.address_v6 [*address_v6]]]
- [Default constructor. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.any [*any]]]
- [Obtain an address object that represents any address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.from_string [*from_string]]]
- [Create an address from an IP address string. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_link_local [*is_link_local]]]
- [Determine whether the address is link local. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_loopback [*is_loopback]]]
- [Determine whether the address is a loopback address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_multicast [*is_multicast]]]
- [Determine whether the address is a multicast address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_multicast_global [*is_multicast_global]]]
- [Determine whether the address is a global multicast address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_multicast_link_local [*is_multicast_link_local]]]
- [Determine whether the address is a link-local multicast address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_multicast_node_local [*is_multicast_node_local]]]
- [Determine whether the address is a node-local multicast address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_multicast_org_local [*is_multicast_org_local]]]
- [Determine whether the address is a org-local multicast address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_multicast_site_local [*is_multicast_site_local]]]
- [Determine whether the address is a site-local multicast address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_site_local [*is_site_local]]]
- [Determine whether the address is site local. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_unspecified [*is_unspecified]]]
- [Determine whether the address is unspecified. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_v4_compatible [*is_v4_compatible]]]
- [Determine whether the address is an IPv4-compatible address. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.is_v4_mapped [*is_v4_mapped]]]
- [Determine whether the address is a mapped IPv4 address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
+ [Get the IP address associated with the endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.loopback [*loopback]]]
- [Obtain an address object that represents the loopback address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.operator_eq_ [*operator=]]]
- [Assign from another address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.scope_id [*scope_id]]]
- [The scope ID of the address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.to_bytes [*to_bytes]]]
- [Get the address in bytes. ]
+ [[link boost_asio.reference.ip__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.to_string [*to_string]]]
- [Get the address as a string. ]
+ [[link boost_asio.reference.ip__basic_endpoint.port [*port]]]
+ [Get the port associated with the endpoint. The port number is always in the host's byte order. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.to_v4 [*to_v4]]]
- [Converts an IPv4-mapped or IPv4-compatible address to an IPv4 address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.v4_compatible [*v4_compatible]]]
- [Create an IPv4-compatible IPv6 address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.v4_mapped [*v4_mapped]]]
- [Create an IPv4-mapped IPv6 address. ]
+ [[link boost_asio.reference.ip__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
   ]
   
 ]
@@ -26944,33 +32007,18 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address_v6.operator_not__eq_ [*operator!=]]]
- [Compare two addresses for inequality. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.operator_lt_ [*operator<]]]
- [Compare addresses for ordering. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.operator_lt__eq_ [*operator<=]]]
- [Compare addresses for ordering. ]
- ]
-
- [
- [[link boost_asio.reference.ip__address_v6.operator_eq__eq_ [*operator==]]]
- [Compare two addresses for equality. ]
+ [[link boost_asio.reference.ip__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.operator_gt_ [*operator>]]]
- [Compare addresses for ordering. ]
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
   ]
   
   [
- [[link boost_asio.reference.ip__address_v6.operator_gt__eq_ [*operator>=]]]
- [Compare addresses for ordering. ]
+ [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
   ]
   
 ]
@@ -26980,42 +32028,38 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__address_v6.operator_lt__lt_ [*operator<<]]]
- [Output an address as a string. ]
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
   ]
   
 ]
 
 The
-[link boost_asio.reference.ip__address_v6 ip::address_v6] class provides the ability to use and manipulate IP version 6 addresses.
+[link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] class template describes an endpoint that may be associated with a particular socket.
 
 
 [heading Thread Safety]
   
 [*Distinct] [*objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
-
+[*Shared] [*objects:] Unsafe.
 
-[section:address_v6 ip::address_v6::address_v6]
 
-Default constructor.
+[section:address ip::basic_endpoint::address]
 
- ``[link boost_asio.reference.ip__address_v6.address_v6.overload1 address_v6]``();
+Get the IP address associated with the endpoint.
 
- ``[link boost_asio.reference.ip__address_v6.address_v6.overload2 address_v6]``(
- const bytes_type & bytes,
- unsigned long scope_id = 0);
+ boost::asio::ip::address ``[link boost_asio.reference.ip__basic_endpoint.address.overload1 address]``() const;
 
- ``[link boost_asio.reference.ip__address_v6.address_v6.overload3 address_v6]``(
- const address_v6 & other);
+ void ``[link boost_asio.reference.ip__basic_endpoint.address.overload2 address]``(
+ const boost::asio::ip::address & addr);
 
 
-[section:overload1 ip::address_v6::address_v6 (1 of 3 overloads)]
+[section:overload1 ip::basic_endpoint::address (1 of 2 overloads)]
 
-Default constructor.
+Get the IP address associated with the endpoint.
 
- address_v6();
+ boost::asio::ip::address address() const;
 
 
 
@@ -27023,84 +32067,74 @@
 
 
 
-[section:overload2 ip::address_v6::address_v6 (2 of 3 overloads)]
+[section:overload2 ip::basic_endpoint::address (2 of 2 overloads)]
 
-Construct an address from raw bytes and scope ID.
+Set the IP address associated with the endpoint.
 
- address_v6(
- const bytes_type & bytes,
- unsigned long scope_id = 0);
+ void address(
+ const boost::asio::ip::address & addr);
 
 
 
 [endsect]
 
 
-
-[section:overload3 ip::address_v6::address_v6 (3 of 3 overloads)]
-
-Copy constructor.
-
- address_v6(
- const address_v6 & other);
-
-
-
 [endsect]
 
+[section:basic_endpoint ip::basic_endpoint::basic_endpoint]
 
-[endsect]
+Default constructor.
 
+ ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
 
-[section:any ip::address_v6::any]
+ ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
+ const InternetProtocol & protocol,
+ unsigned short port_num);
 
-Obtain an address object that represents any address.
+ ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
+ const boost::asio::ip::address & addr,
+ unsigned short port_num);
 
- static address_v6 any();
+ ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
+ const basic_endpoint & other);
 
 
+[section:overload1 ip::basic_endpoint::basic_endpoint (1 of 4 overloads)]
 
-[endsect]
+Default constructor.
 
+ basic_endpoint();
 
 
-[section:bytes_type ip::address_v6::bytes_type]
 
-The type used to represent an address as an array of bytes.
+[endsect]
 
- typedef boost::array< unsigned char, 16 > bytes_type;
 
 
+[section:overload2 ip::basic_endpoint::basic_endpoint (2 of 4 overloads)]
 
+Construct an endpoint using a port number, specified in the host's byte order. The IP address will be the any address (i.e. INADDR_ANY or in6addr_any). This constructor would typically be used for accepting new connections.
 
-[endsect]
+ basic_endpoint(
+ const InternetProtocol & protocol,
+ unsigned short port_num);
 
 
-[section:from_string ip::address_v6::from_string]
 
-Create an address from an IP address string.
+[heading Examples]
+
+To initialise an IPv4 TCP endpoint for port 1234, use:
 
- static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload1 from_string]``(
- const char * str);
+ boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 1234);
 
- static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload2 from_string]``(
- const char * str,
- boost::system::error_code & ec);
 
- static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload3 from_string]``(
- const std::string & str);
 
- static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload4 from_string]``(
- const std::string & str,
- boost::system::error_code & ec);
 
+To specify an IPv6 UDP endpoint for port 9876, use:
 
-[section:overload1 ip::address_v6::from_string (1 of 4 overloads)]
+ boost::asio::ip::udp::endpoint ep(boost::asio::ip::udp::v6(), 9876);
 
-Create an address from an IP address string.
 
- static address_v6 from_string(
- const char * str);
 
 
 
@@ -27108,13 +32142,13 @@
 
 
 
-[section:overload2 ip::address_v6::from_string (2 of 4 overloads)]
+[section:overload3 ip::basic_endpoint::basic_endpoint (3 of 4 overloads)]
 
-Create an address from an IP address string.
+Construct an endpoint using a port number and an IP address. This constructor may be used for accepting connections on a specific interface or for making a connection to a remote endpoint.
 
- static address_v6 from_string(
- const char * str,
- boost::system::error_code & ec);
+ basic_endpoint(
+ const boost::asio::ip::address & addr,
+ unsigned short port_num);
 
 
 
@@ -27122,76 +32156,73 @@
 
 
 
-[section:overload3 ip::address_v6::from_string (3 of 4 overloads)]
+[section:overload4 ip::basic_endpoint::basic_endpoint (4 of 4 overloads)]
 
-Create an address from an IP address string.
+Copy constructor.
 
- static address_v6 from_string(
- const std::string & str);
+ basic_endpoint(
+ const basic_endpoint & other);
 
 
 
 [endsect]
 
 
+[endsect]
 
-[section:overload4 ip::address_v6::from_string (4 of 4 overloads)]
-
-Create an address from an IP address string.
 
- static address_v6 from_string(
- const std::string & str,
- boost::system::error_code & ec);
+[section:capacity ip::basic_endpoint::capacity]
 
+Get the capacity of the endpoint in the native type.
 
+ std::size_t capacity() const;
 
-[endsect]
 
 
 [endsect]
 
 
-[section:is_link_local ip::address_v6::is_link_local]
-
-Determine whether the address is link local.
+[section:data ip::basic_endpoint::data]
 
- bool is_link_local() const;
+Get the underlying endpoint in the native type.
 
+ data_type * ``[link boost_asio.reference.ip__basic_endpoint.data.overload1 data]``();
 
+ const data_type * ``[link boost_asio.reference.ip__basic_endpoint.data.overload2 data]``() const;
 
-[endsect]
 
+[section:overload1 ip::basic_endpoint::data (1 of 2 overloads)]
 
+Get the underlying endpoint in the native type.
 
-[section:is_loopback ip::address_v6::is_loopback]
+ data_type * data();
 
-Determine whether the address is a loopback address.
 
- bool is_loopback() const;
 
+[endsect]
 
 
-[endsect]
 
+[section:overload2 ip::basic_endpoint::data (2 of 2 overloads)]
 
+Get the underlying endpoint in the native type.
 
-[section:is_multicast ip::address_v6::is_multicast]
+ const data_type * data() const;
 
-Determine whether the address is a multicast address.
 
- bool is_multicast() const;
 
+[endsect]
 
 
 [endsect]
 
 
+[section:data_type ip::basic_endpoint::data_type]
 
-[section:is_multicast_global ip::address_v6::is_multicast_global]
+The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer.
 
-Determine whether the address is a global multicast address.
+ typedef implementation_defined data_type;
 
- bool is_multicast_global() const;
 
 
 
@@ -27199,11 +32230,13 @@
 
 
 
-[section:is_multicast_link_local ip::address_v6::is_multicast_link_local]
+[section:operator_not__eq_ ip::basic_endpoint::operator!=]
 
-Determine whether the address is a link-local multicast address.
+Compare two endpoints for inequality.
 
- bool is_multicast_link_local() const;
+ friend bool operator!=(
+ const basic_endpoint< InternetProtocol > & e1,
+ const basic_endpoint< InternetProtocol > & e2);
 
 
 
@@ -27211,11 +32244,13 @@
 
 
 
-[section:is_multicast_node_local ip::address_v6::is_multicast_node_local]
+[section:operator_lt_ ip::basic_endpoint::operator<]
 
-Determine whether the address is a node-local multicast address.
+Compare endpoints for ordering.
 
- bool is_multicast_node_local() const;
+ friend bool operator<(
+ const basic_endpoint< InternetProtocol > & e1,
+ const basic_endpoint< InternetProtocol > & e2);
 
 
 
@@ -27223,23 +32258,32 @@
 
 
 
-[section:is_multicast_org_local ip::address_v6::is_multicast_org_local]
+[section:operator_lt__lt_ ip::basic_endpoint::operator<<]
 
-Determine whether the address is a org-local multicast address.
+Output an endpoint as a string.
 
- bool is_multicast_org_local() const;
+ std::basic_ostream< Elem, Traits > & operator<<(
+ std::basic_ostream< Elem, Traits > & os,
+ const basic_endpoint< InternetProtocol > & endpoint);
 
 
+Used to output a human-readable string for a specified endpoint.
 
-[endsect]
 
+[heading Parameters]
+
 
+[variablelist
+
+[[os][The output stream to which the string will be written.]]
 
-[section:is_multicast_site_local ip::address_v6::is_multicast_site_local]
+[[endpoint][The endpoint to be written.]]
 
-Determine whether the address is a site-local multicast address.
+]
 
- bool is_multicast_site_local() const;
+[heading Return Value]
+
+The output stream.
 
 
 
@@ -27247,11 +32291,12 @@
 
 
 
-[section:is_site_local ip::address_v6::is_site_local]
+[section:operator_eq_ ip::basic_endpoint::operator=]
 
-Determine whether the address is site local.
+Assign from another endpoint.
 
- bool is_site_local() const;
+ basic_endpoint & operator=(
+ const basic_endpoint & other);
 
 
 
@@ -27259,35 +32304,34 @@
 
 
 
-[section:is_unspecified ip::address_v6::is_unspecified]
+[section:operator_eq__eq_ ip::basic_endpoint::operator==]
 
-Determine whether the address is unspecified.
+Compare two endpoints for equality.
 
- bool is_unspecified() const;
+ friend bool operator==(
+ const basic_endpoint< InternetProtocol > & e1,
+ const basic_endpoint< InternetProtocol > & e2);
 
 
 
 [endsect]
 
 
+[section:port ip::basic_endpoint::port]
 
-[section:is_v4_compatible ip::address_v6::is_v4_compatible]
-
-Determine whether the address is an IPv4-compatible address.
-
- bool is_v4_compatible() const;
-
-
+Get the port associated with the endpoint. The port number is always in the host's byte order.
 
-[endsect]
+ unsigned short ``[link boost_asio.reference.ip__basic_endpoint.port.overload1 port]``() const;
 
+ void ``[link boost_asio.reference.ip__basic_endpoint.port.overload2 port]``(
+ unsigned short port_num);
 
 
-[section:is_v4_mapped ip::address_v6::is_v4_mapped]
+[section:overload1 ip::basic_endpoint::port (1 of 2 overloads)]
 
-Determine whether the address is a mapped IPv4 address.
+Get the port associated with the endpoint. The port number is always in the host's byte order.
 
- bool is_v4_mapped() const;
+ unsigned short port() const;
 
 
 
@@ -27295,25 +32339,26 @@
 
 
 
-[section:loopback ip::address_v6::loopback]
+[section:overload2 ip::basic_endpoint::port (2 of 2 overloads)]
 
-Obtain an address object that represents the loopback address.
+Set the port associated with the endpoint. The port number is always in the host's byte order.
 
- static address_v6 loopback();
+ void port(
+ unsigned short port_num);
 
 
 
 [endsect]
 
 
+[endsect]
+
 
-[section:operator_not__eq_ ip::address_v6::operator!=]
+[section:protocol ip::basic_endpoint::protocol]
 
-Compare two addresses for inequality.
+The protocol associated with the endpoint.
 
- friend bool operator!=(
- const address_v6 & a1,
- const address_v6 & a2);
+ protocol_type protocol() const;
 
 
 
@@ -27321,13 +32366,12 @@
 
 
 
-[section:operator_lt_ ip::address_v6::operator<]
+[section:protocol_type ip::basic_endpoint::protocol_type]
 
-Compare addresses for ordering.
+The protocol type associated with the endpoint.
+
+ typedef InternetProtocol protocol_type;
 
- friend bool operator<(
- const address_v6 & a1,
- const address_v6 & a2);
 
 
 
@@ -27335,35 +32379,24 @@
 
 
 
-[section:operator_lt__lt_ ip::address_v6::operator<<]
+[section:resize ip::basic_endpoint::resize]
 
-Output an address as a string.
+Set the underlying size of the endpoint in the native type.
 
- template<
- typename ``[link boost_asio.reference.Elem Elem]``,
- typename ``[link boost_asio.reference.Traits Traits]``>
- std::basic_ostream< Elem, Traits > & operator<<(
- std::basic_ostream< Elem, Traits > & os,
- const address_v6 & addr);
+ void resize(
+ std::size_t size);
 
 
-Used to output a human-readable string for a specified address.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[os][The output stream to which the string will be written.]]
 
-[[addr][The address to be written.]]
+[section:size ip::basic_endpoint::size]
 
-]
+Get the underlying size of the endpoint in the native type.
 
-[heading Return Value]
-
-The output stream.
+ std::size_t size() const;
 
 
 
@@ -27371,141 +32404,259 @@
 
 
 
-[section:operator_lt__eq_ ip::address_v6::operator<=]
-
-Compare addresses for ordering.
+[endsect]
 
- friend bool operator<=(
- const address_v6 & a1,
- const address_v6 & a2);
+[section:ip__basic_resolver ip::basic_resolver]
 
+Provides endpoint resolution functionality.
 
+ template<
+ typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``,
+ typename ``[link boost_asio.reference.ResolverService ResolverService]`` = resolver_service<InternetProtocol>>
+ class basic_resolver :
+ public basic_io_object< ResolverService >
 
-[endsect]
 
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
-[section:operator_eq_ ip::address_v6::operator=]
+ [[link boost_asio.reference.ip__basic_resolver.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
 
-Assign from another address.
+ [
 
- address_v6 & operator=(
- const address_v6 & other);
+ [[link boost_asio.reference.ip__basic_resolver.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
 
+ [
 
+ [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
+ [The iterator type. ]
+
+ ]
 
-[endsect]
+ [
 
+ [[link boost_asio.reference.ip__basic_resolver.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
 
+ [
 
-[section:operator_eq__eq_ ip::address_v6::operator==]
+ [[link boost_asio.reference.ip__basic_resolver.query [*query]]]
+ [The query type. ]
+
+ ]
 
-Compare two addresses for equality.
+ [
 
- friend bool operator==(
- const address_v6 & a1,
- const address_v6 & a2);
+ [[link boost_asio.reference.ip__basic_resolver.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
 
+]
 
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-[endsect]
+ [
+ [[link boost_asio.reference.ip__basic_resolver.async_resolve [*async_resolve]]]
+ [Asynchronously resolve a query to a list of entries. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.basic_resolver [*basic_resolver]]]
+ [Constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.cancel [*cancel]]]
+ [Cancel any asynchronous operations that are waiting on the resolver. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.resolve [*resolve]]]
+ [Resolve a query to a list of entries. ]
+ ]
+
+]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
 
-[section:operator_gt_ ip::address_v6::operator>]
+ [
+ [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
 
-Compare addresses for ordering.
+]
 
- friend bool operator>(
- const address_v6 & a1,
- const address_v6 & a2);
+The basic_resolver class template provides the ability to resolve a query to a list of endpoints.
 
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
-[endsect]
+[*Shared] [*objects:] Unsafe.
 
 
+[section:async_resolve ip::basic_resolver::async_resolve]
 
-[section:operator_gt__eq_ ip::address_v6::operator>=]
+Asynchronously resolve a query to a list of entries.
 
-Compare addresses for ordering.
+ template<
+ typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
+ void ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload1 async_resolve]``(
+ const query & q,
+ ResolveHandler handler);
 
- friend bool operator>=(
- const address_v6 & a1,
- const address_v6 & a2);
+ template<
+ typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
+ void ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload2 async_resolve]``(
+ const endpoint_type & e,
+ ResolveHandler handler);
 
 
+[section:overload1 ip::basic_resolver::async_resolve (1 of 2 overloads)]
 
-[endsect]
+Asynchronously resolve a query to a list of entries.
 
+ template<
+ typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
+ void async_resolve(
+ const query & q,
+ ResolveHandler handler);
 
-[section:scope_id ip::address_v6::scope_id]
 
-The scope ID of the address.
+This function is used to asynchronously resolve a query into a list of endpoint entries.
 
- unsigned long ``[link boost_asio.reference.ip__address_v6.scope_id.overload1 scope_id]``() const;
 
- void ``[link boost_asio.reference.ip__address_v6.scope_id.overload2 scope_id]``(
- unsigned long id);
+[heading Parameters]
+
 
+[variablelist
+
+[[q][A query object that determines what endpoints will be returned.]]
 
-[section:overload1 ip::address_v6::scope_id (1 of 2 overloads)]
+[[handler][The handler to be called when the resolve operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ resolver::iterator iterator // Forward-only iterator that can
+ // be used to traverse the list
+ // of endpoint entries.
+ );
 
-The scope ID of the address.
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
- unsigned long scope_id() const;
+]
 
+[heading Remarks]
+
+A default constructed iterator represents the end of the list.
 
-Returns the scope ID associated with the IPv6 address.
+A successful resolve operation is guaranteed to pass at least one entry to the handler.
 
 
 [endsect]
 
 
 
-[section:overload2 ip::address_v6::scope_id (2 of 2 overloads)]
+[section:overload2 ip::basic_resolver::async_resolve (2 of 2 overloads)]
 
-The scope ID of the address.
+Asynchronously resolve an endpoint to a list of entries.
 
- void scope_id(
- unsigned long id);
+ template<
+ typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
+ void async_resolve(
+ const endpoint_type & e,
+ ResolveHandler handler);
 
 
-Modifies the scope ID associated with the IPv6 address.
+This function is used to asynchronously resolve an endpoint into a list of endpoint entries.
 
 
-[endsect]
+[heading Parameters]
+
 
+[variablelist
+
+[[e][An endpoint object that determines what endpoints will be returned.]]
 
-[endsect]
+[[handler][The handler to be called when the resolve operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
+``
+ void handler(
+ const boost::system::error_code& error, // Result of operation.
+ resolver::iterator iterator // Forward-only iterator that can
+ // be used to traverse the list
+ // of endpoint entries.
+ );
 
+``
+Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
 
-[section:to_bytes ip::address_v6::to_bytes]
+]
 
-Get the address in bytes.
+[heading Remarks]
+
+A default constructed iterator represents the end of the list.
+
+A successful resolve operation is guaranteed to pass at least one entry to the handler.
 
- bytes_type to_bytes() const;
 
+[endsect]
 
 
 [endsect]
 
 
-[section:to_string ip::address_v6::to_string]
+[section:basic_resolver ip::basic_resolver::basic_resolver]
 
-Get the address as a string.
+Constructor.
 
- std::string ``[link boost_asio.reference.ip__address_v6.to_string.overload1 to_string]``() const;
+ basic_resolver(
+ boost::asio::io_service & io_service);
 
- std::string ``[link boost_asio.reference.ip__address_v6.to_string.overload2 to_string]``(
- boost::system::error_code & ec) const;
 
+This constructor creates a basic_resolver.
 
-[section:overload1 ip::address_v6::to_string (1 of 2 overloads)]
 
-Get the address as a string.
+[heading Parameters]
+
 
- std::string to_string() const;
+[variablelist
+
+[[io_service][The io\_service object that the resolver will use to dispatch handlers for any asynchronous operations performed on the timer. ]]
+
+]
 
 
 
@@ -27513,52 +32664,49 @@
 
 
 
-[section:overload2 ip::address_v6::to_string (2 of 2 overloads)]
-
-Get the address as a string.
+[section:cancel ip::basic_resolver::cancel]
 
- std::string to_string(
- boost::system::error_code & ec) const;
+Cancel any asynchronous operations that are waiting on the resolver.
 
+ void cancel();
 
 
-[endsect]
+This function forces the completion of any pending asynchronous operations on the host resolver. The handler for each cancelled operation will be invoked with the boost::asio::error::operation\_aborted error code.
 
 
 [endsect]
 
 
-[section:to_v4 ip::address_v6::to_v4]
 
-Converts an IPv4-mapped or IPv4-compatible address to an IPv4 address.
+[section:endpoint_type ip::basic_resolver::endpoint_type]
 
- address_v4 to_v4() const;
+The endpoint type.
 
+ typedef InternetProtocol::endpoint endpoint_type;
 
 
-[endsect]
 
 
+[endsect]
 
-[section:v4_compatible ip::address_v6::v4_compatible]
 
-Create an IPv4-compatible IPv6 address.
 
- static address_v6 v4_compatible(
- const address_v4 & addr);
+[section:get_io_service ip::basic_resolver::get_io_service]
 
 
+['Inherited from basic_io_object.]
 
-[endsect]
+Get the io_service associated with the object.
 
+ boost::asio::io_service & get_io_service();
 
 
-[section:v4_mapped ip::address_v6::v4_mapped]
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
 
-Create an IPv4-mapped IPv6 address.
 
- static address_v6 v4_mapped(
- const address_v4 & addr);
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
 
 
 
@@ -27566,146 +32714,53 @@
 
 
 
-[endsect]
+[section:implementation ip::basic_resolver::implementation]
 
-[section:ip__basic_endpoint ip::basic_endpoint]
 
-Describes an endpoint for a version-independent IP socket.
+['Inherited from basic_io_object.]
 
- template<
- typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
- class basic_endpoint
+The underlying implementation of the I/O object.
 
+ implementation_type implementation;
 
-[heading Types]
-[table
- [[Name][Description]]
 
- [
 
- [[link boost_asio.reference.ip__basic_endpoint.data_type [*data_type]]]
- [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
-
- ]
+[endsect]
 
- [
 
- [[link boost_asio.reference.ip__basic_endpoint.protocol_type [*protocol_type]]]
- [The protocol type associated with the endpoint. ]
-
- ]
 
-]
+[section:implementation_type ip::basic_resolver::implementation_type]
 
-[heading Member Functions]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
- [Get the IP address associated with the endpoint. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
- [Default constructor. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.capacity [*capacity]]]
- [Get the capacity of the endpoint in the native type. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.data [*data]]]
- [Get the underlying endpoint in the native type. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.operator_eq_ [*operator=]]]
- [Assign from another endpoint. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.port [*port]]]
- [Get the port associated with the endpoint. The port number is always in the host's byte order. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.protocol [*protocol]]]
- [The protocol associated with the endpoint. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.resize [*resize]]]
- [Set the underlying size of the endpoint in the native type. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.size [*size]]]
- [Get the underlying size of the endpoint in the native type. ]
- ]
-
-]
+['Inherited from basic_io_object.]
 
-[heading Friends]
-[table
- [[Name][Description]]
+The underlying implementation type of I/O object.
 
- [
- [[link boost_asio.reference.ip__basic_endpoint.operator_not__eq_ [*operator!=]]]
- [Compare two endpoints for inequality. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.operator_lt_ [*operator<]]]
- [Compare endpoints for ordering. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
- [Compare two endpoints for equality. ]
- ]
-
-]
+ typedef service_type::implementation_type implementation_type;
 
-[heading Related Functions]
-[table
- [[Name][Description]]
 
- [
- [[link boost_asio.reference.ip__basic_endpoint.operator_lt__lt_ [*operator<<]]]
- [Output an endpoint as a string. ]
- ]
-
-]
 
-The
-[link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] class template describes an endpoint that may be associated with a particular socket.
 
+[endsect]
 
-[heading Thread Safety]
-
-[*Distinct] [*objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
 
+[section:io_service ip::basic_resolver::io_service]
 
-[section:address ip::basic_endpoint::address]
 
-Get the IP address associated with the endpoint.
+['Inherited from basic_io_object.]
 
- boost::asio::ip::address ``[link boost_asio.reference.ip__basic_endpoint.address.overload1 address]``() const;
+(Deprecated: use get_io_service().) Get the io_service associated with the object.
 
- void ``[link boost_asio.reference.ip__basic_endpoint.address.overload2 address]``(
- const boost::asio::ip::address & addr);
+ boost::asio::io_service & io_service();
 
 
-[section:overload1 ip::basic_endpoint::address (1 of 2 overloads)]
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
 
-Get the IP address associated with the endpoint.
 
- boost::asio::ip::address address() const;
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
 
 
 
@@ -27713,271 +32768,350 @@
 
 
 
-[section:overload2 ip::basic_endpoint::address (2 of 2 overloads)]
+[section:iterator ip::basic_resolver::iterator]
 
-Set the IP address associated with the endpoint.
+The iterator type.
+
+ typedef InternetProtocol::resolver_iterator iterator;
 
- void address(
- const boost::asio::ip::address & addr);
 
 
 
 [endsect]
 
 
-[endsect]
 
-[section:basic_endpoint ip::basic_endpoint::basic_endpoint]
+[section:protocol_type ip::basic_resolver::protocol_type]
 
-Default constructor.
+The protocol type.
 
- ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
+ typedef InternetProtocol protocol_type;
 
- ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
- const InternetProtocol & protocol,
- unsigned short port_num);
 
- ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
- const boost::asio::ip::address & addr,
- unsigned short port_num);
 
- ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
- const basic_endpoint & other);
 
+[endsect]
 
-[section:overload1 ip::basic_endpoint::basic_endpoint (1 of 4 overloads)]
 
-Default constructor.
 
- basic_endpoint();
+[section:query ip::basic_resolver::query]
 
+The query type.
 
+ typedef InternetProtocol::resolver_query query;
 
-[endsect]
 
 
 
-[section:overload2 ip::basic_endpoint::basic_endpoint (2 of 4 overloads)]
+[endsect]
 
-Construct an endpoint using a port number, specified in the host's byte order. The IP address will be the any address (i.e. INADDR_ANY or in6addr_any). This constructor would typically be used for accepting new connections.
 
- basic_endpoint(
- const InternetProtocol & protocol,
- unsigned short port_num);
+[section:resolve ip::basic_resolver::resolve]
+
+Resolve a query to a list of entries.
 
+ iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload1 resolve]``(
+ const query & q);
 
+ iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload2 resolve]``(
+ const query & q,
+ boost::system::error_code & ec);
 
-[heading Examples]
-
-To initialise an IPv4 TCP endpoint for port 1234, use:
+ iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload3 resolve]``(
+ const endpoint_type & e);
 
- boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 1234);
+ iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload4 resolve]``(
+ const endpoint_type & e,
+ boost::system::error_code & ec);
 
 
+[section:overload1 ip::basic_resolver::resolve (1 of 4 overloads)]
 
+Resolve a query to a list of entries.
 
-To specify an IPv6 UDP endpoint for port 9876, use:
+ iterator resolve(
+ const query & q);
 
- boost::asio::ip::udp::endpoint ep(boost::asio::ip::udp::v6(), 9876);
 
+This function is used to resolve a query into a list of endpoint entries.
 
 
+[heading Parameters]
+
 
+[variablelist
+
+[[q][A query object that determines what endpoints will be returned.]]
 
-[endsect]
+]
 
+[heading Return Value]
+
+A forward-only iterator that can be used to traverse the list of endpoint entries.
 
+[heading Exceptions]
+
 
-[section:overload3 ip::basic_endpoint::basic_endpoint (3 of 4 overloads)]
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
-Construct an endpoint using a port number and an IP address. This constructor may be used for accepting connections on a specific interface or for making a connection to a remote endpoint.
+]
 
- basic_endpoint(
- const boost::asio::ip::address & addr,
- unsigned short port_num);
+[heading Remarks]
+
+A default constructed iterator represents the end of the list.
 
+A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
 
-[section:overload4 ip::basic_endpoint::basic_endpoint (4 of 4 overloads)]
+[section:overload2 ip::basic_resolver::resolve (2 of 4 overloads)]
 
-Copy constructor.
+Resolve a query to a list of entries.
 
- basic_endpoint(
- const basic_endpoint & other);
+ iterator resolve(
+ const query & q,
+ boost::system::error_code & ec);
 
 
+This function is used to resolve a query into a list of endpoint entries.
 
-[endsect]
 
+[heading Parameters]
+
 
-[endsect]
+[variablelist
+
+[[q][A query object that determines what endpoints will be returned.]]
 
+[[ec][Set to indicate what error occurred, if any.]]
 
-[section:capacity ip::basic_endpoint::capacity]
+]
 
-Get the capacity of the endpoint in the native type.
+[heading Return Value]
+
+A forward-only iterator that can be used to traverse the list of endpoint entries. Returns a default constructed iterator if an error occurs.
 
- std::size_t capacity() const;
+[heading Remarks]
+
+A default constructed iterator represents the end of the list.
 
+A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
-[section:data ip::basic_endpoint::data]
-
-Get the underlying endpoint in the native type.
 
- data_type * ``[link boost_asio.reference.ip__basic_endpoint.data.overload1 data]``();
+[section:overload3 ip::basic_resolver::resolve (3 of 4 overloads)]
 
- const data_type * ``[link boost_asio.reference.ip__basic_endpoint.data.overload2 data]``() const;
+Resolve an endpoint to a list of entries.
 
+ iterator resolve(
+ const endpoint_type & e);
 
-[section:overload1 ip::basic_endpoint::data (1 of 2 overloads)]
 
-Get the underlying endpoint in the native type.
+This function is used to resolve an endpoint into a list of endpoint entries.
 
- data_type * data();
 
+[heading Parameters]
+
 
+[variablelist
+
+[[e][An endpoint object that determines what endpoints will be returned.]]
 
-[endsect]
+]
 
+[heading Return Value]
+
+A forward-only iterator that can be used to traverse the list of endpoint entries.
 
+[heading Exceptions]
+
 
-[section:overload2 ip::basic_endpoint::data (2 of 2 overloads)]
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
 
-Get the underlying endpoint in the native type.
+]
 
- const data_type * data() const;
+[heading Remarks]
+
+A default constructed iterator represents the end of the list.
 
+A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
-[endsect]
-
 
-[section:data_type ip::basic_endpoint::data_type]
+[section:overload4 ip::basic_resolver::resolve (4 of 4 overloads)]
 
-The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer.
+Resolve an endpoint to a list of entries.
 
- typedef implementation_defined data_type;
+ iterator resolve(
+ const endpoint_type & e,
+ boost::system::error_code & ec);
 
 
+This function is used to resolve an endpoint into a list of endpoint entries.
 
 
-[endsect]
+[heading Parameters]
+
 
+[variablelist
+
+[[e][An endpoint object that determines what endpoints will be returned.]]
 
+[[ec][Set to indicate what error occurred, if any.]]
 
-[section:operator_not__eq_ ip::basic_endpoint::operator!=]
+]
 
-Compare two endpoints for inequality.
+[heading Return Value]
+
+A forward-only iterator that can be used to traverse the list of endpoint entries. Returns a default constructed iterator if an error occurs.
 
- friend bool operator!=(
- const basic_endpoint< InternetProtocol > & e1,
- const basic_endpoint< InternetProtocol > & e2);
+[heading Remarks]
+
+A default constructed iterator represents the end of the list.
 
+A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
+[endsect]
 
-[section:operator_lt_ ip::basic_endpoint::operator<]
 
-Compare endpoints for ordering.
+[section:service ip::basic_resolver::service]
 
- friend bool operator<(
- const basic_endpoint< InternetProtocol > & e1,
- const basic_endpoint< InternetProtocol > & e2);
 
+['Inherited from basic_io_object.]
 
+The service associated with the I/O object.
 
-[endsect]
+ service_type & service;
 
 
 
-[section:operator_lt__lt_ ip::basic_endpoint::operator<<]
+[endsect]
 
-Output an endpoint as a string.
 
- std::basic_ostream< Elem, Traits > & operator<<(
- std::basic_ostream< Elem, Traits > & os,
- const basic_endpoint< InternetProtocol > & endpoint);
 
+[section:service_type ip::basic_resolver::service_type]
 
-Used to output a human-readable string for a specified endpoint.
 
+['Inherited from basic_io_object.]
 
-[heading Parameters]
-
+The type of the service that will be used to provide I/O operations.
 
-[variablelist
-
-[[os][The output stream to which the string will be written.]]
+ typedef ResolverService service_type;
 
-[[endpoint][The endpoint to be written.]]
 
-]
 
-[heading Return Value]
-
-The output stream.
+
+[endsect]
 
 
 
 [endsect]
 
+[section:ip__basic_resolver_entry ip::basic_resolver_entry]
 
+An entry produced by a resolver.
 
-[section:operator_eq_ ip::basic_endpoint::operator=]
+ template<
+ typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
+ class basic_resolver_entry
 
-Assign from another endpoint.
 
- basic_endpoint & operator=(
- const basic_endpoint & other);
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
+ [[link boost_asio.reference.ip__basic_resolver_entry.endpoint_type [*endpoint_type]]]
+ [The endpoint type associated with the endpoint entry. ]
+
+ ]
 
-[endsect]
+ [
 
+ [[link boost_asio.reference.ip__basic_resolver_entry.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint entry. ]
+
+ ]
 
+]
 
-[section:operator_eq__eq_ ip::basic_endpoint::operator==]
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-Compare two endpoints for equality.
+ [
+ [[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry [*basic_resolver_entry]]]
+ [Default constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_entry.endpoint [*endpoint]]]
+ [Get the endpoint associated with the entry. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_entry.host_name [*host_name]]]
+ [Get the host name associated with the entry. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_entry.operator_endpoint_type [*operator endpoint_type]]]
+ [Convert to the endpoint associated with the entry. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_entry.service_name [*service_name]]]
+ [Get the service name associated with the entry. ]
+ ]
+
+]
 
- friend bool operator==(
- const basic_endpoint< InternetProtocol > & e1,
- const basic_endpoint< InternetProtocol > & e2);
+The
+[link boost_asio.reference.ip__basic_resolver_entry ip::basic_resolver_entry] class template describes an entry as returned by a resolver.
 
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
-[endsect]
+[*Shared] [*objects:] Unsafe.
 
 
-[section:port ip::basic_endpoint::port]
+[section:basic_resolver_entry ip::basic_resolver_entry::basic_resolver_entry]
 
-Get the port associated with the endpoint. The port number is always in the host's byte order.
+Default constructor.
 
- unsigned short ``[link boost_asio.reference.ip__basic_endpoint.port.overload1 port]``() const;
+ ``[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload1 basic_resolver_entry]``();
 
- void ``[link boost_asio.reference.ip__basic_endpoint.port.overload2 port]``(
- unsigned short port_num);
+ ``[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload2 basic_resolver_entry]``(
+ const endpoint_type & endpoint,
+ const std::string & host_name,
+ const std::string & service_name);
 
 
-[section:overload1 ip::basic_endpoint::port (1 of 2 overloads)]
+[section:overload1 ip::basic_resolver_entry::basic_resolver_entry (1 of 2 overloads)]
 
-Get the port associated with the endpoint. The port number is always in the host's byte order.
+Default constructor.
 
- unsigned short port() const;
+ basic_resolver_entry();
 
 
 
@@ -27985,12 +33119,14 @@
 
 
 
-[section:overload2 ip::basic_endpoint::port (2 of 2 overloads)]
+[section:overload2 ip::basic_resolver_entry::basic_resolver_entry (2 of 2 overloads)]
 
-Set the port associated with the endpoint. The port number is always in the host's byte order.
+Construct with specified endpoint, host name and service name.
 
- void port(
- unsigned short port_num);
+ basic_resolver_entry(
+ const endpoint_type & endpoint,
+ const std::string & host_name,
+ const std::string & service_name);
 
 
 
@@ -28000,11 +33136,11 @@
 [endsect]
 
 
-[section:protocol ip::basic_endpoint::protocol]
+[section:endpoint ip::basic_resolver_entry::endpoint]
 
-The protocol associated with the endpoint.
+Get the endpoint associated with the entry.
 
- protocol_type protocol() const;
+ endpoint_type endpoint() const;
 
 
 
@@ -28012,11 +33148,11 @@
 
 
 
-[section:protocol_type ip::basic_endpoint::protocol_type]
+[section:endpoint_type ip::basic_resolver_entry::endpoint_type]
 
-The protocol type associated with the endpoint.
+The endpoint type associated with the endpoint entry.
 
- typedef InternetProtocol protocol_type;
+ typedef InternetProtocol::endpoint endpoint_type;
 
 
 
@@ -28025,12 +33161,11 @@
 
 
 
-[section:resize ip::basic_endpoint::resize]
+[section:host_name ip::basic_resolver_entry::host_name]
 
-Set the underlying size of the endpoint in the native type.
+Get the host name associated with the entry.
 
- void resize(
- std::size_t size);
+ std::string host_name() const;
 
 
 
@@ -28038,11 +33173,11 @@
 
 
 
-[section:size ip::basic_endpoint::size]
+[section:operator_endpoint_type ip::basic_resolver_entry::operator endpoint_type]
 
-Get the underlying size of the endpoint in the native type.
+Convert to the endpoint associated with the entry.
 
- std::size_t size() const;
+ operator endpoint_type() const;
 
 
 
@@ -28050,120 +33185,67 @@
 
 
 
-[endsect]
+[section:protocol_type ip::basic_resolver_entry::protocol_type]
 
-[section:ip__basic_resolver ip::basic_resolver]
+The protocol type associated with the endpoint entry.
 
-Provides endpoint resolution functionality.
+ typedef InternetProtocol protocol_type;
 
- template<
- typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``,
- typename ``[link boost_asio.reference.ResolverService ResolverService]`` = resolver_service<InternetProtocol>>
- class basic_resolver :
- public basic_io_object< ResolverService >
 
 
-[heading Types]
-[table
- [[Name][Description]]
 
- [
+[endsect]
 
- [[link boost_asio.reference.ip__basic_resolver.endpoint_type [*endpoint_type]]]
- [The endpoint type. ]
-
- ]
 
- [
 
- [[link boost_asio.reference.ip__basic_resolver.implementation_type [*implementation_type]]]
- [The underlying implementation type of I/O object. ]
-
- ]
+[section:service_name ip::basic_resolver_entry::service_name]
 
- [
+Get the service name associated with the entry.
 
- [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
- [The iterator type. ]
-
- ]
+ std::string service_name() const;
 
- [
 
- [[link boost_asio.reference.ip__basic_resolver.protocol_type [*protocol_type]]]
- [The protocol type. ]
-
- ]
 
- [
+[endsect]
 
- [[link boost_asio.reference.ip__basic_resolver.query [*query]]]
- [The query type. ]
-
- ]
 
- [
 
- [[link boost_asio.reference.ip__basic_resolver.service_type [*service_type]]]
- [The type of the service that will be used to provide I/O operations. ]
-
- ]
+[endsect]
+
+[section:ip__basic_resolver_iterator ip::basic_resolver_iterator]
+
+An iterator over the entries produced by a resolver.
+
+ template<
+ typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
+ class basic_resolver_iterator
 
-]
 
 [heading Member Functions]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__basic_resolver.async_resolve [*async_resolve]]]
- [Asynchronously resolve a query to a list of entries. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_resolver.basic_resolver [*basic_resolver]]]
- [Constructor. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_resolver.cancel [*cancel]]]
- [Cancel any asynchronous operations that are waiting on the resolver. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_resolver.get_io_service [*get_io_service]]]
- [Get the io_service associated with the object. ]
- ]
-
- [
- [[link boost_asio.reference.ip__basic_resolver.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ [[link boost_asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]]
+ [Default constructor creates an end iterator. ]
   ]
   
   [
- [[link boost_asio.reference.ip__basic_resolver.resolve [*resolve]]]
- [Resolve a query to a list of entries. ]
+ [[link boost_asio.reference.ip__basic_resolver_iterator.create [*create]]]
+ [Create an iterator from an addrinfo list returned by getaddrinfo. ]
   ]
   
 ]
 
-[heading Protected Data Members]
-[table
- [[Name][Description]]
+The
+[link boost_asio.reference.ip__basic_resolver_iterator ip::basic_resolver_iterator] class template is used to define iterators over the results returned by a resolver.
 
- [
- [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
- [The underlying implementation of the I/O object. ]
- ]
+The iterator's value\_type, obtained when the iterator is dereferenced, is:
+
+ const basic_resolver_entry<InternetProtocol>
 
- [
- [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
- [The service associated with the I/O object. ]
- ]
 
-]
 
-The basic_resolver class template provides the ability to resolve a query to a list of endpoints.
 
 
 [heading Thread Safety]
@@ -28173,186 +33255,230 @@
 [*Shared] [*objects:] Unsafe.
 
 
-[section:async_resolve ip::basic_resolver::async_resolve]
-
-Asynchronously resolve a query to a list of entries.
 
- template<
- typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload1 async_resolve]``(
- const query & q,
- ResolveHandler handler);
+[section:basic_resolver_iterator ip::basic_resolver_iterator::basic_resolver_iterator]
 
- template<
- typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void ``[link boost_asio.reference.ip__basic_resolver.async_resolve.overload2 async_resolve]``(
- const endpoint_type & e,
- ResolveHandler handler);
+Default constructor creates an end iterator.
 
+ basic_resolver_iterator();
 
-[section:overload1 ip::basic_resolver::async_resolve (1 of 2 overloads)]
 
-Asynchronously resolve a query to a list of entries.
 
- template<
- typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void async_resolve(
- const query & q,
- ResolveHandler handler);
+[endsect]
 
 
-This function is used to asynchronously resolve a query into a list of endpoint entries.
+[section:create ip::basic_resolver_iterator::create]
 
+Create an iterator from an addrinfo list returned by getaddrinfo.
 
-[heading Parameters]
-
+ static basic_resolver_iterator ``[link boost_asio.reference.ip__basic_resolver_iterator.create.overload1 create]``(
+ boost::asio::detail::addrinfo_type * address_info,
+ const std::string & host_name,
+ const std::string & service_name);
 
-[variablelist
-
-[[q][A query object that determines what endpoints will be returned.]]
+ static basic_resolver_iterator ``[link boost_asio.reference.ip__basic_resolver_iterator.create.overload2 create]``(
+ const typename InternetProtocol::endpoint & endpoint,
+ const std::string & host_name,
+ const std::string & service_name);
 
-[[handler][The handler to be called when the resolve operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
-``
- void handler(
- const boost::system::error_code& error, // Result of operation.
- resolver::iterator iterator // Forward-only iterator that can
- // be used to traverse the list
- // of endpoint entries.
- );
 
-``
-Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
+[section:overload1 ip::basic_resolver_iterator::create (1 of 2 overloads)]
 
-]
+Create an iterator from an addrinfo list returned by getaddrinfo.
 
-[heading Remarks]
-
-A default constructed iterator represents the end of the list.
+ static basic_resolver_iterator create(
+ boost::asio::detail::addrinfo_type * address_info,
+ const std::string & host_name,
+ const std::string & service_name);
 
-A successful resolve operation is guaranteed to pass at least one entry to the handler.
 
 
 [endsect]
 
 
 
-[section:overload2 ip::basic_resolver::async_resolve (2 of 2 overloads)]
+[section:overload2 ip::basic_resolver_iterator::create (2 of 2 overloads)]
 
-Asynchronously resolve an endpoint to a list of entries.
+Create an iterator from an endpoint, host name and service name.
 
- template<
- typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
- void async_resolve(
- const endpoint_type & e,
- ResolveHandler handler);
+ static basic_resolver_iterator create(
+ const typename InternetProtocol::endpoint & endpoint,
+ const std::string & host_name,
+ const std::string & service_name);
 
 
-This function is used to asynchronously resolve an endpoint into a list of endpoint entries.
 
+[endsect]
 
-[heading Parameters]
-
 
-[variablelist
-
-[[e][An endpoint object that determines what endpoints will be returned.]]
+[endsect]
 
-[[handler][The handler to be called when the resolve operation completes. Copies will be made of the handler as required. The function signature of the handler must be:
-``
- void handler(
- const boost::system::error_code& error, // Result of operation.
- resolver::iterator iterator // Forward-only iterator that can
- // be used to traverse the list
- // of endpoint entries.
- );
 
-``
-Regardless of whether the asynchronous operation completes immediately or not, the handler will not be invoked from within this function. Invocation of the handler will be performed in a manner equivalent to using boost::asio::io\_service::post().]]
+[endsect]
 
-]
+[section:ip__basic_resolver_query ip::basic_resolver_query]
 
-[heading Remarks]
-
-A default constructed iterator represents the end of the list.
+An query to be passed to a resolver.
 
-A successful resolve operation is guaranteed to pass at least one entry to the handler.
+ template<
+ typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
+ class basic_resolver_query :
+ public ip::resolver_query_base
 
 
-[endsect]
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
-[endsect]
+ [[link boost_asio.reference.ip__basic_resolver_query.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint query. ]
+
+ ]
+
+]
+
+[heading Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query [*basic_resolver_query]]]
+ [Construct with specified service name for any protocol. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.hints [*hints]]]
+ [Get the hints associated with the query. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.host_name [*host_name]]]
+ [Get the host name associated with the query. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.service_name [*service_name]]]
+ [Get the service name associated with the query. ]
+ ]
+
+]
+
+[heading Data Members]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.address_configured [*address_configured]]]
+ [Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system. ]
+ ]
 
-[section:basic_resolver ip::basic_resolver::basic_resolver]
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]]
+ [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
+ ]
 
-Constructor.
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]]
+ [Determine the canonical name of the host specified in the query. ]
+ ]
 
- basic_resolver(
- boost::asio::io_service & io_service);
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.numeric_host [*numeric_host]]]
+ [Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted. ]
+ ]
 
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.numeric_service [*numeric_service]]]
+ [Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. ]
+ ]
 
-This constructor creates a basic_resolver.
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.passive [*passive]]]
+ [Indicate that returned endpoint is intended for use as a locally bound socket endpoint. ]
+ ]
 
+ [
+ [[link boost_asio.reference.ip__basic_resolver_query.v4_mapped [*v4_mapped]]]
+ [If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. ]
+ ]
 
-[heading Parameters]
-
+]
 
-[variablelist
-
-[[io_service][The io\_service object that the resolver will use to dispatch handlers for any asynchronous operations performed on the timer. ]]
+The
+[link boost_asio.reference.ip__basic_resolver_query ip::basic_resolver_query] class template describes a query that can be passed to a resolver.
 
-]
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
+[*Shared] [*objects:] Unsafe.
 
-[endsect]
 
 
+[section:address_configured ip::basic_resolver_query::address_configured]
 
-[section:cancel ip::basic_resolver::cancel]
 
-Cancel any asynchronous operations that are waiting on the resolver.
+['Inherited from ip::resolver_query_base.]
 
- void cancel();
+Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system.
 
+ static const int address_configured = implementation_defined;
 
-This function forces the completion of any pending asynchronous operations on the host resolver. The handler for each cancelled operation will be invoked with the boost::asio::error::operation\_aborted error code.
 
 
 [endsect]
 
 
 
-[section:endpoint_type ip::basic_resolver::endpoint_type]
+[section:all_matching ip::basic_resolver_query::all_matching]
 
-The endpoint type.
 
- typedef InternetProtocol::endpoint endpoint_type;
+['Inherited from ip::resolver_query_base.]
 
+If used with v4_mapped, return all matching IPv6 and IPv4 addresses.
+
+ static const int all_matching = implementation_defined;
 
 
 
 [endsect]
 
 
+[section:basic_resolver_query ip::basic_resolver_query::basic_resolver_query]
 
-[section:get_io_service ip::basic_resolver::get_io_service]
+Construct with specified service name for any protocol.
 
+ ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload1 basic_resolver_query]``(
+ const std::string & service_name,
+ int flags = passive|address_configured);
 
-['Inherited from basic_io_object.]
+ ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload2 basic_resolver_query]``(
+ const protocol_type & protocol,
+ const std::string & service_name,
+ int flags = passive|address_configured);
 
-Get the io_service associated with the object.
+ ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload3 basic_resolver_query]``(
+ const std::string & host_name,
+ const std::string & service_name,
+ int flags = address_configured);
 
- boost::asio::io_service & get_io_service();
+ ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload4 basic_resolver_query]``(
+ const protocol_type & protocol,
+ const std::string & host_name,
+ const std::string & service_name,
+ int flags = address_configured);
 
 
-This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+[section:overload1 ip::basic_resolver_query::basic_resolver_query (1 of 4 overloads)]
 
+Construct with specified service name for any protocol.
 
-[heading Return Value]
-
-A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+ basic_resolver_query(
+ const std::string & service_name,
+ int flags = passive|address_configured);
 
 
 
@@ -28360,14 +33486,14 @@
 
 
 
-[section:implementation ip::basic_resolver::implementation]
-
-
-['Inherited from basic_io_object.]
+[section:overload2 ip::basic_resolver_query::basic_resolver_query (2 of 4 overloads)]
 
-The underlying implementation of the I/O object.
+Construct with specified service name for a given protocol.
 
- implementation_type implementation;
+ basic_resolver_query(
+ const protocol_type & protocol,
+ const std::string & service_name,
+ int flags = passive|address_configured);
 
 
 
@@ -28375,15 +33501,14 @@
 
 
 
-[section:implementation_type ip::basic_resolver::implementation_type]
-
-
-['Inherited from basic_io_object.]
-
-The underlying implementation type of I/O object.
+[section:overload3 ip::basic_resolver_query::basic_resolver_query (3 of 4 overloads)]
 
- typedef service_type::implementation_type implementation_type;
+Construct with specified host name and service name for any protocol.
 
+ basic_resolver_query(
+ const std::string & host_name,
+ const std::string & service_name,
+ int flags = address_configured);
 
 
 
@@ -28391,35 +33516,32 @@
 
 
 
-[section:io_service ip::basic_resolver::io_service]
-
-
-['Inherited from basic_io_object.]
-
-(Deprecated: use get_io_service().) Get the io_service associated with the object.
-
- boost::asio::io_service & io_service();
+[section:overload4 ip::basic_resolver_query::basic_resolver_query (4 of 4 overloads)]
 
+Construct with specified host name and service name for a given protocol.
 
-This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+ basic_resolver_query(
+ const protocol_type & protocol,
+ const std::string & host_name,
+ const std::string & service_name,
+ int flags = address_configured);
 
 
-[heading Return Value]
-
-A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
 
+[endsect]
 
 
 [endsect]
 
 
+[section:canonical_name ip::basic_resolver_query::canonical_name]
 
-[section:iterator ip::basic_resolver::iterator]
 
-The iterator type.
+['Inherited from ip::resolver_query_base.]
 
- typedef InternetProtocol::resolver_iterator iterator;
+Determine the canonical name of the host specified in the query.
 
+ static const int canonical_name = implementation_defined;
 
 
 
@@ -28427,12 +33549,11 @@
 
 
 
-[section:protocol_type ip::basic_resolver::protocol_type]
-
-The protocol type.
+[section:hints ip::basic_resolver_query::hints]
 
- typedef InternetProtocol protocol_type;
+Get the hints associated with the query.
 
+ const boost::asio::detail::addrinfo_type & hints() const;
 
 
 
@@ -28440,211 +33561,120 @@
 
 
 
-[section:query ip::basic_resolver::query]
-
-The query type.
+[section:host_name ip::basic_resolver_query::host_name]
 
- typedef InternetProtocol::resolver_query query;
+Get the host name associated with the query.
 
+ std::string host_name() const;
 
 
 
 [endsect]
 
 
-[section:resolve ip::basic_resolver::resolve]
-
-Resolve a query to a list of entries.
-
- iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload1 resolve]``(
- const query & q);
-
- iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload2 resolve]``(
- const query & q,
- boost::system::error_code & ec);
-
- iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload3 resolve]``(
- const endpoint_type & e);
-
- iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload4 resolve]``(
- const endpoint_type & e,
- boost::system::error_code & ec);
 
+[section:numeric_host ip::basic_resolver_query::numeric_host]
 
-[section:overload1 ip::basic_resolver::resolve (1 of 4 overloads)]
 
-Resolve a query to a list of entries.
+['Inherited from ip::resolver_query_base.]
 
- iterator resolve(
- const query & q);
+Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted.
 
+ static const int numeric_host = implementation_defined;
 
-This function is used to resolve a query into a list of endpoint entries.
 
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[q][A query object that determines what endpoints will be returned.]]
 
-]
 
-[heading Return Value]
-
-A forward-only iterator that can be used to traverse the list of endpoint entries.
+[section:numeric_service ip::basic_resolver_query::numeric_service]
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
+['Inherited from ip::resolver_query_base.]
 
-]
+Service name should be treated as a numeric string defining a port number and no name resolution should be attempted.
 
-[heading Remarks]
-
-A default constructed iterator represents the end of the list.
+ static const int numeric_service = implementation_defined;
 
-A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
 
-[section:overload2 ip::basic_resolver::resolve (2 of 4 overloads)]
-
-Resolve a query to a list of entries.
-
- iterator resolve(
- const query & q,
- boost::system::error_code & ec);
-
-
-This function is used to resolve a query into a list of endpoint entries.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[q][A query object that determines what endpoints will be returned.]]
+[section:passive ip::basic_resolver_query::passive]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+['Inherited from ip::resolver_query_base.]
 
-[heading Return Value]
-
-A forward-only iterator that can be used to traverse the list of endpoint entries. Returns a default constructed iterator if an error occurs.
+Indicate that returned endpoint is intended for use as a locally bound socket endpoint.
 
-[heading Remarks]
-
-A default constructed iterator represents the end of the list.
+ static const int passive = implementation_defined;
 
-A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
 
-[section:overload3 ip::basic_resolver::resolve (3 of 4 overloads)]
-
-Resolve an endpoint to a list of entries.
-
- iterator resolve(
- const endpoint_type & e);
+[section:protocol_type ip::basic_resolver_query::protocol_type]
 
+The protocol type associated with the endpoint query.
 
-This function is used to resolve an endpoint into a list of endpoint entries.
+ typedef InternetProtocol protocol_type;
 
 
-[heading Parameters]
-
 
-[variablelist
-
-[[e][An endpoint object that determines what endpoints will be returned.]]
 
-]
+[endsect]
 
-[heading Return Value]
-
-A forward-only iterator that can be used to traverse the list of endpoint entries.
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure.]]
+[section:service_name ip::basic_resolver_query::service_name]
 
-]
+Get the service name associated with the query.
 
-[heading Remarks]
-
-A default constructed iterator represents the end of the list.
+ std::string service_name() const;
 
-A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
 
 
-[section:overload4 ip::basic_resolver::resolve (4 of 4 overloads)]
-
-Resolve an endpoint to a list of entries.
-
- iterator resolve(
- const endpoint_type & e,
- boost::system::error_code & ec);
-
-
-This function is used to resolve an endpoint into a list of endpoint entries.
+[section:v4_mapped ip::basic_resolver_query::v4_mapped]
 
 
-[heading Parameters]
-
+['Inherited from ip::resolver_query_base.]
 
-[variablelist
-
-[[e][An endpoint object that determines what endpoints will be returned.]]
+If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses.
 
-[[ec][Set to indicate what error occurred, if any.]]
+ static const int v4_mapped = implementation_defined;
 
-]
 
-[heading Return Value]
-
-A forward-only iterator that can be used to traverse the list of endpoint entries. Returns a default constructed iterator if an error occurs.
 
-[heading Remarks]
-
-A default constructed iterator represents the end of the list.
+[endsect]
 
-A successful call to this function is guaranteed to return at least one entry.
 
 
 [endsect]
 
+[section:ip__host_name ip::host_name]
 
-[endsect]
+Get the current host name.
 
+ std::string ``[link boost_asio.reference.ip__host_name.overload1 host_name]``();
 
-[section:service ip::basic_resolver::service]
+ std::string ``[link boost_asio.reference.ip__host_name.overload2 host_name]``(
+ boost::system::error_code & ec);
 
 
-['Inherited from basic_io_object.]
+[section:overload1 ip::host_name (1 of 2 overloads)]
 
-The service associated with the I/O object.
+Get the current host name.
 
- service_type & service;
+ std::string host_name();
 
 
 
@@ -28652,31 +33682,25 @@
 
 
 
-[section:service_type ip::basic_resolver::service_type]
-
-
-['Inherited from basic_io_object.]
-
-The type of the service that will be used to provide I/O operations.
+[section:overload2 ip::host_name (2 of 2 overloads)]
 
- typedef ResolverService service_type;
+Get the current host name.
 
+ std::string host_name(
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
-
 [endsect]
 
-[section:ip__basic_resolver_entry ip::basic_resolver_entry]
+[section:ip__icmp ip::icmp]
 
-An entry produced by a resolver.
+Encapsulates the flags needed for ICMP.
 
- template<
- typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
- class basic_resolver_entry
+ class icmp
 
 
 [heading Types]
@@ -28685,15 +33709,36 @@
 
   [
 
- [[link boost_asio.reference.ip__basic_resolver_entry.endpoint_type [*endpoint_type]]]
- [The endpoint type associated with the endpoint entry. ]
+ [[link boost_asio.reference.ip__icmp.endpoint [*endpoint]]]
+ [The type of a ICMP endpoint. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.ip__basic_resolver_entry.protocol_type [*protocol_type]]]
- [The protocol type associated with the endpoint entry. ]
+ [[link boost_asio.reference.ip__icmp.resolver [*resolver]]]
+ [The ICMP resolver type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ip__icmp.resolver_iterator [*resolver_iterator]]]
+ [The type of a resolver iterator. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ip__icmp.resolver_query [*resolver_query]]]
+ [The type of a resolver query. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ip__icmp.socket [*socket]]]
+ [The ICMP socket type. ]
   
   ]
 
@@ -28704,89 +33749,180 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry [*basic_resolver_entry]]]
- [Default constructor. ]
+ [[link boost_asio.reference.ip__icmp.family [*family]]]
+ [Obtain an identifier for the protocol family. ]
   ]
   
   [
- [[link boost_asio.reference.ip__basic_resolver_entry.endpoint [*endpoint]]]
- [Get the endpoint associated with the entry. ]
+ [[link boost_asio.reference.ip__icmp.protocol [*protocol]]]
+ [Obtain an identifier for the protocol. ]
   ]
   
   [
- [[link boost_asio.reference.ip__basic_resolver_entry.host_name [*host_name]]]
- [Get the host name associated with the entry. ]
+ [[link boost_asio.reference.ip__icmp.type [*type]]]
+ [Obtain an identifier for the type of the protocol. ]
   ]
   
   [
- [[link boost_asio.reference.ip__basic_resolver_entry.operator_endpoint_type [*operator endpoint_type]]]
- [Convert to the endpoint associated with the entry. ]
+ [[link boost_asio.reference.ip__icmp.v4 [*v4]]]
+ [Construct to represent the IPv4 ICMP protocol. ]
   ]
   
   [
- [[link boost_asio.reference.ip__basic_resolver_entry.service_name [*service_name]]]
- [Get the service name associated with the entry. ]
+ [[link boost_asio.reference.ip__icmp.v6 [*v6]]]
+ [Construct to represent the IPv6 ICMP protocol. ]
+ ]
+
+]
+
+[heading Friends]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.ip__icmp.operator_not__eq_ [*operator!=]]]
+ [Compare two protocols for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__icmp.operator_eq__eq_ [*operator==]]]
+ [Compare two protocols for equality. ]
   ]
   
 ]
 
 The
-[link boost_asio.reference.ip__basic_resolver_entry ip::basic_resolver_entry] class template describes an entry as returned by a resolver.
+[link boost_asio.reference.ip__icmp ip::icmp] class contains flags necessary for ICMP sockets.
 
 
 [heading Thread Safety]
   
 [*Distinct] [*objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
-
-
-[section:basic_resolver_entry ip::basic_resolver_entry::basic_resolver_entry]
-
-Default constructor.
+[*Shared] [*objects:] Safe.
 
- ``[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload1 basic_resolver_entry]``();
 
- ``[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload2 basic_resolver_entry]``(
- const endpoint_type & endpoint,
- const std::string & host_name,
- const std::string & service_name);
 
+[section:endpoint ip::icmp::endpoint]
 
-[section:overload1 ip::basic_resolver_entry::basic_resolver_entry (1 of 2 overloads)]
+The type of a ICMP endpoint.
 
-Default constructor.
+ typedef basic_endpoint< icmp > endpoint;
 
- basic_resolver_entry();
 
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
-[endsect]
+ [[link boost_asio.reference.ip__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.ip__basic_endpoint.protocol_type [*protocol_type]]]
+ [The protocol type associated with the endpoint. ]
+
+ ]
 
-[section:overload2 ip::basic_resolver_entry::basic_resolver_entry (2 of 2 overloads)]
+]
 
-Construct with specified endpoint, host name and service name.
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
- basic_resolver_entry(
- const endpoint_type & endpoint,
- const std::string & host_name,
- const std::string & service_name);
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
+ [Get the IP address associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+ [Default constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.capacity [*capacity]]]
+ [Get the capacity of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.data [*data]]]
+ [Get the underlying endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_eq_ [*operator=]]]
+ [Assign from another endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.port [*port]]]
+ [Get the port associated with the endpoint. The port number is always in the host's byte order. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.protocol [*protocol]]]
+ [The protocol associated with the endpoint. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.resize [*resize]]]
+ [Set the underlying size of the endpoint in the native type. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.size [*size]]]
+ [Get the underlying size of the endpoint in the native type. ]
+ ]
+
+]
 
+[heading Friends]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_not__eq_ [*operator!=]]]
+ [Compare two endpoints for inequality. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt_ [*operator<]]]
+ [Compare endpoints for ordering. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
+ [Compare two endpoints for equality. ]
+ ]
+
+]
 
-[endsect]
+[heading Related Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.ip__basic_endpoint.operator_lt__lt_ [*operator<<]]]
+ [Output an endpoint as a string. ]
+ ]
+
+]
 
-[endsect]
+The
+[link boost_asio.reference.ip__basic_endpoint ip::basic_endpoint] class template describes an endpoint that may be associated with a particular socket.
 
 
-[section:endpoint ip::basic_resolver_entry::endpoint]
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
-Get the endpoint associated with the entry.
+[*Shared] [*objects:] Unsafe.
 
- endpoint_type endpoint() const;
 
 
 
@@ -28794,12 +33930,11 @@
 
 
 
-[section:endpoint_type ip::basic_resolver_entry::endpoint_type]
-
-The endpoint type associated with the endpoint entry.
+[section:family ip::icmp::family]
 
- typedef InternetProtocol::endpoint endpoint_type;
+Obtain an identifier for the protocol family.
 
+ int family() const;
 
 
 
@@ -28807,11 +33942,13 @@
 
 
 
-[section:host_name ip::basic_resolver_entry::host_name]
+[section:operator_not__eq_ ip::icmp::operator!=]
 
-Get the host name associated with the entry.
+Compare two protocols for inequality.
 
- std::string host_name() const;
+ friend bool operator!=(
+ const icmp & p1,
+ const icmp & p2);
 
 
 
@@ -28819,11 +33956,13 @@
 
 
 
-[section:operator_endpoint_type ip::basic_resolver_entry::operator endpoint_type]
+[section:operator_eq__eq_ ip::icmp::operator==]
 
-Convert to the endpoint associated with the entry.
+Compare two protocols for equality.
 
- operator endpoint_type() const;
+ friend bool operator==(
+ const icmp & p1,
+ const icmp & p2);
 
 
 
@@ -28831,12 +33970,11 @@
 
 
 
-[section:protocol_type ip::basic_resolver_entry::protocol_type]
-
-The protocol type associated with the endpoint entry.
+[section:protocol ip::icmp::protocol]
 
- typedef InternetProtocol protocol_type;
+Obtain an identifier for the protocol.
 
+ int protocol() const;
 
 
 
@@ -28844,54 +33982,114 @@
 
 
 
-[section:service_name ip::basic_resolver_entry::service_name]
+[section:resolver ip::icmp::resolver]
 
-Get the service name associated with the entry.
+The ICMP resolver type.
 
- std::string service_name() const;
+ typedef basic_resolver< icmp > resolver;
 
 
+[heading Types]
+[table
+ [[Name][Description]]
 
-[endsect]
+ [
 
+ [[link boost_asio.reference.ip__basic_resolver.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[link boost_asio.reference.ip__basic_resolver.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
 
-[section:ip__basic_resolver_iterator ip::basic_resolver_iterator]
+ [
 
-An iterator over the entries produced by a resolver.
+ [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
+ [The iterator type. ]
+
+ ]
 
- template<
- typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
- class basic_resolver_iterator
+ [
+
+ [[link boost_asio.reference.ip__basic_resolver.protocol_type [*protocol_type]]]
+ [The protocol type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ip__basic_resolver.query [*query]]]
+ [The query type. ]
+
+ ]
+
+ [
+
+ [[link boost_asio.reference.ip__basic_resolver.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
 
+]
 
 [heading Member Functions]
 [table
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]]
- [Default constructor creates an end iterator. ]
+ [[link boost_asio.reference.ip__basic_resolver.async_resolve [*async_resolve]]]
+ [Asynchronously resolve a query to a list of entries. ]
   ]
   
   [
- [[link boost_asio.reference.ip__basic_resolver_iterator.create [*create]]]
- [Create an iterator from an addrinfo list returned by getaddrinfo. ]
+ [[link boost_asio.reference.ip__basic_resolver.basic_resolver [*basic_resolver]]]
+ [Constructor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.cancel [*cancel]]]
+ [Cancel any asynchronous operations that are waiting on the resolver. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver.resolve [*resolve]]]
+ [Resolve a query to a list of entries. ]
   ]
   
 ]
 
-The
-[link boost_asio.reference.ip__basic_resolver_iterator ip::basic_resolver_iterator] class template is used to define iterators over the results returned by a resolver.
-
-The iterator's value\_type, obtained when the iterator is dereferenced, is:
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
 
- const basic_resolver_entry<InternetProtocol>
+ [
+ [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
 
+ [
+ [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
 
+]
 
+The basic_resolver class template provides the ability to resolve a query to a list of endpoints.
 
 
 [heading Thread Safety]
@@ -28902,74 +34100,63 @@
 
 
 
-[section:basic_resolver_iterator ip::basic_resolver_iterator::basic_resolver_iterator]
-
-Default constructor creates an end iterator.
-
- basic_resolver_iterator();
-
-
 
 [endsect]
 
 
-[section:create ip::basic_resolver_iterator::create]
-
-Create an iterator from an addrinfo list returned by getaddrinfo.
 
- static basic_resolver_iterator ``[link boost_asio.reference.ip__basic_resolver_iterator.create.overload1 create]``(
- boost::asio::detail::addrinfo_type * address_info,
- const std::string & host_name,
- const std::string & service_name);
+[section:resolver_iterator ip::icmp::resolver_iterator]
 
- static basic_resolver_iterator ``[link boost_asio.reference.ip__basic_resolver_iterator.create.overload2 create]``(
- const typename InternetProtocol::endpoint & endpoint,
- const std::string & host_name,
- const std::string & service_name);
+The type of a resolver iterator.
 
+ typedef basic_resolver_iterator< icmp > resolver_iterator;
 
-[section:overload1 ip::basic_resolver_iterator::create (1 of 2 overloads)]
 
-Create an iterator from an addrinfo list returned by getaddrinfo.
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
- static basic_resolver_iterator create(
- boost::asio::detail::addrinfo_type * address_info,
- const std::string & host_name,
- const std::string & service_name);
+ [
+ [[link boost_asio.reference.ip__basic_resolver_iterator.basic_resolver_iterator [*basic_resolver_iterator]]]
+ [Default constructor creates an end iterator. ]
+ ]
+
+ [
+ [[link boost_asio.reference.ip__basic_resolver_iterator.create [*create]]]
+ [Create an iterator from an addrinfo list returned by getaddrinfo. ]
+ ]
+
+]
 
+The
+[link boost_asio.reference.ip__basic_resolver_iterator ip::basic_resolver_iterator] class template is used to define iterators over the results returned by a resolver.
 
+The iterator's value\_type, obtained when the iterator is dereferenced, is:
 
-[endsect]
+ const basic_resolver_entry<InternetProtocol>
 
 
 
-[section:overload2 ip::basic_resolver_iterator::create (2 of 2 overloads)]
 
-Create an iterator from an endpoint, host name and service name.
 
- static basic_resolver_iterator create(
- const typename InternetProtocol::endpoint & endpoint,
- const std::string & host_name,
- const std::string & service_name);
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
+[*Shared] [*objects:] Unsafe.
 
 
-[endsect]
 
 
 [endsect]
 
 
-[endsect]
 
-[section:ip__basic_resolver_query ip::basic_resolver_query]
+[section:resolver_query ip::icmp::resolver_query]
 
-An query to be passed to a resolver.
+The type of a resolver query.
 
- template<
- typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
- class basic_resolver_query :
- public ip::resolver_query_base
+ typedef basic_resolver_query< icmp > resolver_query;
 
 
 [heading Types]
@@ -29064,224 +34251,373 @@
 
 
 
-[section:address_configured ip::basic_resolver_query::address_configured]
-
-
-['Inherited from ip::resolver_query_base.]
-
-Only return IPv4 addresses if a non-loopback IPv4 address is configured for the system. Only return IPv6 addresses if a non-loopback IPv6 address is configured for the system.
-
- static const int address_configured = implementation_defined;
-
-
-
-[endsect]
-
-
-
-[section:all_matching ip::basic_resolver_query::all_matching]
-
-
-['Inherited from ip::resolver_query_base.]
-
-If used with v4_mapped, return all matching IPv6 and IPv4 addresses.
-
- static const int all_matching = implementation_defined;
-
-
-
-[endsect]
-
-
-[section:basic_resolver_query ip::basic_resolver_query::basic_resolver_query]
-
-Construct with specified service name for any protocol.
-
- ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload1 basic_resolver_query]``(
- const std::string & service_name,
- int flags = passive|address_configured);
-
- ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload2 basic_resolver_query]``(
- const protocol_type & protocol,
- const std::string & service_name,
- int flags = passive|address_configured);
-
- ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload3 basic_resolver_query]``(
- const std::string & host_name,
- const std::string & service_name,
- int flags = address_configured);
-
- ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload4 basic_resolver_query]``(
- const protocol_type & protocol,
- const std::string & host_name,
- const std::string & service_name,
- int flags = address_configured);
-
-
-[section:overload1 ip::basic_resolver_query::basic_resolver_query (1 of 4 overloads)]
-
-Construct with specified service name for any protocol.
-
- basic_resolver_query(
- const std::string & service_name,
- int flags = passive|address_configured);
-
-
-
-[endsect]
-
-
-
-[section:overload2 ip::basic_resolver_query::basic_resolver_query (2 of 4 overloads)]
-
-Construct with specified service name for a given protocol.
-
- basic_resolver_query(
- const protocol_type & protocol,
- const std::string & service_name,
- int flags = passive|address_configured);
-
-
-
-[endsect]
-
-
-
-[section:overload3 ip::basic_resolver_query::basic_resolver_query (3 of 4 overloads)]
-
-Construct with specified host name and service name for any protocol.
-
- basic_resolver_query(
- const std::string & host_name,
- const std::string & service_name,
- int flags = address_configured);
-
-
-
-[endsect]
-
-
-
-[section:overload4 ip::basic_resolver_query::basic_resolver_query (4 of 4 overloads)]
-
-Construct with specified host name and service name for a given protocol.
-
- basic_resolver_query(
- const protocol_type & protocol,
- const std::string & host_name,
- const std::string & service_name,
- int flags = address_configured);
-
-
-
-[endsect]
-
 
 [endsect]
 
 
-[section:canonical_name ip::basic_resolver_query::canonical_name]
-
-
-['Inherited from ip::resolver_query_base.]
 
-Determine the canonical name of the host specified in the query.
+[section:socket ip::icmp::socket]
 
- static const int canonical_name = implementation_defined;
+The ICMP socket type.
 
+ typedef basic_raw_socket< icmp > socket;
 
 
-[endsect]
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
+ [[link boost_asio.reference.basic_raw_socket.broadcast [*broadcast]]]
+ [Socket option to permit sending of broadcast messages. ]
+
+ ]
 
-[section:hints ip::basic_resolver_query::hints]
+ [
 
-Get the hints associated with the query.
+ [[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. ]
+
+ ]
 
- const boost::asio::detail::addrinfo_type & hints() const;
+ [
 
+ [[link boost_asio.reference.basic_raw_socket.debug [*debug]]]
+ [Socket option to enable socket-level debugging. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[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. ]
+
+ ]
 
-[section:host_name ip::basic_resolver_query::host_name]
+ [
 
-Get the host name associated with the query.
+ [[link boost_asio.reference.basic_raw_socket.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
+
+ ]
 
- std::string host_name() const;
+ [
 
+ [[link boost_asio.reference.basic_raw_socket.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[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. ]
+
+ ]
 
-[section:numeric_host ip::basic_resolver_query::numeric_host]
+ [
 
+ [[link boost_asio.reference.basic_raw_socket.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_socket is always the lowest layer. ]
+
+ ]
 
-['Inherited from ip::resolver_query_base.]
+ [
 
-Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted.
+ [[link boost_asio.reference.basic_raw_socket.message_flags [*message_flags]]]
+ [Bitmask type for flags that can be passed to send and receive operations. ]
+
+ ]
 
- static const int numeric_host = implementation_defined;
+ [
 
+ [[link boost_asio.reference.basic_raw_socket.native_type [*native_type]]]
+ [The native representation of a socket. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[link boost_asio.reference.basic_raw_socket.non_blocking_io [*non_blocking_io]]]
+ [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. ]
+
+ ]
 
-[section:numeric_service ip::basic_resolver_query::numeric_service]
+ [
 
+ [[link boost_asio.reference.basic_raw_socket.receive_buffer_size [*receive_buffer_size]]]
+ [Socket option for the receive buffer size of a socket. ]
+
+ ]
 
-['Inherited from ip::resolver_query_base.]
+ [
 
-Service name should be treated as a numeric string defining a port number and no name resolution should be attempted.
+ [[link boost_asio.reference.basic_raw_socket.receive_low_watermark [*receive_low_watermark]]]
+ [Socket option for the receive low watermark. ]
+
+ ]
 
- static const int numeric_service = implementation_defined;
+ [
 
+ [[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. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[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. ]
+
+ ]
 
-[section:passive ip::basic_resolver_query::passive]
+ [
 
+ [[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. ]
+
+ ]
 
-['Inherited from ip::resolver_query_base.]
+ [
 
-Indicate that returned endpoint is intended for use as a locally bound socket endpoint.
+ [[link boost_asio.reference.basic_raw_socket.shutdown_type [*shutdown_type]]]
+ [Different ways a socket may be shutdown. ]
+
+ ]
 
- static const int passive = implementation_defined;
+]
 
+[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. ]
+ ]
+
+ [
+ [[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.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[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. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.native [*native]]]
+ [Get the native socket representation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.basic_raw_socket.open [*open]]]
+ [Open the socket using the specified protocol. ]
+ ]
+
+ [
+ [[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. ]
+ ]
+
+]
 
-[endsect]
+[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. ]
+ ]
 
-[section:protocol_type ip::basic_resolver_query::protocol_type]
+ [
+ [[link boost_asio.reference.basic_raw_socket.message_out_of_band [*message_out_of_band]]]
+ [Process out-of-band data. ]
+ ]
 
-The protocol type associated with the endpoint query.
+ [
+ [[link boost_asio.reference.basic_raw_socket.message_peek [*message_peek]]]
+ [Peek at incoming data without removing it from the input queue. ]
+ ]
 
- typedef InternetProtocol protocol_type;
+]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.basic_raw_socket.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
 
+ [
+ [[link boost_asio.reference.basic_raw_socket.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
 
-[endsect]
+]
 
+The basic_raw_socket class template provides asynchronous and blocking raw-oriented socket functionality.
 
 
-[section:service_name ip::basic_resolver_query::service_name]
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
-Get the service name associated with the query.
+[*Shared] [*objects:] Unsafe.
 
- std::string service_name() const;
 
 
 
@@ -29289,38 +34625,23 @@
 
 
 
-[section:v4_mapped ip::basic_resolver_query::v4_mapped]
-
-
-['Inherited from ip::resolver_query_base.]
-
-If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses.
-
- static const int v4_mapped = implementation_defined;
-
+[section:type ip::icmp::type]
 
+Obtain an identifier for the type of the protocol.
 
-[endsect]
+ int type() const;
 
 
 
 [endsect]
 
-[section:ip__host_name ip::host_name]
-
-Get the current host name.
-
- std::string ``[link boost_asio.reference.ip__host_name.overload1 host_name]``();
-
- std::string ``[link boost_asio.reference.ip__host_name.overload2 host_name]``(
- boost::system::error_code & ec);
 
 
-[section:overload1 ip::host_name (1 of 2 overloads)]
+[section:v4 ip::icmp::v4]
 
-Get the current host name.
+Construct to represent the IPv4 ICMP protocol.
 
- std::string host_name();
+ static icmp v4();
 
 
 
@@ -29328,18 +34649,18 @@
 
 
 
-[section:overload2 ip::host_name (2 of 2 overloads)]
+[section:v6 ip::icmp::v6]
 
-Get the current host name.
+Construct to represent the IPv6 ICMP protocol.
 
- std::string host_name(
- boost::system::error_code & ec);
+ static icmp v6();
 
 
 
 [endsect]
 
 
+
 [endsect]
 
 
@@ -36419,11 +41740,449 @@
 [heading Parameters]
     
 
-[variablelist
-
-[[io_service][The io\_service object that the stream descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor. ]]
+[variablelist
+
+[[io_service][The io\_service object that the stream descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::basic_stream_descriptor (2 of 2 overloads)]
+
+Construct a basic_stream_descriptor on an existing native descriptor.
+
+ basic_stream_descriptor(
+ boost::asio::io_service & io_service,
+ const native_type & native_descriptor);
+
+
+This constructor creates a stream descriptor object to hold an existing native descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[io_service][The io\_service object that the stream descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor.]]
+
+[[native_descriptor][The new underlying descriptor implementation.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:bytes_readable posix::basic_stream_descriptor::bytes_readable]
+
+
+['Inherited from posix::descriptor_base.]
+
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
+
+
+
+Implements the FIONREAD IO control command.
+
+
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::bytes_readable command(true);
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[section:cancel posix::basic_stream_descriptor::cancel]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload1 cancel]``();
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload2 cancel]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::cancel (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ void cancel();
+
+
+This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::cancel (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Cancel all asynchronous operations associated with the descriptor.
+
+ boost::system::error_code cancel(
+ boost::system::error_code & ec);
+
+
+This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:close posix::basic_stream_descriptor::close]
+
+Close the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload1 close]``();
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload2 close]``(
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::close (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Close the descriptor.
+
+ void close();
+
+
+This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure. ]]
+
+]
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::close (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Close the descriptor.
+
+ boost::system::error_code close(
+ boost::system::error_code & ec);
+
+
+This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:get_io_service posix::basic_stream_descriptor::get_io_service]
+
+
+['Inherited from basic_io_object.]
+
+Get the io_service associated with the object.
+
+ boost::asio::io_service & get_io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:implementation posix::basic_stream_descriptor::implementation]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation of the I/O object.
+
+ implementation_type implementation;
+
+
+
+[endsect]
+
+
+
+[section:implementation_type posix::basic_stream_descriptor::implementation_type]
+
+
+['Inherited from basic_io_object.]
+
+The underlying implementation type of I/O object.
+
+ typedef service_type::implementation_type implementation_type;
+
+
+
+
+[endsect]
+
+
+[section:io_control posix::basic_stream_descriptor::io_control]
+
+Perform an IO control command on the descriptor.
+
+ void ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload1 io_control]``(
+ IoControlCommand & command);
+
+ boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload2 io_control]``(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+[section:overload1 posix::basic_stream_descriptor::io_control (1 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Perform an IO control command on the descriptor.
+
+ void io_control(
+ IoControlCommand & command);
+
+
+This function is used to execute an IO control command on the descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the descriptor.]]
+
+]
+
+[heading Exceptions]
+
+
+[variablelist
+
+[[boost::system::system_error][Thrown on failure.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::posix::stream_descriptor::bytes_readable command;
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 posix::basic_stream_descriptor::io_control (2 of 2 overloads)]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Perform an IO control command on the descriptor.
+
+ boost::system::error_code io_control(
+ IoControlCommand & command,
+ boost::system::error_code & ec);
+
+
+This function is used to execute an IO control command on the descriptor.
+
+
+[heading Parameters]
+
+
+[variablelist
+
+[[command][The IO control command to be performed on the descriptor.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+[heading Example]
+
+Getting the number of bytes ready to read:
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::posix::stream_descriptor::bytes_readable command;
+ boost::system::error_code ec;
+ descriptor.io_control(command, ec);
+ if (ec)
+ {
+ // An error occurred.
+ }
+ std::size_t bytes_readable = command.get();
+
+
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:io_service posix::basic_stream_descriptor::io_service]
+
+
+['Inherited from basic_io_object.]
+
+(Deprecated: use get_io_service().) Get the io_service associated with the object.
+
+ boost::asio::io_service & io_service();
+
+
+This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+
+
+[heading Return Value]
+
+A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+
+
+
+[endsect]
+
+
+
+[section:is_open posix::basic_stream_descriptor::is_open]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Determine whether the descriptor is open.
+
+ bool is_open() const;
+
+
+
+[endsect]
+
+
+
+[section:lowest_layer posix::basic_stream_descriptor::lowest_layer]
+
+
+['Inherited from posix::basic_descriptor.]
+
+Get a reference to the lowest layer.
+
+ lowest_layer_type & lowest_layer();
+
+
+This function returns a reference to the lowest layer in a stack of layers. Since a basic_descriptor cannot contain any further layers, it simply returns a reference to itself.
+
 
-]
+[heading Return Value]
+
+A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.
 
 
 
@@ -36431,71 +42190,155 @@
 
 
 
-[section:overload2 posix::basic_stream_descriptor::basic_stream_descriptor (2 of 2 overloads)]
-
-Construct a basic_stream_descriptor on an existing native descriptor.
+[section:lowest_layer_type posix::basic_stream_descriptor::lowest_layer_type]
 
- basic_stream_descriptor(
- boost::asio::io_service & io_service,
- const native_type & native_descriptor);
 
+['Inherited from posix::basic_descriptor.]
 
-This constructor creates a stream descriptor object to hold an existing native descriptor.
+A basic_descriptor is always the lowest layer.
 
+ typedef basic_descriptor< StreamDescriptorService > lowest_layer_type;
 
-[heading Parameters]
-
 
-[variablelist
-
-[[io_service][The io\_service object that the stream descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor.]]
+[heading Types]
+[table
+ [[Name][Description]]
 
-[[native_descriptor][The new underlying descriptor implementation.]]
+ [
 
-]
+ [[link boost_asio.reference.posix__basic_descriptor.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
 
-[heading Exceptions]
-
+ [
 
-[variablelist
+ [[link boost_asio.reference.posix__basic_descriptor.implementation_type [*implementation_type]]]
+ [The underlying implementation type of I/O object. ]
   
-[[boost::system::system_error][Thrown on failure. ]]
+ ]
 
-]
+ [
 
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [A basic_descriptor is always the lowest layer. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
+ [The native representation of a descriptor. ]
+
+ ]
 
+ [
 
-[endsect]
+ [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
 
+ [
 
-[section:bytes_readable posix::basic_stream_descriptor::bytes_readable]
+ [[link boost_asio.reference.posix__basic_descriptor.service_type [*service_type]]]
+ [The type of the service that will be used to provide I/O operations. ]
+
+ ]
 
+]
 
-['Inherited from posix::descriptor_base.]
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-IO control command to get the amount of data that can be read without blocking.
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.assign [*assign]]]
+ [Assign an existing native descriptor to the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.basic_descriptor [*basic_descriptor]]]
+ [Construct a basic_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.close [*close]]]
+ [Close the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.get_io_service [*get_io_service]]]
+ [Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.lowest_layer [*lowest_layer]]]
+ [Get a reference to the lowest layer. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
+ [Get the native descriptor representation. ]
+ ]
+
+]
 
- typedef implementation_defined bytes_readable;
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
 
+ [
+ [[link boost_asio.reference.posix__basic_descriptor._basic_descriptor [*~basic_descriptor]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
 
+[heading Protected Data Members]
+[table
+ [[Name][Description]]
 
-Implements the FIONREAD IO control command.
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
+ [The underlying implementation of the I/O object. ]
+ ]
 
+ [
+ [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
+ [The service associated with the I/O object. ]
+ ]
 
-[heading Example]
-
+]
 
+The posix::basic_descriptor class template provides the ability to wrap a POSIX descriptor.
 
- boost::asio::posix::stream_descriptor descriptor(io_service);
- ...
- boost::asio::descriptor_base::bytes_readable command(true);
- descriptor.io_control(command);
- std::size_t bytes_readable = command.get();
 
+[heading Thread Safety]
+
+[*Distinct] [*objects:] Safe.
 
+[*Shared] [*objects:] Unsafe.
 
 
 
@@ -36503,37 +42346,30 @@
 [endsect]
 
 
-[section:cancel posix::basic_stream_descriptor::cancel]
 
-Cancel all asynchronous operations associated with the descriptor.
+[section:native posix::basic_stream_descriptor::native]
 
- void ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload1 cancel]``();
 
- boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload2 cancel]``(
- boost::system::error_code & ec);
+['Inherited from posix::basic_descriptor.]
 
+Get the native descriptor representation.
 
-[section:overload1 posix::basic_stream_descriptor::cancel (1 of 2 overloads)]
+ native_type native();
 
 
-['Inherited from posix::basic_descriptor.]
+This function may be used to obtain the underlying representation of the descriptor. This is intended to allow access to native descriptor functionality that is not otherwise provided.
 
-Cancel all asynchronous operations associated with the descriptor.
 
- void cancel();
+[endsect]
 
 
-This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
 
+[section:native_type posix::basic_stream_descriptor::native_type]
 
-[heading Exceptions]
-
+The native representation of a descriptor.
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. ]]
+ typedef StreamDescriptorService::native_type native_type;
 
-]
 
 
 
@@ -36541,86 +42377,122 @@
 
 
 
-[section:overload2 posix::basic_stream_descriptor::cancel (2 of 2 overloads)]
+[section:non_blocking_io posix::basic_stream_descriptor::non_blocking_io]
 
 
-['Inherited from posix::basic_descriptor.]
+['Inherited from posix::descriptor_base.]
 
-Cancel all asynchronous operations associated with the descriptor.
+IO control command to set the blocking mode of the descriptor.
 
- boost::system::error_code cancel(
- boost::system::error_code & ec);
+ typedef implementation_defined non_blocking_io;
 
 
-This function causes all outstanding asynchronous read or write operations to finish immediately, and the handlers for cancelled operations will be passed the boost::asio::error::operation\_aborted error.
 
+Implements the FIONBIO IO control command.
 
-[heading Parameters]
-
 
-[variablelist
+[heading Example]
   
-[[ec][Set to indicate what error occurred, if any. ]]
 
-]
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::non_blocking_io command(true);
+ descriptor.io_control(command);
+
 
 
 
-[endsect]
 
 
 [endsect]
 
-[section:close posix::basic_stream_descriptor::close]
 
-Close the descriptor.
+[section:read_some posix::basic_stream_descriptor::read_some]
 
- void ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload1 close]``();
+Read some data from the descriptor.
 
- boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload2 close]``(
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload1 read_some]``(
+ const MutableBufferSequence & buffers);
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload2 read_some]``(
+ const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
-[section:overload1 posix::basic_stream_descriptor::close (1 of 2 overloads)]
+[section:overload1 posix::basic_stream_descriptor::read_some (1 of 2 overloads)]
 
+Read some data from the descriptor.
 
-['Inherited from posix::basic_descriptor.]
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ const MutableBufferSequence & buffers);
 
-Close the descriptor.
 
- void close();
+This function is used to read data from the stream descriptor. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
 
 
-This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+[heading Parameters]
+
+
+[variablelist
+
+[[buffers][One or more buffers into which the data will be read.]]
 
+]
+
+[heading Return Value]
+
+The number of bytes read.
 
 [heading Exceptions]
     
 
 [variablelist
   
-[[boost::system::system_error][Thrown on failure. ]]
+[[boost::system::system_error][Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.]]
 
 ]
 
+[heading Remarks]
+
+The read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
 
+[heading Example]
+
+To read into a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
 
-[endsect]
+ descriptor.read_some(boost::asio::buffer(data, size));
 
 
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
-[section:overload2 posix::basic_stream_descriptor::close (2 of 2 overloads)]
 
 
-['Inherited from posix::basic_descriptor.]
+[endsect]
 
-Close the descriptor.
 
- boost::system::error_code close(
+
+[section:overload2 posix::basic_stream_descriptor::read_some (2 of 2 overloads)]
+
+Read some data from the descriptor.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ const MutableBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
-This function is used to close the descriptor. Any asynchronous read or write operations will be cancelled immediately, and will complete with the boost::asio::error::operation\_aborted error.
+This function is used to read data from the stream descriptor. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
 
 
 [heading Parameters]
@@ -36628,49 +42500,37 @@
 
 [variablelist
   
-[[ec][Set to indicate what error occurred, if any. ]]
+[[buffers][One or more buffers into which the data will be read.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes read. Returns 0 if an error occurred.
 
+[heading Remarks]
+
+The read\_some operation may not read all of the requested number of bytes. Consider using the
+[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
 
-[endsect]
 
 
 [endsect]
 
 
-[section:get_io_service posix::basic_stream_descriptor::get_io_service]
-
-
-['Inherited from basic_io_object.]
-
-Get the io_service associated with the object.
-
- boost::asio::io_service & get_io_service();
-
-
-This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
-
-
-[heading Return Value]
-
-A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
-
-
-
 [endsect]
 
 
-
-[section:implementation posix::basic_stream_descriptor::implementation]
+[section:service posix::basic_stream_descriptor::service]
 
 
 ['Inherited from basic_io_object.]
 
-The underlying implementation of the I/O object.
+The service associated with the I/O object.
 
- implementation_type implementation;
+ service_type & service;
 
 
 
@@ -36678,14 +42538,14 @@
 
 
 
-[section:implementation_type posix::basic_stream_descriptor::implementation_type]
+[section:service_type posix::basic_stream_descriptor::service_type]
 
 
 ['Inherited from basic_io_object.]
 
-The underlying implementation type of I/O object.
+The type of the service that will be used to provide I/O operations.
 
- typedef service_type::implementation_type implementation_type;
+ typedef StreamDescriptorService service_type;
 
 
 
@@ -36693,30 +42553,33 @@
 [endsect]
 
 
-[section:io_control posix::basic_stream_descriptor::io_control]
+[section:write_some posix::basic_stream_descriptor::write_some]
 
-Perform an IO control command on the descriptor.
+Write some data to the descriptor.
 
- void ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload1 io_control]``(
- IoControlCommand & command);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload1 write_some]``(
+ const ConstBufferSequence & buffers);
 
- boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload2 io_control]``(
- IoControlCommand & command,
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload2 write_some]``(
+ const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
-[section:overload1 posix::basic_stream_descriptor::io_control (1 of 2 overloads)]
-
-
-['Inherited from posix::basic_descriptor.]
+[section:overload1 posix::basic_stream_descriptor::write_some (1 of 2 overloads)]
 
-Perform an IO control command on the descriptor.
+Write some data to the descriptor.
 
- void io_control(
- IoControlCommand & command);
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ const ConstBufferSequence & buffers);
 
 
-This function is used to execute an IO control command on the descriptor.
+This function is used to write data to the stream descriptor. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.
 
 
 [heading Parameters]
@@ -36724,31 +42587,38 @@
 
 [variablelist
   
-[[command][The IO control command to be performed on the descriptor.]]
+[[buffers][One or more data buffers to be written to the descriptor.]]
 
 ]
 
+[heading Return Value]
+
+The number of bytes written.
+
 [heading Exceptions]
     
 
 [variablelist
   
-[[boost::system::system_error][Thrown on failure.]]
+[[boost::system::system_error][Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.]]
 
 ]
 
+[heading Remarks]
+
+The write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
+
 [heading Example]
   
-Getting the number of bytes ready to read:
-
- boost::asio::posix::stream_descriptor descriptor(io_service);
- ...
- boost::asio::posix::stream_descriptor::bytes_readable command;
- descriptor.io_control(command);
- std::size_t bytes_readable = command.get();
+To write a single data buffer use the
+[link boost_asio.reference.buffer buffer] function as follows:
 
+ descriptor.write_some(boost::asio::buffer(data, size));
 
 
+See the
+[link boost_asio.reference.buffer buffer] documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
 
 
@@ -36756,19 +42626,18 @@
 
 
 
-[section:overload2 posix::basic_stream_descriptor::io_control (2 of 2 overloads)]
-
-
-['Inherited from posix::basic_descriptor.]
+[section:overload2 posix::basic_stream_descriptor::write_some (2 of 2 overloads)]
 
-Perform an IO control command on the descriptor.
+Write some data to the descriptor.
 
- boost::system::error_code io_control(
- IoControlCommand & command,
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ const ConstBufferSequence & buffers,
       boost::system::error_code & ec);
 
 
-This function is used to execute an IO control command on the descriptor.
+This function is used to write data to the stream descriptor. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.
 
 
 [heading Parameters]
@@ -36776,30 +42645,24 @@
 
 [variablelist
   
-[[command][The IO control command to be performed on the descriptor.]]
+[[buffers][One or more data buffers to be written to the descriptor.]]
 
 [[ec][Set to indicate what error occurred, if any.]]
 
 ]
 
-[heading Example]
-
-Getting the number of bytes ready to read:
-
- boost::asio::posix::stream_descriptor descriptor(io_service);
- ...
- boost::asio::posix::stream_descriptor::bytes_readable command;
- boost::system::error_code ec;
- descriptor.io_control(command, ec);
- if (ec)
- {
- // An error occurred.
- }
- std::size_t bytes_readable = command.get();
+[heading Return Value]
+
+The number of bytes written. Returns 0 if an error occurred.
 
+[heading Remarks]
+
+The write\_some operation may not transmit all of the data to the peer. Consider using the
+[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
 
 
 
+[endsect]
 
 
 [endsect]
@@ -36807,38 +42670,68 @@
 
 [endsect]
 
+[section:posix__descriptor_base posix::descriptor_base]
 
-[section:io_service posix::basic_stream_descriptor::io_service]
+The descriptor_base class is used as a base for the basic_stream_descriptor class template so that we have a common place to define the associated IO control commands.
 
+ class descriptor_base
 
-['Inherited from basic_io_object.]
 
-(Deprecated: use get_io_service().) Get the io_service associated with the object.
+[heading Types]
+[table
+ [[Name][Description]]
 
- boost::asio::io_service & io_service();
+ [
+
+ [[link boost_asio.reference.posix__descriptor_base.bytes_readable [*bytes_readable]]]
+ [IO control command to get the amount of data that can be read without blocking. ]
+
+ ]
 
+ [
 
-This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.
+ [[link boost_asio.reference.posix__descriptor_base.non_blocking_io [*non_blocking_io]]]
+ [IO control command to set the blocking mode of the descriptor. ]
+
+ ]
 
+]
 
-[heading Return Value]
-
-A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.
+[heading Protected Member Functions]
+[table
+ [[Name][Description]]
+
+ [
+ [[link boost_asio.reference.posix__descriptor_base._descriptor_base [*~descriptor_base]]]
+ [Protected destructor to prevent deletion through this type. ]
+ ]
+
+]
 
 
+[section:bytes_readable posix::descriptor_base::bytes_readable]
 
-[endsect]
+IO control command to get the amount of data that can be read without blocking.
+
+ typedef implementation_defined bytes_readable;
 
 
 
-[section:is_open posix::basic_stream_descriptor::is_open]
+Implements the FIONREAD IO control command.
 
 
-['Inherited from posix::basic_descriptor.]
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::bytes_readable command(true);
+ descriptor.io_control(command);
+ std::size_t bytes_readable = command.get();
+
 
-Determine whether the descriptor is open.
 
- bool is_open() const;
 
 
 
@@ -36846,22 +42739,28 @@
 
 
 
-[section:lowest_layer posix::basic_stream_descriptor::lowest_layer]
+[section:non_blocking_io posix::descriptor_base::non_blocking_io]
 
+IO control command to set the blocking mode of the descriptor.
 
-['Inherited from posix::basic_descriptor.]
+ typedef implementation_defined non_blocking_io;
 
-Get a reference to the lowest layer.
 
- lowest_layer_type & lowest_layer();
+
+Implements the FIONBIO IO control command.
 
 
-This function returns a reference to the lowest layer in a stack of layers. Since a basic_descriptor cannot contain any further layers, it simply returns a reference to itself.
+[heading Example]
+
+
+
+ boost::asio::posix::stream_descriptor descriptor(io_service);
+ ...
+ boost::asio::descriptor_base::non_blocking_io command(true);
+ descriptor.io_control(command);
+
 
 
-[heading Return Value]
-
-A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.
 
 
 
@@ -36869,14 +42768,26 @@
 
 
 
-[section:lowest_layer_type posix::basic_stream_descriptor::lowest_layer_type]
+[section:_descriptor_base posix::descriptor_base::~descriptor_base]
 
+Protected destructor to prevent deletion through this type.
 
-['Inherited from posix::basic_descriptor.]
+ ~descriptor_base();
 
-A basic_descriptor is always the lowest layer.
 
- typedef basic_descriptor< StreamDescriptorService > lowest_layer_type;
+
+[endsect]
+
+
+
+[endsect]
+
+
+[section:posix__stream_descriptor posix::stream_descriptor]
+
+Typedef for the typical usage of a stream-oriented descriptor.
+
+ typedef basic_stream_descriptor stream_descriptor;
 
 
 [heading Types]
@@ -36885,42 +42796,42 @@
 
   [
 
- [[link boost_asio.reference.posix__basic_descriptor.bytes_readable [*bytes_readable]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.bytes_readable [*bytes_readable]]]
     [IO control command to get the amount of data that can be read without blocking. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_descriptor.implementation_type [*implementation_type]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.implementation_type [*implementation_type]]]
     [The underlying implementation type of I/O object. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_descriptor.lowest_layer_type [*lowest_layer_type]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer_type [*lowest_layer_type]]]
     [A basic_descriptor is always the lowest layer. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.native_type [*native_type]]]
     [The native representation of a descriptor. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking_io [*non_blocking_io]]]
     [IO control command to set the blocking mode of the descriptor. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_descriptor.service_type [*service_type]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.service_type [*service_type]]]
     [The type of the service that will be used to provide I/O operations. ]
   
   ]
@@ -36932,64 +42843,73 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.posix__basic_descriptor.assign [*assign]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.assign [*assign]]]
     [Assign an existing native descriptor to the descriptor. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.basic_descriptor [*basic_descriptor]]]
- [Construct a basic_descriptor without opening it. ]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.cancel [*cancel]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor [*basic_stream_descriptor]]]
+ [Construct a basic_stream_descriptor without opening it. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.cancel [*cancel]]]
     [Cancel all asynchronous operations associated with the descriptor. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.close [*close]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.close [*close]]]
     [Close the descriptor. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.get_io_service [*get_io_service]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.get_io_service [*get_io_service]]]
     [Get the io_service associated with the object. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.io_control [*io_control]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.io_control [*io_control]]]
     [Perform an IO control command on the descriptor. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.io_service [*io_service]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.io_service [*io_service]]]
     [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.is_open [*is_open]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.is_open [*is_open]]]
     [Determine whether the descriptor is open. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.lowest_layer [*lowest_layer]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer [*lowest_layer]]]
     [Get a reference to the lowest layer. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.native [*native]]]
     [Get the native descriptor representation. ]
   ]
   
-]
-
-[heading Protected Member Functions]
-[table
- [[Name][Description]]
-
   [
- [[link boost_asio.reference.posix__basic_descriptor._basic_descriptor [*~basic_descriptor]]]
- [Protected destructor to prevent deletion through this type. ]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.read_some [*read_some]]]
+ [Read some data from the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__basic_stream_descriptor.write_some [*write_some]]]
+ [Write some data to the descriptor. ]
   ]
   
 ]
@@ -36999,160 +42919,202 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.implementation [*implementation]]]
     [The underlying implementation of the I/O object. ]
   ]
 
   [
- [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
+ [[link boost_asio.reference.posix__basic_stream_descriptor.service [*service]]]
     [The service associated with the I/O object. ]
   ]
 
 ]
 
-The posix::basic_descriptor class template provides the ability to wrap a POSIX descriptor.
+The posix::basic_stream_descriptor class template provides asynchronous and blocking stream-oriented descriptor functionality.
 
 
 [heading Thread Safety]
   
 [*Distinct] [*objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
-
-
-
-
-[endsect]
-
-
-
-[section:native posix::basic_stream_descriptor::native]
-
-
-['Inherited from posix::basic_descriptor.]
-
-Get the native descriptor representation.
-
- native_type native();
+[*Shared] [*objects:] Unsafe.
 
 
-This function may be used to obtain the underlying representation of the descriptor. This is intended to allow access to native descriptor functionality that is not otherwise provided.
 
 
 [endsect]
 
 
+[section:posix__stream_descriptor_service posix::stream_descriptor_service]
 
-[section:native_type posix::basic_stream_descriptor::native_type]
-
-The native representation of a descriptor.
-
- typedef StreamDescriptorService::native_type native_type;
-
-
-
-
-[endsect]
+Default service implementation for a stream descriptor.
 
+ class stream_descriptor_service :
+ public io_service::service
 
 
-[section:non_blocking_io posix::basic_stream_descriptor::non_blocking_io]
+[heading Types]
+[table
+ [[Name][Description]]
 
+ [
 
-['Inherited from posix::descriptor_base.]
+ [[link boost_asio.reference.posix__stream_descriptor_service.implementation_type [*implementation_type]]]
+ [The type of a stream descriptor implementation. ]
+
+ ]
 
-IO control command to set the blocking mode of the descriptor.
+ [
 
- typedef implementation_defined non_blocking_io;
+ [[link boost_asio.reference.posix__stream_descriptor_service.native_type [*native_type]]]
+ [The native descriptor type. ]
+
+ ]
 
+]
 
+[heading Member Functions]
+[table
+ [[Name][Description]]
 
-Implements the FIONBIO IO control command.
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.assign [*assign]]]
+ [Assign an existing native descriptor to a stream descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.async_read_some [*async_read_some]]]
+ [Start an asynchronous read. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.async_write_some [*async_write_some]]]
+ [Start an asynchronous write. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.close [*close]]]
+ [Close a stream descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.construct [*construct]]]
+ [Construct a new stream descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.destroy [*destroy]]]
+ [Destroy a stream descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.io_control [*io_control]]]
+ [Perform an IO control command on the descriptor. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.is_open [*is_open]]]
+ [Determine whether the descriptor is open. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.native [*native]]]
+ [Get the native descriptor implementation. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.read_some [*read_some]]]
+ [Read some data from the stream. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined descriptorr objects owned by the service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.stream_descriptor_service [*stream_descriptor_service]]]
+ [Construct a new stream descriptor service for the specified io_service. ]
+ ]
+
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.write_some [*write_some]]]
+ [Write the given data to the stream. ]
+ ]
+
+]
 
+[heading Data Members]
+[table
+ [[Name][Description]]
 
-[heading Example]
-
+ [
+ [[link boost_asio.reference.posix__stream_descriptor_service.id [*id]]]
+ [The unique service identifier. ]
+ ]
 
+]
 
- boost::asio::posix::stream_descriptor descriptor(io_service);
- ...
- boost::asio::descriptor_base::non_blocking_io command(true);
- descriptor.io_control(command);
 
+[section:assign posix::stream_descriptor_service::assign]
 
+Assign an existing native descriptor to a stream descriptor.
 
+ boost::system::error_code assign(
+ implementation_type & impl,
+ const native_type & native_descriptor,
+ boost::system::error_code & ec);
 
 
 
 [endsect]
 
 
-[section:read_some posix::basic_stream_descriptor::read_some]
 
-Read some data from the descriptor.
+[section:async_read_some posix::stream_descriptor_service::async_read_some]
 
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload1 read_some]``(
- const MutableBufferSequence & buffers);
+Start an asynchronous read.
 
   template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload2 read_some]``(
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_read_some(
+ implementation_type & impl,
       const MutableBufferSequence & buffers,
- boost::system::error_code & ec);
-
-
-[section:overload1 posix::basic_stream_descriptor::read_some (1 of 2 overloads)]
-
-Read some data from the descriptor.
-
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t read_some(
- const MutableBufferSequence & buffers);
-
-
-This function is used to read data from the stream descriptor. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[buffers][One or more buffers into which the data will be read.]]
-
-]
-
-[heading Return Value]
-
-The number of bytes read.
+ ReadHandler descriptorr);
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.]]
 
-]
+[endsect]
 
-[heading Remarks]
-
-The read\_some operation may not read all of the requested number of bytes. Consider using the
-[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
 
-[heading Example]
-
-To read into a single data buffer use the
-[link boost_asio.reference.buffer buffer] function as follows:
 
- descriptor.read_some(boost::asio::buffer(data, size));
+[section:async_write_some posix::stream_descriptor_service::async_write_some]
 
+Start an asynchronous write.
 
-See the
-[link boost_asio.reference.buffer buffer] documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_write_some(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ WriteHandler descriptorr);
 
 
 
@@ -37160,56 +43122,40 @@
 
 
 
-[section:overload2 posix::basic_stream_descriptor::read_some (2 of 2 overloads)]
+[section:cancel posix::stream_descriptor_service::cancel]
 
-Read some data from the descriptor.
+Cancel all asynchronous operations associated with the descriptor.
 
- template<
- typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t read_some(
- const MutableBufferSequence & buffers,
+ boost::system::error_code cancel(
+ implementation_type & impl,
       boost::system::error_code & ec);
 
 
-This function is used to read data from the stream descriptor. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.
-
-
-[heading Parameters]
-
-
-[variablelist
-
-[[buffers][One or more buffers into which the data will be read.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
+[endsect]
 
-]
 
-[heading Return Value]
-
-The number of bytes read. Returns 0 if an error occurred.
 
-[heading Remarks]
-
-The read\_some operation may not read all of the requested number of bytes. Consider using the
-[link boost_asio.reference.read read] function if you need to ensure that the requested amount of data is read before the blocking operation completes.
+[section:close posix::stream_descriptor_service::close]
 
+Close a stream descriptor implementation.
 
+ boost::system::error_code close(
+ implementation_type & impl,
+ boost::system::error_code & ec);
 
-[endsect]
 
 
 [endsect]
 
 
-[section:service posix::basic_stream_descriptor::service]
-
 
-['Inherited from basic_io_object.]
+[section:construct posix::stream_descriptor_service::construct]
 
-The service associated with the I/O object.
+Construct a new stream descriptor implementation.
 
- service_type & service;
+ void construct(
+ implementation_type & impl);
 
 
 
@@ -37217,87 +43163,52 @@
 
 
 
-[section:service_type posix::basic_stream_descriptor::service_type]
-
-
-['Inherited from basic_io_object.]
-
-The type of the service that will be used to provide I/O operations.
+[section:destroy posix::stream_descriptor_service::destroy]
 
- typedef StreamDescriptorService service_type;
+Destroy a stream descriptor implementation.
 
+ void destroy(
+ implementation_type & impl);
 
 
 
 [endsect]
 
 
-[section:write_some posix::basic_stream_descriptor::write_some]
 
-Write some data to the descriptor.
+[section:get_io_service posix::stream_descriptor_service::get_io_service]
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload1 write_some]``(
- const ConstBufferSequence & buffers);
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t ``[link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload2 write_some]``(
- const ConstBufferSequence & buffers,
- boost::system::error_code & ec);
+['Inherited from io_service.]
 
+Get the io_service object that owns the service.
 
-[section:overload1 posix::basic_stream_descriptor::write_some (1 of 2 overloads)]
+ boost::asio::io_service & get_io_service();
 
-Write some data to the descriptor.
 
- template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t write_some(
- const ConstBufferSequence & buffers);
 
+[endsect]
 
-This function is used to write data to the stream descriptor. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.
 
 
-[heading Parameters]
-
+[section:id posix::stream_descriptor_service::id]
 
-[variablelist
-
-[[buffers][One or more data buffers to be written to the descriptor.]]
+The unique service identifier.
 
-]
+ static boost::asio::io_service::id id;
 
-[heading Return Value]
-
-The number of bytes written.
 
-[heading Exceptions]
-
 
-[variablelist
-
-[[boost::system::system_error][Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.]]
+[endsect]
 
-]
 
-[heading Remarks]
-
-The write\_some operation may not transmit all of the data to the peer. Consider using the
-[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
 
-[heading Example]
-
-To write a single data buffer use the
-[link boost_asio.reference.buffer buffer] function as follows:
+[section:implementation_type posix::stream_descriptor_service::implementation_type]
 
- descriptor.write_some(boost::asio::buffer(data, size));
+The type of a stream descriptor implementation.
 
+ typedef implementation_defined implementation_type;
 
-See the
-[link boost_asio.reference.buffer buffer] documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.
 
 
 
@@ -37305,141 +43216,112 @@
 
 
 
-[section:overload2 posix::basic_stream_descriptor::write_some (2 of 2 overloads)]
+[section:io_control posix::stream_descriptor_service::io_control]
 
-Write some data to the descriptor.
+Perform an IO control command on the descriptor.
 
   template<
- typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t write_some(
- const ConstBufferSequence & buffers,
+ typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
+ boost::system::error_code io_control(
+ implementation_type & impl,
+ IoControlCommand & command,
       boost::system::error_code & ec);
 
 
-This function is used to write data to the stream descriptor. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.
-
 
-[heading Parameters]
-
+[endsect]
 
-[variablelist
-
-[[buffers][One or more data buffers to be written to the descriptor.]]
 
-[[ec][Set to indicate what error occurred, if any.]]
 
-]
+[section:io_service posix::stream_descriptor_service::io_service]
 
-[heading Return Value]
-
-The number of bytes written. Returns 0 if an error occurred.
 
-[heading Remarks]
-
-The write\_some operation may not transmit all of the data to the peer. Consider using the
-[link boost_asio.reference.write write] function if you need to ensure that all data is written before the blocking operation completes.
+['Inherited from io_service.]
 
+(Deprecated: use get_io_service().) Get the io_service object that owns the service.
 
+ boost::asio::io_service & io_service();
 
-[endsect]
 
 
 [endsect]
 
 
-[endsect]
 
-[section:posix__descriptor_base posix::descriptor_base]
+[section:is_open posix::stream_descriptor_service::is_open]
 
-The descriptor_base class is used as a base for the basic_stream_descriptor class template so that we have a common place to define the associated IO control commands.
+Determine whether the descriptor is open.
 
- class descriptor_base
+ bool is_open(
+ const implementation_type & impl) const;
 
 
-[heading Types]
-[table
- [[Name][Description]]
 
- [
+[endsect]
 
- [[link boost_asio.reference.posix__descriptor_base.bytes_readable [*bytes_readable]]]
- [IO control command to get the amount of data that can be read without blocking. ]
-
- ]
 
- [
 
- [[link boost_asio.reference.posix__descriptor_base.non_blocking_io [*non_blocking_io]]]
- [IO control command to set the blocking mode of the descriptor. ]
-
- ]
+[section:native posix::stream_descriptor_service::native]
 
-]
+Get the native descriptor implementation.
 
-[heading Protected Member Functions]
-[table
- [[Name][Description]]
+ native_type native(
+ implementation_type & impl);
 
- [
- [[link boost_asio.reference.posix__descriptor_base._descriptor_base [*~descriptor_base]]]
- [Protected destructor to prevent deletion through this type. ]
- ]
-
-]
 
 
-[section:bytes_readable posix::descriptor_base::bytes_readable]
+[endsect]
 
-IO control command to get the amount of data that can be read without blocking.
 
- typedef implementation_defined bytes_readable;
 
+[section:native_type posix::stream_descriptor_service::native_type]
 
+The native descriptor type.
 
-Implements the FIONREAD IO control command.
+ typedef implementation_defined native_type;
 
 
-[heading Example]
-
 
 
- boost::asio::posix::stream_descriptor descriptor(io_service);
- ...
- boost::asio::descriptor_base::bytes_readable command(true);
- descriptor.io_control(command);
- std::size_t bytes_readable = command.get();
+[endsect]
 
 
 
+[section:read_some posix::stream_descriptor_service::read_some]
 
+Read some data from the stream.
 
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t read_some(
+ implementation_type & impl,
+ const MutableBufferSequence & buffers,
+ boost::system::error_code & ec);
 
-[endsect]
 
 
+[endsect]
 
-[section:non_blocking_io posix::descriptor_base::non_blocking_io]
 
-IO control command to set the blocking mode of the descriptor.
 
- typedef implementation_defined non_blocking_io;
+[section:shutdown_service posix::stream_descriptor_service::shutdown_service]
 
+Destroy all user-defined descriptorr objects owned by the service.
 
+ void shutdown_service();
 
-Implements the FIONBIO IO control command.
 
 
-[heading Example]
-
+[endsect]
 
 
- boost::asio::posix::stream_descriptor descriptor(io_service);
- ...
- boost::asio::descriptor_base::non_blocking_io command(true);
- descriptor.io_control(command);
 
+[section:stream_descriptor_service posix::stream_descriptor_service::stream_descriptor_service]
 
+Construct a new stream descriptor service for the specified io_service.
 
+ stream_descriptor_service(
+ boost::asio::io_service & io_service);
 
 
 
@@ -37447,11 +43329,16 @@
 
 
 
-[section:_descriptor_base posix::descriptor_base::~descriptor_base]
+[section:write_some posix::stream_descriptor_service::write_some]
 
-Protected destructor to prevent deletion through this type.
+Write the given data to the stream.
 
- ~descriptor_base();
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t write_some(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ boost::system::error_code & ec);
 
 
 
@@ -37461,12 +43348,14 @@
 
 [endsect]
 
+[section:raw_socket_service raw_socket_service]
 
-[section:posix__stream_descriptor posix::stream_descriptor]
-
-Typedef for the typical usage of a stream-oriented descriptor.
+Default service implementation for a raw socket.
 
- typedef basic_stream_descriptor stream_descriptor;
+ template<
+ typename ``[link boost_asio.reference.Protocol Protocol]``>
+ class raw_socket_service :
+ public io_service::service
 
 
 [heading Types]
@@ -37475,43 +43364,29 @@
 
   [
 
- [[link boost_asio.reference.posix__basic_stream_descriptor.bytes_readable [*bytes_readable]]]
- [IO control command to get the amount of data that can be read without blocking. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.posix__basic_stream_descriptor.implementation_type [*implementation_type]]]
- [The underlying implementation type of I/O object. ]
-
- ]
-
- [
-
- [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer_type [*lowest_layer_type]]]
- [A basic_descriptor is always the lowest layer. ]
+ [[link boost_asio.reference.raw_socket_service.endpoint_type [*endpoint_type]]]
+ [The endpoint type. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_stream_descriptor.native_type [*native_type]]]
- [The native representation of a descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.implementation_type [*implementation_type]]]
+ [The type of a raw socket. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking_io [*non_blocking_io]]]
- [IO control command to set the blocking mode of the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.native_type [*native_type]]]
+ [The native socket type. ]
   
   ]
 
   [
 
- [[link boost_asio.reference.posix__basic_stream_descriptor.service_type [*service_type]]]
- [The type of the service that will be used to provide I/O operations. ]
+ [[link boost_asio.reference.raw_socket_service.protocol_type [*protocol_type]]]
+ [The protocol type. ]
   
   ]
 
@@ -37522,218 +43397,158 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.assign [*assign]]]
- [Assign an existing native descriptor to the descriptor. ]
- ]
-
- [
- [[link boost_asio.reference.posix__basic_stream_descriptor.async_read_some [*async_read_some]]]
- [Start an asynchronous read. ]
+ [[link boost_asio.reference.raw_socket_service.assign [*assign]]]
+ [Assign an existing native socket to a raw socket. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.async_write_some [*async_write_some]]]
- [Start an asynchronous write. ]
+ [[link boost_asio.reference.raw_socket_service.async_connect [*async_connect]]]
+ [Start an asynchronous connect. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor [*basic_stream_descriptor]]]
- [Construct a basic_stream_descriptor without opening it. ]
+ [[link boost_asio.reference.raw_socket_service.async_receive [*async_receive]]]
+ [Start an asynchronous receive. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.cancel [*cancel]]]
- [Cancel all asynchronous operations associated with the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.async_receive_from [*async_receive_from]]]
+ [Start an asynchronous receive that will get the endpoint of the sender. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.close [*close]]]
- [Close the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.async_send [*async_send]]]
+ [Start an asynchronous send. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.get_io_service [*get_io_service]]]
- [Get the io_service associated with the object. ]
+ [[link boost_asio.reference.raw_socket_service.async_send_to [*async_send_to]]]
+ [Start an asynchronous send. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.io_control [*io_control]]]
- [Perform an IO control command on the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.at_mark [*at_mark]]]
+ [Determine whether the socket is at the out-of-band data mark. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service associated with the object. ]
+ [[link boost_asio.reference.raw_socket_service.available [*available]]]
+ [Determine the number of bytes available for reading. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.is_open [*is_open]]]
- [Determine whether the descriptor is open. ]
+ [[link boost_asio.reference.raw_socket_service.bind [*bind]]]
+ []
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer [*lowest_layer]]]
- [Get a reference to the lowest layer. ]
+ [[link boost_asio.reference.raw_socket_service.cancel [*cancel]]]
+ [Cancel all asynchronous operations associated with the socket. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.native [*native]]]
- [Get the native descriptor representation. ]
+ [[link boost_asio.reference.raw_socket_service.close [*close]]]
+ [Close a raw socket implementation. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.read_some [*read_some]]]
- [Read some data from the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.connect [*connect]]]
+ [Connect the raw socket to the specified endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.write_some [*write_some]]]
- [Write some data to the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.construct [*construct]]]
+ [Construct a new raw socket implementation. ]
   ]
   
-]
-
-[heading Protected Data Members]
-[table
- [[Name][Description]]
-
- [
- [[link boost_asio.reference.posix__basic_stream_descriptor.implementation [*implementation]]]
- [The underlying implementation of the I/O object. ]
- ]
-
   [
- [[link boost_asio.reference.posix__basic_stream_descriptor.service [*service]]]
- [The service associated with the I/O object. ]
+ [[link boost_asio.reference.raw_socket_service.destroy [*destroy]]]
+ [Destroy a raw socket implementation. ]
   ]
-
-]
-
-The posix::basic_stream_descriptor class template provides asynchronous and blocking stream-oriented descriptor functionality.
-
-
-[heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
-
-[*Shared] [*objects:] Unsafe.
-
-
-
-
-[endsect]
-
-
-[section:posix__stream_descriptor_service posix::stream_descriptor_service]
-
-Default service implementation for a stream descriptor.
-
- class stream_descriptor_service :
- public io_service::service
-
-
-[heading Types]
-[table
- [[Name][Description]]
-
   [
-
- [[link boost_asio.reference.posix__stream_descriptor_service.implementation_type [*implementation_type]]]
- [The type of a stream descriptor implementation. ]
-
+ [[link boost_asio.reference.raw_socket_service.get_io_service [*get_io_service]]]
+ [Get the io_service object that owns the service. ]
   ]
-
- [
-
- [[link boost_asio.reference.posix__stream_descriptor_service.native_type [*native_type]]]
- [The native descriptor type. ]
   
- ]
-
-]
-
-[heading Member Functions]
-[table
- [[Name][Description]]
-
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.assign [*assign]]]
- [Assign an existing native descriptor to a stream descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.get_option [*get_option]]]
+ [Get a socket option. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.async_read_some [*async_read_some]]]
- [Start an asynchronous read. ]
+ [[link boost_asio.reference.raw_socket_service.io_control [*io_control]]]
+ [Perform an IO control command on the socket. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.async_write_some [*async_write_some]]]
- [Start an asynchronous write. ]
+ [[link boost_asio.reference.raw_socket_service.io_service [*io_service]]]
+ [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.cancel [*cancel]]]
- [Cancel all asynchronous operations associated with the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.is_open [*is_open]]]
+ [Determine whether the socket is open. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.close [*close]]]
- [Close a stream descriptor implementation. ]
+ [[link boost_asio.reference.raw_socket_service.local_endpoint [*local_endpoint]]]
+ [Get the local endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.construct [*construct]]]
- [Construct a new stream descriptor implementation. ]
+ [[link boost_asio.reference.raw_socket_service.native [*native]]]
+ [Get the native socket implementation. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.destroy [*destroy]]]
- [Destroy a stream descriptor implementation. ]
+ [[link boost_asio.reference.raw_socket_service.open [*open]]]
+ []
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.get_io_service [*get_io_service]]]
- [Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.raw_socket_service.raw_socket_service [*raw_socket_service]]]
+ [Construct a new raw socket service for the specified io_service. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.io_control [*io_control]]]
- [Perform an IO control command on the descriptor. ]
+ [[link boost_asio.reference.raw_socket_service.receive [*receive]]]
+ [Receive some data from the peer. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.io_service [*io_service]]]
- [(Deprecated: use get_io_service().) Get the io_service object that owns the service. ]
+ [[link boost_asio.reference.raw_socket_service.receive_from [*receive_from]]]
+ [Receive raw data with the endpoint of the sender. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.is_open [*is_open]]]
- [Determine whether the descriptor is open. ]
+ [[link boost_asio.reference.raw_socket_service.remote_endpoint [*remote_endpoint]]]
+ [Get the remote endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.native [*native]]]
- [Get the native descriptor implementation. ]
+ [[link boost_asio.reference.raw_socket_service.send [*send]]]
+ [Send the given data to the peer. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.read_some [*read_some]]]
- [Read some data from the stream. ]
+ [[link boost_asio.reference.raw_socket_service.send_to [*send_to]]]
+ [Send raw data to the specified endpoint. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.shutdown_service [*shutdown_service]]]
- [Destroy all user-defined descriptorr objects owned by the service. ]
+ [[link boost_asio.reference.raw_socket_service.set_option [*set_option]]]
+ [Set a socket option. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.stream_descriptor_service [*stream_descriptor_service]]]
- [Construct a new stream descriptor service for the specified io_service. ]
+ [[link boost_asio.reference.raw_socket_service.shutdown [*shutdown]]]
+ [Disable sends or receives on the socket. ]
   ]
   
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.write_some [*write_some]]]
- [Write the given data to the stream. ]
+ [[link boost_asio.reference.raw_socket_service.shutdown_service [*shutdown_service]]]
+ [Destroy all user-defined handler objects owned by the service. ]
   ]
   
 ]
@@ -37743,20 +43558,21 @@
   [[Name][Description]]
 
   [
- [[link boost_asio.reference.posix__stream_descriptor_service.id [*id]]]
+ [[link boost_asio.reference.raw_socket_service.id [*id]]]
     [The unique service identifier. ]
   ]
 
 ]
 
 
-[section:assign posix::stream_descriptor_service::assign]
+[section:assign raw_socket_service::assign]
 
-Assign an existing native descriptor to a stream descriptor.
+Assign an existing native socket to a raw socket.
 
   boost::system::error_code assign(
       implementation_type & impl,
- const native_type & native_descriptor,
+ const protocol_type & protocol,
+ const native_type & native_socket,
       boost::system::error_code & ec);
 
 
@@ -37765,17 +43581,35 @@
 
 
 
-[section:async_read_some posix::stream_descriptor_service::async_read_some]
+[section:async_connect raw_socket_service::async_connect]
+
+Start an asynchronous connect.
+
+ template<
+ typename ``[link boost_asio.reference.ConnectHandler ConnectHandler]``>
+ void async_connect(
+ implementation_type & impl,
+ const endpoint_type & peer_endpoint,
+ ConnectHandler handler);
 
-Start an asynchronous read.
+
+
+[endsect]
+
+
+
+[section:async_receive raw_socket_service::async_receive]
+
+Start an asynchronous receive.
 
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
- void async_read_some(
+ void async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
- ReadHandler descriptorr);
+ socket_base::message_flags flags,
+ ReadHandler handler);
 
 
 
@@ -37783,17 +43617,38 @@
 
 
 
-[section:async_write_some posix::stream_descriptor_service::async_write_some]
+[section:async_receive_from raw_socket_service::async_receive_from]
 
-Start an asynchronous write.
+Start an asynchronous receive that will get the endpoint of the sender.
+
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
+ typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
+ void async_receive_from(
+ implementation_type & impl,
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags,
+ ReadHandler handler);
+
+
+
+[endsect]
+
+
+
+[section:async_send raw_socket_service::async_send]
+
+Start an asynchronous send.
 
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
- void async_write_some(
+ void async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
- WriteHandler descriptorr);
+ socket_base::message_flags flags,
+ WriteHandler handler);
 
 
 
@@ -37801,9 +43656,72 @@
 
 
 
-[section:cancel posix::stream_descriptor_service::cancel]
+[section:async_send_to raw_socket_service::async_send_to]
+
+Start an asynchronous send.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
+ typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
+ void async_send_to(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags,
+ WriteHandler handler);
+
+
+
+[endsect]
+
+
+
+[section:at_mark raw_socket_service::at_mark]
+
+Determine whether the socket is at the out-of-band data mark.
+
+ bool at_mark(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
+
+
+
+[endsect]
+
+
+
+[section:available raw_socket_service::available]
+
+Determine the number of bytes available for reading.
+
+ std::size_t available(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
 
-Cancel all asynchronous operations associated with the descriptor.
+
+
+[endsect]
+
+
+
+[section:bind raw_socket_service::bind]
+
+
+
+ boost::system::error_code bind(
+ implementation_type & impl,
+ const endpoint_type & endpoint,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:cancel raw_socket_service::cancel]
+
+Cancel all asynchronous operations associated with the socket.
 
   boost::system::error_code cancel(
       implementation_type & impl,
@@ -37815,9 +43733,9 @@
 
 
 
-[section:close posix::stream_descriptor_service::close]
+[section:close raw_socket_service::close]
 
-Close a stream descriptor implementation.
+Close a raw socket implementation.
 
   boost::system::error_code close(
       implementation_type & impl,
@@ -37829,9 +43747,24 @@
 
 
 
-[section:construct posix::stream_descriptor_service::construct]
+[section:connect raw_socket_service::connect]
+
+Connect the raw socket to the specified endpoint.
+
+ boost::system::error_code connect(
+ implementation_type & impl,
+ const endpoint_type & peer_endpoint,
+ boost::system::error_code & ec);
 
-Construct a new stream descriptor implementation.
+
+
+[endsect]
+
+
+
+[section:construct raw_socket_service::construct]
+
+Construct a new raw socket implementation.
 
   void construct(
       implementation_type & impl);
@@ -37842,9 +43775,9 @@
 
 
 
-[section:destroy posix::stream_descriptor_service::destroy]
+[section:destroy raw_socket_service::destroy]
 
-Destroy a stream descriptor implementation.
+Destroy a raw socket implementation.
 
   void destroy(
       implementation_type & impl);
@@ -37855,7 +43788,20 @@
 
 
 
-[section:get_io_service posix::stream_descriptor_service::get_io_service]
+[section:endpoint_type raw_socket_service::endpoint_type]
+
+The endpoint type.
+
+ typedef Protocol::endpoint endpoint_type;
+
+
+
+
+[endsect]
+
+
+
+[section:get_io_service raw_socket_service::get_io_service]
 
 
 ['Inherited from io_service.]
@@ -37870,7 +43816,24 @@
 
 
 
-[section:id posix::stream_descriptor_service::id]
+[section:get_option raw_socket_service::get_option]
+
+Get a socket option.
+
+ template<
+ typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
+ boost::system::error_code get_option(
+ const implementation_type & impl,
+ GettableSocketOption & option,
+ boost::system::error_code & ec) const;
+
+
+
+[endsect]
+
+
+
+[section:id raw_socket_service::id]
 
 The unique service identifier.
 
@@ -37882,9 +43845,9 @@
 
 
 
-[section:implementation_type posix::stream_descriptor_service::implementation_type]
+[section:implementation_type raw_socket_service::implementation_type]
 
-The type of a stream descriptor implementation.
+The type of a raw socket.
 
   typedef implementation_defined implementation_type;
 
@@ -37895,9 +43858,9 @@
 
 
 
-[section:io_control posix::stream_descriptor_service::io_control]
+[section:io_control raw_socket_service::io_control]
 
-Perform an IO control command on the descriptor.
+Perform an IO control command on the socket.
 
   template<
       typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
@@ -37912,7 +43875,7 @@
 
 
 
-[section:io_service posix::stream_descriptor_service::io_service]
+[section:io_service raw_socket_service::io_service]
 
 
 ['Inherited from io_service.]
@@ -37927,9 +43890,9 @@
 
 
 
-[section:is_open posix::stream_descriptor_service::is_open]
+[section:is_open raw_socket_service::is_open]
 
-Determine whether the descriptor is open.
+Determine whether the socket is open.
 
   bool is_open(
       const implementation_type & impl) const;
@@ -37940,9 +43903,23 @@
 
 
 
-[section:native posix::stream_descriptor_service::native]
+[section:local_endpoint raw_socket_service::local_endpoint]
 
-Get the native descriptor implementation.
+Get the local endpoint.
+
+ endpoint_type local_endpoint(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
+
+
+
+[endsect]
+
+
+
+[section:native raw_socket_service::native]
+
+Get the native socket implementation.
 
   native_type native(
       implementation_type & impl);
@@ -37953,9 +43930,9 @@
 
 
 
-[section:native_type posix::stream_descriptor_service::native_type]
+[section:native_type raw_socket_service::native_type]
 
-The native descriptor type.
+The native socket type.
 
   typedef implementation_defined native_type;
 
@@ -37966,15 +43943,57 @@
 
 
 
-[section:read_some posix::stream_descriptor_service::read_some]
+[section:open raw_socket_service::open]
 
-Read some data from the stream.
+
+
+ boost::system::error_code open(
+ implementation_type & impl,
+ const protocol_type & protocol,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:protocol_type raw_socket_service::protocol_type]
+
+The protocol type.
+
+ typedef Protocol protocol_type;
+
+
+
+
+[endsect]
+
+
+
+[section:raw_socket_service raw_socket_service::raw_socket_service]
+
+Construct a new raw socket service for the specified io_service.
+
+ raw_socket_service(
+ boost::asio::io_service & io_service);
+
+
+
+[endsect]
+
+
+
+[section:receive raw_socket_service::receive]
+
+Receive some data from the peer.
 
   template<
       typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
- std::size_t read_some(
+ std::size_t receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
+ socket_base::message_flags flags,
       boost::system::error_code & ec);
 
 
@@ -37983,11 +44002,18 @@
 
 
 
-[section:shutdown_service posix::stream_descriptor_service::shutdown_service]
+[section:receive_from raw_socket_service::receive_from]
 
-Destroy all user-defined descriptorr objects owned by the service.
+Receive raw data with the endpoint of the sender.
 
- void shutdown_service();
+ template<
+ typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
+ std::size_t receive_from(
+ implementation_type & impl,
+ const MutableBufferSequence & buffers,
+ endpoint_type & sender_endpoint,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
 
 
 
@@ -37995,12 +44021,13 @@
 
 
 
-[section:stream_descriptor_service posix::stream_descriptor_service::stream_descriptor_service]
+[section:remote_endpoint raw_socket_service::remote_endpoint]
 
-Construct a new stream descriptor service for the specified io_service.
+Get the remote endpoint.
 
- stream_descriptor_service(
- boost::asio::io_service & io_service);
+ endpoint_type remote_endpoint(
+ const implementation_type & impl,
+ boost::system::error_code & ec) const;
 
 
 
@@ -38008,15 +44035,67 @@
 
 
 
-[section:write_some posix::stream_descriptor_service::write_some]
+[section:send raw_socket_service::send]
 
-Write the given data to the stream.
+Send the given data to the peer.
 
   template<
       typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
- std::size_t write_some(
+ std::size_t send(
+ implementation_type & impl,
+ const ConstBufferSequence & buffers,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:send_to raw_socket_service::send_to]
+
+Send raw data to the specified endpoint.
+
+ template<
+ typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
+ std::size_t send_to(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
+ const endpoint_type & destination,
+ socket_base::message_flags flags,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:set_option raw_socket_service::set_option]
+
+Set a socket option.
+
+ template<
+ typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
+ boost::system::error_code set_option(
+ implementation_type & impl,
+ const SettableSocketOption & option,
+ boost::system::error_code & ec);
+
+
+
+[endsect]
+
+
+
+[section:shutdown raw_socket_service::shutdown]
+
+Disable sends or receives on the socket.
+
+ boost::system::error_code shutdown(
+ implementation_type & impl,
+ socket_base::shutdown_type what,
       boost::system::error_code & ec);
 
 
@@ -38025,6 +44104,18 @@
 
 
 
+[section:shutdown_service raw_socket_service::shutdown_service]
+
+Destroy all user-defined handler objects owned by the service.
+
+ void shutdown_service();
+
+
+
+[endsect]
+
+
+
 [endsect]
 
 [section:read read]

Modified: branches/proto/v4/libs/asio/doc/reference.xsl
==============================================================================
--- branches/proto/v4/libs/asio/doc/reference.xsl (original)
+++ branches/proto/v4/libs/asio/doc/reference.xsl 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -916,8 +916,8 @@
 
 
 <xsl:template name="enum">
- enum <xsl:value-of select="name"/>
-
+ enum <xsl:value-of select="name"/><xsl:text>
+</xsl:text><xsl:if test="count(enumvalue) &gt; 0">
 [heading Values]
 [variablelist
 <xsl:for-each select="enumvalue">
@@ -927,6 +927,7 @@
   ]
 </xsl:for-each>
 ]
+</xsl:if>
 </xsl:template>
 
 

Modified: branches/proto/v4/libs/interprocess/doc/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/interprocess/doc/Jamfile.v2 (original)
+++ branches/proto/v4/libs/interprocess/doc/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 # Boost.Interprocess library documentation Jamfile ---------------------------------
 #
-# Copyright Ion Gaztañaga 2005-2007. Use, modification and
+# Copyright Ion Gaztanaga 2005-2007. Use, modification and
 # distribution is subject to 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/proto/v4/libs/interprocess/example/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/interprocess/example/Jamfile.v2 (original)
+++ branches/proto/v4/libs/interprocess/example/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 # Boost Interprocess Library Example Jamfile
 
-# (C) Copyright Ion Gaztañaga 2006.
+# (C) Copyright Ion Gaztanaga 2006.
 # Use, modification and distribution are subject to 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/proto/v4/libs/interprocess/test/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/interprocess/test/Jamfile.v2 (original)
+++ branches/proto/v4/libs/interprocess/test/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 # Boost Interprocess Library Test Jamfile
 
-# (C) Copyright Ion Gaztañaga 2006.
+# (C) Copyright Ion Gaztanaga 2006.
 # Use, modification and distribution are subject to 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/proto/v4/libs/intrusive/doc/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/intrusive/doc/Jamfile.v2 (original)
+++ branches/proto/v4/libs/intrusive/doc/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 # Boost.Intrusive library documentation Jamfile
 #
-# Copyright Ion Gaztañaga 2006.
+# Copyright Ion Gaztanaga 2006.
 # 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/proto/v4/libs/intrusive/doc/intrusive.qbk
==============================================================================
--- branches/proto/v4/libs/intrusive/doc/intrusive.qbk (original)
+++ branches/proto/v4/libs/intrusive/doc/intrusive.qbk 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -3473,10 +3473,10 @@
 
 * [*Olaf Krzikalla] for the permission to continue his great work.
 
-* [*Joaquín M. López Muñoz] for his thorough review, help, and ideas.
+* [*Joaquin M. Lopez Munoz] for his thorough review, help, and ideas.
 
 * [*Cory Nelson], [*Daniel James], [*Dave Harris], [*Guillaume Melquiond],
- [*Henri Bavestrello], [*Hervé Brönnimann], [*Kai Brüning], [*Kevin Sopp],
+ [*Henri Bavestrello], [*Herve Bronnimann], [*Kai Bruning], [*Kevin Sopp],
    [*Paul Rose], [*Pavel Vozelinek], [*Howard Hinnant], [*Olaf Krzikalla],
    [*Samuel Debionne], [*Stjepan Rajko], [*Thorsten Ottosen], [*Tobias Schwinger],
    [*Tom Brinkman] and [*Steven Watanabe]

Modified: branches/proto/v4/libs/intrusive/example/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/intrusive/example/Jamfile.v2 (original)
+++ branches/proto/v4/libs/intrusive/example/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 # Boost Intrusive Library Example Jamfile
 
-# (C) Copyright Ion Gaztañaga 2006-2007.
+# (C) Copyright Ion Gaztanaga 2006-2007.
 # Use, modification and distribution are subject to 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/proto/v4/libs/intrusive/perf/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/intrusive/perf/Jamfile.v2 (original)
+++ branches/proto/v4/libs/intrusive/perf/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,6 +1,6 @@
 # Boost Intrusive Library Performance test Jamfile
 
-# (C) Copyright Ion Gaztañaga 2006-2007.
+# (C) Copyright Ion Gaztanaga 2006-2007.
 # Use, modification and distribution are subject to 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/proto/v4/libs/intrusive/test/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/intrusive/test/Jamfile.v2 (original)
+++ branches/proto/v4/libs/intrusive/test/Jamfile.v2 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1,5 +1,5 @@
 # Boost Intrusive Library Test Jamfile
-# (C) Copyright Ion Gaztañaga 2006.
+# (C) Copyright Ion Gaztanaga 2006.
 # Use, modification and distribution are subject to 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/proto/v4/libs/optional/test/optional_test.cpp
==============================================================================
--- branches/proto/v4/libs/optional/test/optional_test.cpp (original)
+++ branches/proto/v4/libs/optional/test/optional_test.cpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -10,7 +10,7 @@
 // fernando_cacciola_at_[hidden]
 //
 // Revisions:
-// 10 May 2008 (added more swap tests)
+// 12 May 2008 (added more swap tests)
 //
 #include<iostream>
 #include<stdexcept>
@@ -1099,51 +1099,66 @@
 } // End of namespace optional_swap_test.
 
 
+namespace boost {
+
 //
 // Compile time tweaking on whether or not swap should use the default constructor:
 //
-template <> struct boost::optional_swap_should_use_default_constructor<
- optional_swap_test::class_whose_default_ctor_should_be_used> : boost::mpl::true_ {} ;
 
-template <> struct boost::optional_swap_should_use_default_constructor<
- optional_swap_test::class_whose_default_ctor_should_not_be_used> : boost::mpl::false_ {} ;
+template <> struct optional_swap_should_use_default_constructor<
+ optional_swap_test::class_whose_default_ctor_should_be_used> : mpl::true_ {} ;
+
+template <> struct optional_swap_should_use_default_constructor<
+ optional_swap_test::class_whose_default_ctor_should_not_be_used> : mpl::false_ {} ;
+
+template <class T> struct optional_swap_should_use_default_constructor<
+ optional_swap_test::template_whose_default_ctor_should_be_used<T> > : mpl::true_ {} ;
 
-template <class T> struct boost::optional_swap_should_use_default_constructor<
- optional_swap_test::template_whose_default_ctor_should_be_used<T> > : boost::mpl::true_ {} ;
 
 //
-// Swap specializations:
+// Specialization of boost::swap:
 //
 template <>
-void boost::swap(boost::optional<optional_swap_test::class_whose_explicit_ctor_should_be_used> & x, boost::optional<optional_swap_test::class_whose_explicit_ctor_should_be_used> & y)
+void swap(optional<optional_swap_test::class_whose_explicit_ctor_should_be_used> & x, optional<optional_swap_test::class_whose_explicit_ctor_should_be_used> & y)
 {
   optional_swap_test::swap(x, y);
 }
 
+} // namespace boost
+
+
+namespace std {
+
+//
+// Specializations of std::swap:
+//
+
 template <>
-void std::swap(optional_swap_test::class_whose_default_ctor_should_be_used & x, optional_swap_test::class_whose_default_ctor_should_be_used & y)
+void swap(optional_swap_test::class_whose_default_ctor_should_be_used & x, optional_swap_test::class_whose_default_ctor_should_be_used & y)
 {
   optional_swap_test::swap(x, y);
 }
 
 template <>
-void std::swap(optional_swap_test::class_whose_default_ctor_should_not_be_used & x, optional_swap_test::class_whose_default_ctor_should_not_be_used & y)
+void swap(optional_swap_test::class_whose_default_ctor_should_not_be_used & x, optional_swap_test::class_whose_default_ctor_should_not_be_used & y)
 {
   optional_swap_test::swap(x, y);
 }
 
 template <>
-void std::swap(optional_swap_test::class_without_default_ctor & x, optional_swap_test::class_without_default_ctor & y)
+void swap(optional_swap_test::class_without_default_ctor & x, optional_swap_test::class_without_default_ctor & y)
 {
   optional_swap_test::swap(x, y);
 }
 
 template <>
-void std::swap(optional_swap_test::class_whose_explicit_ctor_should_be_used & x, optional_swap_test::class_whose_explicit_ctor_should_be_used & y)
+void swap(optional_swap_test::class_whose_explicit_ctor_should_be_used & x, optional_swap_test::class_whose_explicit_ctor_should_be_used & y)
 {
   optional_swap_test::swap(x, y);
 }
 
+} // namespace std
+
 
 //
 // Tests whether the swap function works properly for optional<T>.

Modified: branches/proto/v4/libs/regex/src/usinstances.cpp
==============================================================================
--- branches/proto/v4/libs/regex/src/usinstances.cpp (original)
+++ branches/proto/v4/libs/regex/src/usinstances.cpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -25,6 +25,8 @@
 
 #ifdef _DLL_CPPLIB
 #include <boost/detail/workaround.hpp>
+#include <memory>
+#include <string>
 //
 // This is a horrible workaround, without declaring these symbols extern we get
 // duplicate symbol errors when linking if the application is built without

Modified: branches/proto/v4/libs/regex/src/wc_regex_traits.cpp
==============================================================================
--- branches/proto/v4/libs/regex/src/wc_regex_traits.cpp (original)
+++ branches/proto/v4/libs/regex/src/wc_regex_traits.cpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -23,6 +23,8 @@
 #include <boost/detail/workaround.hpp>
 
 #ifdef _DLL_CPPLIB
+#include <memory>
+#include <string>
 //
 // This is a horrible workaround, without declaring these symbols extern we get
 // duplicate symbol errors when linking if the application is built without

Modified: branches/proto/v4/libs/regex/test/regress/test_escapes.cpp
==============================================================================
--- branches/proto/v4/libs/regex/test/regress/test_escapes.cpp (original)
+++ branches/proto/v4/libs/regex/test/regress/test_escapes.cpp 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -109,6 +109,9 @@
    TEST_REGEX_SEARCH("a\\B", perl, "ab", match_default, make_array(0, 1, -2, -2));
    TEST_REGEX_SEARCH("a\\B", perl, "a", match_default, make_array(-2, -2));
    TEST_REGEX_SEARCH("a\\B", perl, "a ", match_default, make_array(-2, -2));
+ TEST_REGEX_SEARCH("\\By\\b", perl, "xy", match_default, make_array(1, 2, -2, -2));
+ TEST_REGEX_SEARCH("\\by\\B", perl, "yz", match_default, make_array(0, 1, -2, -2));
+ TEST_REGEX_SEARCH("\\B\\*\\B", perl, " * ", match_default, make_array(1, 2, -2, -2));
    // buffer operators:
    TEST_REGEX_SEARCH("\\`abc", perl, "abc", match_default, make_array(0, 3, -2, -2));
    TEST_REGEX_SEARCH("\\`abc", perl, "\nabc", match_default, make_array(-2, -2));

Modified: branches/proto/v4/libs/thread/doc/thread_ref.qbk
==============================================================================
--- branches/proto/v4/libs/thread/doc/thread_ref.qbk (original)
+++ branches/proto/v4/libs/thread/doc/thread_ref.qbk 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -43,11 +43,21 @@
       // this leads to undefined behaviour
 
 If you wish to construct an instance of __thread__ with a function or callable object that requires arguments to be supplied,
-this can be done using `boost::bind`:
+this can be done by passing additional arguments to the __thread__ constructor:
 
     void find_the_question(int the_answer);
 
- boost::thread deep_thought_2(boost::bind(find_the_question,42));
+ boost::thread deep_thought_2(find_the_question,42);
+
+The arguments are ['copied] into the internal thread structure: if a reference is required, use `boost::ref`, just as for references
+to callable functions.
+
+There is an unspecified limit on the number of additional arguments that can be passed.
+
+[heading Exceptions in thread functions]
+
+If the function or callable object passed to the __thread__ constructor propagates an exception when invoked that is not of type
+__thread_interrupted__, `std::terminate()` is called.
 
 [heading Joining and detaching]
 
@@ -212,7 +222,9 @@
 
 [[Preconditions:] [`Callable` must by copyable.]]
 
-[[Effects:] [`func` is copied into storage managed internally by the thread library, and that copy is invoked on a newly-created thread of execution.]]
+[[Effects:] [`func` is copied into storage managed internally by the thread library, and that copy is invoked on a newly-created
+thread of execution. If this invocation results in an exception being propagated into the internals of the thread library that is
+not of type __thread_interrupted__, then `std::terminate()` will be called.]]
 
 [[Postconditions:] [`*this` refers to the newly created thread of execution.]]
 

Modified: branches/proto/v4/status/explicit-failures-markup.xml
==============================================================================
--- branches/proto/v4/status/explicit-failures-markup.xml (original)
+++ branches/proto/v4/status/explicit-failures-markup.xml 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -2519,10 +2519,10 @@
         <mark-expected-failures>
             <test name="optional_test"/>
             <toolset name="msvc-7.1"/>
- <note author="Niels Dekker" date="2008-04-28">
+ <note author="Niels Dekker" date="2008-05-12">
             MSVC 2003 (7.1) does not always do argument-dependent lookup (ADL), when it should.
             This causes test failures when swapping boost::optional&lt;T&gt;, for
- T = optional_swap_test::class_whose_default_ctor_should_be_used.
+ T = optional_swap_test::template_whose_default_ctor_should_be_used&lt;char&gt;.
             </note>
         </mark-expected-failures>
     </library>

Modified: branches/proto/v4/tools/boostbook/xsl/type.xsl
==============================================================================
--- branches/proto/v4/tools/boostbook/xsl/type.xsl (original)
+++ branches/proto/v4/tools/boostbook/xsl/type.xsl 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -1072,7 +1072,7 @@
           <xsl:with-param name="allow-synopsis-anchors" select="true()"/>
         </xsl:call-template>
         <!-- Associated free functions -->
- <xsl:apply-templates select="ancestor-or-self::*/free-function-group"
+ <xsl:apply-templates select="free-function-group"
           mode="synopsis">
           <xsl:with-param name="indentation" select="$indentation"/>
           <xsl:with-param name="class" select="@name"/>

Modified: branches/proto/v4/tools/build/v2/kernel/modules.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/kernel/modules.jam (original)
+++ branches/proto/v4/tools/build/v2/kernel/modules.jam 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -19,6 +19,7 @@
 
 # Meant to be invoked from import when no __test__ rule is defined in the given
 # module.
+#
 local rule no-test-defined
 {
     import modules ;
@@ -30,6 +31,7 @@
 
 
 # Return the binding of the given module.
+#
 rule binding ( module )
 {
     return $($(module).__binding__) ;
@@ -39,6 +41,7 @@
 # Sets the module-local value of a variable. This is the most reliable way to
 # set a module-local variable in a different module; it eliminates issues of
 # name shadowing due to dynamic scoping.
+#
 rule poke ( module-name ? : variables + : value * )
 {
     module $(<)
@@ -51,6 +54,7 @@
 # Returns the module-local value of a variable. This is the most reliable way to
 # examine a module-local variable in a different module; it eliminates issues of
 # name shadowing due to dynamic scoping.
+#
 rule peek ( module-name ? : variables + )
 {
     module $(<)
@@ -63,7 +67,8 @@
 # Call the given rule locally in the given module. Use this for rules accepting
 # rule names as arguments, so that the passed rule may be invoked in the context
 # of the rule's caller (for example, if the rule accesses module globals or is a
-# local rule).
+# local rule). Note that rules called this way may accept at most 8 parmeters.
+#
 rule call-in ( module-name ? : rule-name args * : * )
 {
     module $(module-name)
@@ -75,18 +80,24 @@
 
 # Given a possibly qualified rule name and arguments, remove any initial module
 # qualification from the rule and invoke it in that module. If there is no
-# module qualification, the rule is invoked in the global module.
+# module qualification, the rule is invoked in the global module. Note that
+# rules called this way may accept at most 8 parmeters.
+#
 rule call-locally ( qualified-rule-name args * : * )
 {
     local module-rule = [ MATCH (.*)\\.(.*) : $(qualified-rule-name) ] ;
     local rule-name = $(module-rule[2]) ;
     rule-name ?= $(qualified-rule-name) ;
- return [ call-in $(module-rule[1]) : $(rule-name) $(args)
- : $(2) : $(3) : $(4) : $(5) : $(6) : $(7) : $(8) : $(9) ] ;
+ # We pass only 8 parameters here since Boost Jam allows at most 9 rule
+ # parameter positions and the call-in rule already uses up the initial
+ # position for the module name.
+ return [ call-in $(module-rule[1]) : $(rule-name) $(args) : $(2) : $(3) :
+ $(4) : $(5) : $(6) : $(7) : $(8) ] ;
 }
 
 
 # Load the indicated module if it is not already loaded.
+#
 rule load (
       module-name # Name of module to load. Rules will be defined in this
                    # module.
@@ -193,6 +204,7 @@
 
 # This helper is used by load (above) to record the binding (path) of each
 # loaded module.
+#
 rule record-binding ( module-target : binding )
 {
     $(.loading[-1]).__binding__ = $(binding) ;
@@ -203,6 +215,7 @@
 # slashes and all detectable redundancy removed. Something like this is probably
 # needed in path.jam, but I'm not sure of that, I don't understand it, and I'm
 # not ready to move all of path.jam into the kernel.
+#
 local rule normalize-raw-paths ( paths * )
 {
     local result ;
@@ -224,6 +237,7 @@
 # If rules-opt = '*', all rules from the indicated module are imported into the
 # caller's module. If rename-opt is supplied, it must have the same number of
 # elements as rules-opt.
+#
 rule import ( module-names + : rules-opt * : rename-opt * )
 {
     if ( $(rules-opt) = * || ! $(rules-opt) ) && $(rename-opt)
@@ -288,10 +302,12 @@
     }
 }
 
+
 # Define exported copies in $(target-module) of all rules exported from
 # $(source-module). Also make them available in the global module with
 # qualification, so that it is just as though the rules were defined originally
 # in $(target-module).
+#
 rule clone-rules ( source-module target-module )
 {
     local rules = [ RULENAMES $(source-module) ] ;

Modified: branches/proto/v4/tools/build/v2/roll.sh
==============================================================================
--- branches/proto/v4/tools/build/v2/roll.sh (original)
+++ branches/proto/v4/tools/build/v2/roll.sh 2008-05-14 15:40:35 EDT (Wed, 14 May 2008)
@@ -50,7 +50,7 @@
 chmod a+x jam_src/build.bat
 cd .. && zip -r boost-build.zip boost-build && tar --bzip2 -cf boost-build.tar.bz2 boost-build
 # Copy packages to a location where they are grabbed for beta.boost.org
-cp boost-build.zip boost-build.tar.bz2 ~/public_html/boost_build_nightly
+cp userman.pdf boost-build.zip boost-build.tar.bz2 ~/public_html/boost_build_nightly
 cd boost-build
 
 chmod -R u+w *


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