[/
 / Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:reference Reference]

[xinclude quickref.xml]

[include requirements/asynchronous_operations.qbk]
[include requirements/AcceptHandler.qbk]
[include requirements/AsyncRandomAccessReadDevice.qbk]
[include requirements/AsyncRandomAccessWriteDevice.qbk]
[include requirements/AsyncReadStream.qbk]
[include requirements/AsyncWriteStream.qbk]
[include requirements/CompletionHandler.qbk]
[include requirements/ComposedConnectHandler.qbk]
[include requirements/ConnectHandler.qbk]
[include requirements/ConstBufferSequence.qbk]
[include requirements/ConvertibleToConstBuffer.qbk]
[include requirements/ConvertibleToMutableBuffer.qbk]
[include requirements/DatagramSocketService.qbk]
[include requirements/DescriptorService.qbk]
[include requirements/Endpoint.qbk]
[include requirements/GettableSerialPortOption.qbk]
[include requirements/GettableSocketOption.qbk]
[include requirements/Handler.qbk]
[include requirements/HandleService.qbk]
[include requirements/HandshakeHandler.qbk]
[include requirements/InternetProtocol.qbk]
[include requirements/IoControlCommand.qbk]
[include requirements/IoObjectService.qbk]
[include requirements/MutableBufferSequence.qbk]
[include requirements/ObjectHandleService.qbk]
[include requirements/Protocol.qbk]
[include requirements/RandomAccessHandleService.qbk]
[include requirements/RawSocketService.qbk]
[include requirements/ReadHandler.qbk]
[include requirements/ResolveHandler.qbk]
[include requirements/ResolverService.qbk]
[include requirements/SeqPacketSocketService.qbk]
[include requirements/SerialPortService.qbk]
[include requirements/Service.qbk]
[include requirements/SettableSerialPortOption.qbk]
[include requirements/SettableSocketOption.qbk]
[include requirements/ShutdownHandler.qbk]
[include requirements/SignalHandler.qbk]
[include requirements/SignalSetService.qbk]
[include requirements/SocketAcceptorService.qbk]
[include requirements/SocketService.qbk]
[include requirements/StreamDescriptorService.qbk]
[include requirements/StreamHandleService.qbk]
[include requirements/StreamSocketService.qbk]
[include requirements/SyncRandomAccessReadDevice.qbk]
[include requirements/SyncRandomAccessWriteDevice.qbk]
[include requirements/SyncReadStream.qbk]
[include requirements/SyncWriteStream.qbk]
[include requirements/TimeTraits.qbk]
[include requirements/TimerService.qbk]
[include requirements/WaitableTimerService.qbk]
[include requirements/WaitHandler.qbk]
[include requirements/WaitTraits.qbk]
[include requirements/WriteHandler.qbk]



[section:add_service add_service]

[indexterm1 add_service] 

  template<
      typename ``[link boost_asio.reference.Service Service]``>
  void add_service(
      io_service & ios,
      Service * svc);


This function is used to add a service to the [link boost_asio.reference.io_service `io_service`].


[heading Parameters]
    

[variablelist
  
[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]

[[svc][The service object. On success, ownership of the service object is transferred to the [link boost_asio.reference.io_service `io_service`]. When the [link boost_asio.reference.io_service `io_service`] object is destroyed, it will destroy the service object by performing: 
``
   delete static_cast<io_service::service*>(svc) 
``
]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::asio::service_already_exists][Thrown if a service of the given type is already present in the [link boost_asio.reference.io_service `io_service`].]]

[[boost::asio::invalid_service_owner][Thrown if the service's owning [link boost_asio.reference.io_service `io_service`] is not the [link boost_asio.reference.io_service `io_service`] object specified by the ios parameter. ]]

]



[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:asio_handler_allocate asio_handler_allocate]

[indexterm1 asio_handler_allocate] 
Default allocation function for handlers. 


  void * asio_handler_allocate(
      std::size_t size,
      ... );


Asynchronous operations may need to allocate temporary objects. Since asynchronous operations have a handler function object, these temporary objects can be said to be associated with the handler.

Implement asio\_handler\_allocate and asio\_handler\_deallocate for your own handlers to provide custom allocation for these temporary objects.

This default implementation is simply: 

   return ::operator new(size);





[heading Remarks]
      
All temporary objects associated with a handler will be deallocated before the upcall to the handler is performed. This allows the same memory to be reused for a subsequent asynchronous operation initiated by the handler.


[heading Example]
  


   class my_handler;

   void* asio_handler_allocate(std::size_t size, my_handler* context)
   {
     return ::operator new(size);
   }

   void asio_handler_deallocate(void* pointer, std::size_t size,
       my_handler* context)
   {
     ::operator delete(pointer);
   }






[heading Requirements]

[*Header: ][^boost/asio/handler_alloc_hook.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:asio_handler_deallocate asio_handler_deallocate]

[indexterm1 asio_handler_deallocate] 
Default deallocation function for handlers. 


  void asio_handler_deallocate(
      void * pointer,
      std::size_t size,
      ... );


Implement asio\_handler\_allocate and asio\_handler\_deallocate for your own handlers to provide custom allocation for the associated temporary objects.

This default implementation is simply: 

   ::operator delete(pointer);







[heading Requirements]

[*Header: ][^boost/asio/handler_alloc_hook.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:asio_handler_invoke asio_handler_invoke]

[indexterm1 asio_handler_invoke] 
Default invoke function for handlers. 


  template<
      typename Function>
  void asio_handler_invoke(
      Function function,
      ... );


Completion handlers for asynchronous operations are invoked by the [link boost_asio.reference.io_service `io_service`] associated with the corresponding object (e.g. a socket or deadline\_timer). Certain guarantees are made on when the handler may be invoked, in particular that a handler can only be invoked from a thread that is currently calling `run()` on the corresponding [link boost_asio.reference.io_service `io_service`] object. Handlers may subsequently be invoked through other objects (such as [link boost_asio.reference.io_service__strand `io_service::strand`] objects) that provide additional guarantees.

When asynchronous operations are composed from other asynchronous operations, all intermediate handlers should be invoked using the same method as the final handler. This is required to ensure that user-defined objects are not accessed in a way that may violate the guarantees. This hooking function ensures that the invoked method used for the final handler is accessible at each intermediate step.

Implement asio\_handler\_invoke for your own handlers to specify a custom invocation strategy.

This default implementation is simply: 

   function();





[heading Example]
  


   class my_handler;

   template <typename Function>
   void asio_handler_invoke(Function function, my_handler* context)
   {
     context->strand_.dispatch(function);
   }






[heading Requirements]

[*Header: ][^boost/asio/handler_invoke_hook.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:async_connect async_connect]

[indexterm1 async_connect] 
Asynchronously establishes a socket connection by trying each endpoint in a sequence. 

      
  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void ``[link boost_asio.reference.async_connect.overload1 async_connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ComposedConnectHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_connect.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void ``[link boost_asio.reference.async_connect.overload2 async_connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ComposedConnectHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_connect.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void ``[link boost_asio.reference.async_connect.overload3 async_connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ConnectCondition connect_condition,
      ComposedConnectHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_connect.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void ``[link boost_asio.reference.async_connect.overload4 async_connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ConnectCondition connect_condition,
      ComposedConnectHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_connect.overload4 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/connect.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 async_connect (1 of 4 overloads)]


Asynchronously establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void async_connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ComposedConnectHandler handler);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `async_connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[handler][The handler to be called when the connect operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation. if the sequence is empty, set to
     // boost::asio::error::not_found. Otherwise, contains the
     // error from the last connection attempt.
     const boost::system::error_code& error,

     // On success, an iterator denoting the successfully
     // connected endpoint. Otherwise, the end iterator.
     Iterator iterator
   ); 
``
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]
      
This overload assumes that a default constructed object of type `Iterator` represents the end of the sequence. This is a valid assumption for iterator types such as `boost::asio::ip::tcp::resolver::iterator`.


[heading Example]
  


   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);

   // ...

   r.async_resolve(q, resolve_handler);

   // ...

   void resolve_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     if (!ec)
     {
       boost::asio::async_connect(s, i, connect_handler);
     }
   }

   // ...

   void connect_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     // ...
   } 







[endsect]



[section:overload2 async_connect (2 of 4 overloads)]


Asynchronously establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void async_connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ComposedConnectHandler handler);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `async_connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[end][An iterator pointing to the end of a sequence of endpoints.]]

[[handler][The handler to be called when the connect operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation. if the sequence is empty, set to
     // boost::asio::error::not_found. Otherwise, contains the
     // error from the last connection attempt.
     const boost::system::error_code& error,

     // On success, an iterator denoting the successfully
     // connected endpoint. Otherwise, the end iterator.
     Iterator iterator
   ); 
``
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]
  


   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);

   // ...

   r.async_resolve(q, resolve_handler);

   // ...

   void resolve_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     if (!ec)
     {
       tcp::resolver::iterator end;
       boost::asio::async_connect(s, i, end, connect_handler);
     }
   }

   // ...

   void connect_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     // ...
   } 







[endsect]



[section:overload3 async_connect (3 of 4 overloads)]


Asynchronously establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void async_connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ConnectCondition connect_condition,
      ComposedConnectHandler handler);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `async_connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[connect_condition][A function object that is called prior to each connection attempt. The signature of the function object must be: 
``
   Iterator connect_condition(
       const boost::system::error_code& ec,
       Iterator next); 
``
The `ec` parameter contains the result from the most recent connect operation. Before the first connection attempt, `ec` is always set to indicate success. The `next` parameter is an iterator pointing to the next endpoint to be tried. The function object should return the next iterator, but is permitted to return a different iterator so that endpoints may be skipped. The implementation guarantees that the function object will never be called with the end iterator.]]

[[handler][The handler to be called when the connect operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation. if the sequence is empty, set to
     // boost::asio::error::not_found. Otherwise, contains the
     // error from the last connection attempt.
     const boost::system::error_code& error,

     // On success, an iterator denoting the successfully
     // connected endpoint. Otherwise, the end iterator.
     Iterator iterator
   ); 
``
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]
      
This overload assumes that a default constructed object of type `Iterator` represents the end of the sequence. This is a valid assumption for iterator types such as `boost::asio::ip::tcp::resolver::iterator`.


[heading Example]
  
The following connect condition function object can be used to output information about the individual connection attempts: 

   struct my_connect_condition
   {
     template <typename Iterator>
     Iterator operator()(
         const boost::system::error_code& ec,
         Iterator next)
     {
       if (ec) std::cout << "Error: " << ec.message() << std::endl;
       std::cout << "Trying: " << next->endpoint() << std::endl;
       return next;
     }
   }; 


It would be used with the `boost::asio::connect` function as follows: 

   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);

   // ...

   r.async_resolve(q, resolve_handler);

   // ...

   void resolve_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     if (!ec)
     {
       boost::asio::async_connect(s, i,
           my_connect_condition(),
           connect_handler);
     }
   }

   // ...

   void connect_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     if (ec)
     {
       // An error occurred.
     }
     else
     {
       std::cout << "Connected to: " << i->endpoint() << std::endl;
     }
   } 







[endsect]



[section:overload4 async_connect (4 of 4 overloads)]


Asynchronously establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition,
      typename ``[link boost_asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
  void async_connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ConnectCondition connect_condition,
      ComposedConnectHandler handler);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `async_connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[end][An iterator pointing to the end of a sequence of endpoints.]]

[[connect_condition][A function object that is called prior to each connection attempt. The signature of the function object must be: 
``
   Iterator connect_condition(
       const boost::system::error_code& ec,
       Iterator next); 
``
The `ec` parameter contains the result from the most recent connect operation. Before the first connection attempt, `ec` is always set to indicate success. The `next` parameter is an iterator pointing to the next endpoint to be tried. The function object should return the next iterator, but is permitted to return a different iterator so that endpoints may be skipped. The implementation guarantees that the function object will never be called with the end iterator.]]

[[handler][The handler to be called when the connect operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation. if the sequence is empty, set to
     // boost::asio::error::not_found. Otherwise, contains the
     // error from the last connection attempt.
     const boost::system::error_code& error,

     // On success, an iterator denoting the successfully
     // connected endpoint. Otherwise, the end iterator.
     Iterator iterator
   ); 
``
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]
  
The following connect condition function object can be used to output information about the individual connection attempts: 

   struct my_connect_condition
   {
     template <typename Iterator>
     Iterator operator()(
         const boost::system::error_code& ec,
         Iterator next)
     {
       if (ec) std::cout << "Error: " << ec.message() << std::endl;
       std::cout << "Trying: " << next->endpoint() << std::endl;
       return next;
     }
   }; 


It would be used with the `boost::asio::connect` function as follows: 

   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);

   // ...

   r.async_resolve(q, resolve_handler);

   // ...

   void resolve_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     if (!ec)
     {
       tcp::resolver::iterator end;
       boost::asio::async_connect(s, i, end,
           my_connect_condition(),
           connect_handler);
     }
   }

   // ...

   void connect_handler(
       const boost::system::error_code& ec,
       tcp::resolver::iterator i)
   {
     if (ec)
     {
       // An error occurred.
     }
     else
     {
       std::cout << "Connected to: " << i->endpoint() << std::endl;
     }
   } 







[endsect]


[endsect]

[section:async_read async_read]

[indexterm1 async_read] 
Start an asynchronous operation to read a certain amount of data from a stream. 

      
  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read.overload1 async_read]``(
      AsyncReadStream & s,
      const MutableBufferSequence & buffers,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read.overload2 async_read]``(
      AsyncReadStream & s,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read.overload3 async_read]``(
      AsyncReadStream & s,
      basic_streambuf< Allocator > & b,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read.overload4 async_read]``(
      AsyncReadStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read.overload4 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/read.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 async_read (1 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data from a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read(
      AsyncReadStream & s,
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream. 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 read 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 copied into the
                                             // buffers. If an error occurred,
                                             // this will be the  number of
                                             // bytes successfully transferred
                                             // prior to the error.
   ); 
``
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 read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_read(s, boost::asio::buffer(data, size), handler);


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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::async_read(
       s, buffers,
       boost::asio::transfer_all(),
       handler); 







[endsect]



[section:overload2 async_read (2 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data from a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read(
      AsyncReadStream & s,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream. 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.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_read_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the stream's async\_read\_some function.]]

[[handler][The handler to be called when the read 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 copied into the
                                             // buffers. If an error occurred,
                                             // this will be the  number of
                                             // bytes successfully transferred
                                             // prior to the error.
   ); 
``
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 read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_read(s,
       boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32),
       handler); 


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. 




[endsect]



[section:overload3 async_read (3 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data from a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read(
      AsyncReadStream & s,
      basic_streambuf< Allocator > & b,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The supplied buffer is full (that is, it has reached maximum size).


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[handler][The handler to be called when the read 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 copied into the
                                             // buffers. If an error occurred,
                                             // this will be the  number of
                                             // bytes successfully transferred
                                             // prior to the error.
   ); 
``
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]
      
This overload is equivalent to calling: 

   boost::asio::async_read(
       s, b,
       boost::asio::transfer_all(),
       handler); 







[endsect]



[section:overload4 async_read (4 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data from a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read(
      AsyncReadStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The supplied buffer is full (that is, it has reached maximum size).


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_read_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the stream's async\_read\_some function.]]

[[handler][The handler to be called when the read 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 copied into the
                                             // buffers. If an error occurred,
                                             // this will be the  number of
                                             // bytes successfully transferred
                                             // prior to the error.
   ); 
``
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:async_read_at async_read_at]

[indexterm1 async_read_at] 
Start an asynchronous operation to read a certain amount of data at the specified offset. 

      
  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_at.overload1 async_read_at]``(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_at.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_at.overload2 async_read_at]``(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_at.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_at.overload3 async_read_at]``(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_at.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_at.overload4 async_read_at]``(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_at.overload4 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/read_at.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 async_read_at (1 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_at(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a random access device at the specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's async\_read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the AsyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the device. 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 read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes copied into the buffers. If an error
     // occurred, this will be the number of bytes successfully
     // transferred prior to the error.
     std::size_t bytes_transferred
   ); 
``
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 read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_read_at(d, 42, boost::asio::buffer(data, size), handler);


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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::async_read_at(
       d, 42, buffers,
       boost::asio::transfer_all(),
       handler); 







[endsect]



[section:overload2 async_read_at (2 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_at(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a random access device at the specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the AsyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the device. 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.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_read_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the device's async\_read\_some\_at function.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes copied into the buffers. If an error
     // occurred, this will be the number of bytes successfully
     // transferred prior to the error.
     std::size_t bytes_transferred
   ); 
``
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 read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_read_at(d, 42,
       boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32),
       handler); 


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. 




[endsect]



[section:overload3 async_read_at (3 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_at(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a random access device at the specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's async\_read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the AsyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes copied into the buffers. If an error
     // occurred, this will be the number of bytes successfully
     // transferred prior to the error.
     std::size_t bytes_transferred
   ); 
``
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]
      
This overload is equivalent to calling: 

   boost::asio::async_read_at(
       d, 42, b,
       boost::asio::transfer_all(),
       handler); 







[endsect]



[section:overload4 async_read_at (4 of 4 overloads)]


Start an asynchronous operation to read a certain amount of data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_at(
      AsyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      ReadHandler handler);


This function is used to asynchronously read a certain number of bytes of data from a random access device at the specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's async\_read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the AsyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_read_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the device's async\_read\_some\_at function.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes copied into the buffers. If an error
     // occurred, this will be the number of bytes successfully
     // transferred prior to the error.
     std::size_t bytes_transferred
   ); 
``
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:async_read_until async_read_until]

[indexterm1 async_read_until] 
Start an asynchronous operation to read data into a streambuf until it contains a delimiter, matches a regular expression, or a function object indicates a match. 

      
  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_until.overload1 async_read_until]``(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      char delim,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_until.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_until.overload2 async_read_until]``(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const std::string & delim,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_until.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_until.overload3 async_read_until]``(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const boost::regex & expr,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_until.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename MatchCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.async_read_until.overload4 async_read_until]``(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      MatchCondition match_condition,
      ReadHandler handler,
      typename boost::enable_if< is_match_condition< MatchCondition > >::type *  = 0);
  ``  [''''&raquo;''' [link boost_asio.reference.async_read_until.overload4 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/read_until.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 async_read_until (1 of 4 overloads)]


Start an asynchronous operation to read data into a streambuf until it contains a specified delimiter. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_until(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      char delim,
      ReadHandler handler);


This function is used to asynchronously read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The get area of the streambuf contains the specified delimiter.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[b][A streambuf object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[delim][The delimiter character.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // The number of bytes in the streambuf's get
     // area up to and including the delimiter.
     // 0 if an error occurred.
     std::size_t bytes_transferred
   ); 
``
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]
      
After a successful async\_read\_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async\_read\_until operation to examine.


[heading Example]
  
To asynchronously read data into a streambuf until a newline is encountered: 

   boost::asio::streambuf b;
   ...
   void handler(const boost::system::error_code& e, std::size_t size)
   {
     if (!e)
     {
       std::istream is(&b);
       std::string line;
       std::getline(is, line);
       ...
     }
   }
   ...
   boost::asio::async_read_until(s, b, '\n', handler); 


After the `async_read_until` operation completes successfully, the buffer `b` contains the delimiter: 

   { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } 


The call to `std::getline` then extracts the data up to and including the delimiter, so that the string `line` contains: 

   { 'a', 'b', ..., 'c', '\n' } 


The remaining data is left in the buffer `b` as follows: 

   { 'd', 'e', ... } 


This data may be the start of a new line, to be extracted by a subsequent `async_read_until` operation. 




[endsect]



[section:overload2 async_read_until (2 of 4 overloads)]


Start an asynchronous operation to read data into a streambuf until it contains a specified delimiter. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_until(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const std::string & delim,
      ReadHandler handler);


This function is used to asynchronously read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The get area of the streambuf contains the specified delimiter.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[b][A streambuf object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[delim][The delimiter string.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // The number of bytes in the streambuf's get
     // area up to and including the delimiter.
     // 0 if an error occurred.
     std::size_t bytes_transferred
   ); 
``
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]
      
After a successful async\_read\_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async\_read\_until operation to examine.


[heading Example]
  
To asynchronously read data into a streambuf until a newline is encountered: 

   boost::asio::streambuf b;
   ...
   void handler(const boost::system::error_code& e, std::size_t size)
   {
     if (!e)
     {
       std::istream is(&b);
       std::string line;
       std::getline(is, line);
       ...
     }
   }
   ...
   boost::asio::async_read_until(s, b, "\r\n", handler); 


After the `async_read_until` operation completes successfully, the buffer `b` contains the delimiter: 

   { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } 


The call to `std::getline` then extracts the data up to and including the delimiter, so that the string `line` contains: 

   { 'a', 'b', ..., 'c', '\r', '\n' } 


The remaining data is left in the buffer `b` as follows: 

   { 'd', 'e', ... } 


This data may be the start of a new line, to be extracted by a subsequent `async_read_until` operation. 




[endsect]



[section:overload3 async_read_until (3 of 4 overloads)]


Start an asynchronous operation to read data into a streambuf until some part of its data matches a regular expression. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_until(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const boost::regex & expr,
      ReadHandler handler);


This function is used to asynchronously read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* A substring of the streambuf's get area matches the regular expression.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains data that matches the regular expression, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[b][A streambuf object into which the data will be read. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[expr][The regular expression.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // The number of bytes in the streambuf's get
     // area up to and including the substring
     // that matches the regular. expression.
     // 0 if an error occurred.
     std::size_t bytes_transferred
   ); 
``
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]
      
After a successful async\_read\_until operation, the streambuf may contain additional data beyond that which matched the regular expression. An application will typically leave that data in the streambuf for a subsequent async\_read\_until operation to examine.


[heading Example]
  
To asynchronously read data into a streambuf until a CR-LF sequence is encountered: 

   boost::asio::streambuf b;
   ...
   void handler(const boost::system::error_code& e, std::size_t size)
   {
     if (!e)
     {
       std::istream is(&b);
       std::string line;
       std::getline(is, line);
       ...
     }
   }
   ...
   boost::asio::async_read_until(s, b, boost::regex("\r\n"), handler); 


After the `async_read_until` operation completes successfully, the buffer `b` contains the data which matched the regular expression: 

   { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } 


The call to `std::getline` then extracts the data up to and including the match, so that the string `line` contains: 

   { 'a', 'b', ..., 'c', '\r', '\n' } 


The remaining data is left in the buffer `b` as follows: 

   { 'd', 'e', ... } 


This data may be the start of a new line, to be extracted by a subsequent `async_read_until` operation. 




[endsect]



[section:overload4 async_read_until (4 of 4 overloads)]


Start an asynchronous operation to read data into a streambuf until a function object indicates a match. 


  template<
      typename ``[link boost_asio.reference.AsyncReadStream AsyncReadStream]``,
      typename Allocator,
      typename MatchCondition,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_until(
      AsyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      MatchCondition match_condition,
      ReadHandler handler,
      typename boost::enable_if< is_match_condition< MatchCondition > >::type *  = 0);


This function is used to asynchronously read data into the specified streambuf until a user-defined match condition function object, when applied to the data contained in the streambuf, indicates a successful match. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* The match condition function object returns a std::pair where the second element evaluates to true.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the match condition function object already indicates a match, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the AsyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[match_condition][The function object to be called to determine whether a match exists. The signature of the function object must be: 
``
   pair<iterator, bool> match_condition(iterator begin, iterator end);
``
where `iterator` represents the type: 
``
   buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
``
The iterator parameters `begin` and `end` define the range of bytes to be scanned to determine whether there is a match. The `first` member of the return value is an iterator marking one-past-the-end of the bytes that have been consumed by the match function. This iterator is used to calculate the `begin` parameter for any subsequent invocation of the match condition. The `second` member of the return value is true if a match has been found, false otherwise.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // The number of bytes in the streambuf's get
     // area that have been fully consumed by the
     // match function. O if an error occurred.
     std::size_t bytes_transferred
   ); 
``
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]
      
After a successful async\_read\_until operation, the streambuf may contain additional data beyond that which matched the function object. An application will typically leave that data in the streambuf for a subsequent async\_read\_until operation to examine.

The default implementation of the `is_match_condition` type trait evaluates to true for function pointers and function objects with a `result_type` typedef. It must be specialised for other user-defined function objects.


[heading Examples]
  
To asynchronously read data into a streambuf until whitespace is encountered: 

   typedef boost::asio::buffers_iterator<
       boost::asio::streambuf::const_buffers_type> iterator;

   std::pair<iterator, bool>
   match_whitespace(iterator begin, iterator end)
   {
     iterator i = begin;
     while (i != end)
       if (std::isspace(*i++))
         return std::make_pair(i, true);
     return std::make_pair(i, false);
   }
   ...
   void handler(const boost::system::error_code& e, std::size_t size);
   ...
   boost::asio::streambuf b;
   boost::asio::async_read_until(s, b, match_whitespace, handler);




To asynchronously read data into a streambuf until a matching character is found: 

   class match_char
   {
   public:
     explicit match_char(char c) : c_(c) {}

     template <typename Iterator>
     std::pair<Iterator, bool> operator()(
         Iterator begin, Iterator end) const
     {
       Iterator i = begin;
       while (i != end)
         if (c_ == *i++)
           return std::make_pair(i, true);
       return std::make_pair(i, false);
     }

   private:
     char c_;
   };

   namespace asio {
     template <> struct is_match_condition<match_char>
       : public boost::true_type {};
   } // namespace asio
   ...
   void handler(const boost::system::error_code& e, std::size_t size);
   ...
   boost::asio::streambuf b;
   boost::asio::async_read_until(s, b, match_char('a'), handler);





[endsect]


[endsect]

[section:async_write async_write]

[indexterm1 async_write] 
Start an asynchronous operation to write a certain amount of data to a stream. 

      
  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write.overload1 async_write]``(
      AsyncWriteStream & s,
      const ConstBufferSequence & buffers,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write.overload2 async_write]``(
      AsyncWriteStream & s,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write.overload3 async_write]``(
      AsyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write.overload4 async_write]``(
      AsyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write.overload4 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/write.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 async_write (1 of 4 overloads)]


Start an asynchronous operation to write all of the supplied data to a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write(
      AsyncWriteStream & s,
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the AsyncWriteStream concept.]]

[[buffers][One or more buffers containing the data to be written. 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 write 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 written from the
                                             // buffers. If an error occurred,
                                             // this will be less than the sum
                                             // of the buffer sizes.
   ); 
``
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 write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_write(s, boost::asio::buffer(data, size), handler);


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. 




[endsect]



[section:overload2 async_write (2 of 4 overloads)]


Start an asynchronous operation to write a certain amount of data to a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write(
      AsyncWriteStream & s,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the AsyncWriteStream concept.]]

[[buffers][One or more buffers containing the data to be written. 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.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_write_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the stream's async\_write\_some function.]]

[[handler][The handler to be called when the write 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 written from the
                                             // buffers. If an error occurred,
                                             // this will be less than the sum
                                             // of the buffer sizes.
   ); 
``
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 write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_write(s,
       boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32),
       handler); 


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. 




[endsect]



[section:overload3 async_write (3 of 4 overloads)]


Start an asynchronous operation to write all of the supplied data to a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename Allocator,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write(
      AsyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the AsyncWriteStream concept.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[handler][The handler to be called when the write 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 written from the
                                             // buffers. If an error occurred,
                                             // this will be less than the sum
                                             // of the buffer sizes.
   ); 
``
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:overload4 async_write (4 of 4 overloads)]


Start an asynchronous operation to write a certain amount of data to a stream. 


  template<
      typename ``[link boost_asio.reference.AsyncWriteStream AsyncWriteStream]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write(
      AsyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a stream. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the AsyncWriteStream concept.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_write_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the stream's async\_write\_some function.]]

[[handler][The handler to be called when the write 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 written from the
                                             // buffers. If an error occurred,
                                             // this will be less than the sum
                                             // of the buffer sizes.
   ); 
``
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:async_write_at async_write_at]

[indexterm1 async_write_at] 
Start an asynchronous operation to write a certain amount of data at the specified offset. 

      
  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write_at.overload1 async_write_at]``(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write_at.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write_at.overload2 async_write_at]``(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write_at.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write_at.overload3 async_write_at]``(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write_at.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.async_write_at.overload4 async_write_at]``(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.async_write_at.overload4 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/write_at.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 async_write_at (1 of 4 overloads)]


Start an asynchronous operation to write all of the supplied data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_at(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a random access device at a specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's async\_write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the AsyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[buffers][One or more buffers containing the data to be written. 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 write operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes written from the buffers. If an error
     // occurred, this will be less than the sum of the buffer sizes.
     std::size_t bytes_transferred
   ); 
``
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 write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_write_at(d, 42, boost::asio::buffer(data, size), handler);


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. 




[endsect]



[section:overload2 async_write_at (2 of 4 overloads)]


Start an asynchronous operation to write a certain amount of data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_at(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a random access device at a specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's async\_write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the AsyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[buffers][One or more buffers containing the data to be written. 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.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_write_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the device's async\_write\_some\_at function.]]

[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes written from the buffers. If an error
     // occurred, this will be less than the sum of the buffer sizes.
     std::size_t bytes_transferred
   ); 
``
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 write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::async_write_at(d, 42,
       boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32),
       handler); 


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. 




[endsect]



[section:overload3 async_write_at (3 of 4 overloads)]


Start an asynchronous operation to write all of the supplied data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_at(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a random access device at a specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's async\_write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the AsyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes written from the buffers. If an error
     // occurred, this will be less than the sum of the buffer sizes.
     std::size_t bytes_transferred
   ); 
``
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:overload4 async_write_at (4 of 4 overloads)]


Start an asynchronous operation to write a certain amount of data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename CompletionCondition,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_at(
      AsyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      WriteHandler handler);


This function is used to asynchronously write a certain number of bytes of data to a random access device at a specified offset. The function call always returns immediately. The asynchronous operation will continue until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's async\_write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the AsyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[b][A [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written. Ownership of the streambuf is retained by the caller, which must guarantee that it remains valid until the handler is called.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest async_write_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the device's async\_write\_some\_at function.]]

[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The function signature of the handler must be: 
``
   void handler(
     // Result of operation.
     const boost::system::error_code& error,

     // Number of bytes written from the buffers. If an error
     // occurred, this will be less than the sum of the buffer sizes.
     std::size_t bytes_transferred
   ); 
``
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_datagram_socket basic_datagram_socket]


Provides datagram-oriented socket functionality. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.DatagramSocketService DatagramSocketService]`` = datagram_socket_service<Protocol>>
  class basic_datagram_socket :
    public basic_socket< Protocol, DatagramSocketService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_datagram_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_receive_from [*async_receive_from]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_send [*async_send]]]
    [Start an asynchronous send on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket [*basic_datagram_socket]]]
    [Construct a basic_datagram_socket without opening it. 

     Construct and open a basic_datagram_socket. 

     Construct a basic_datagram_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_datagram_socket on an existing native socket. 

     Move-construct a basic_datagram_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_datagram_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.receive [*receive]]]
    [Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.receive_from [*receive_from]]]
    [Receive a datagram with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.send [*send]]]
    [Send some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.send_to [*send_to]]]
    [Send a datagram to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] class template provides asynchronous and blocking datagram-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_datagram_socket::assign]

[indexterm2 assign..basic_datagram_socket] 
Assign an existing native socket to the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.assign.overload2 more...]]``


[section:overload1 basic_datagram_socket::assign (1 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  void assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket);



[endsect]



[section:overload2 basic_datagram_socket::assign (2 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  boost::system::error_code assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_connect basic_datagram_socket::async_connect]


['Inherited from basic_socket.]

[indexterm2 async_connect..basic_datagram_socket] 
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 not 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:async_receive basic_datagram_socket::async_receive]

[indexterm2 async_receive..basic_datagram_socket] 
Start an asynchronous receive on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_receive.overload1 async_receive]``(
      const MutableBufferSequence & buffers,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_receive.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_receive.overload2 async_receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_receive.overload2 more...]]``


[section:overload1 basic_datagram_socket::async_receive (1 of 2 overloads)]


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 asynchronously receive data from the datagram socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 datagram 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_datagram_socket::async_receive (2 of 2 overloads)]


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,
      socket_base::message_flags flags,
      ReadHandler handler);


This function is used to asynchronously receive data from the datagram socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 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 datagram socket. 




[endsect]


[endsect]

[section:async_receive_from basic_datagram_socket::async_receive_from]

[indexterm2 async_receive_from..basic_datagram_socket] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_receive_from.overload1 async_receive_from]``(
      const MutableBufferSequence & buffers,
      endpoint_type & sender_endpoint,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_receive_from.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_receive_from.overload2 async_receive_from]``(
      const MutableBufferSequence & buffers,
      endpoint_type & sender_endpoint,
      socket_base::message_flags flags,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_receive_from.overload2 more...]]``


[section:overload1 basic_datagram_socket::async_receive_from (1 of 2 overloads)]


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 asynchronously receive a datagram. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 datagram. 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_datagram_socket::async_receive_from (2 of 2 overloads)]


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,
      socket_base::message_flags flags,
      ReadHandler handler);


This function is used to asynchronously receive a datagram. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 datagram. Ownership of the sender\_endpoint object is retained by the caller, which must guarantee that it is 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()`. ]]

]




[endsect]


[endsect]

[section:async_send basic_datagram_socket::async_send]

[indexterm2 async_send..basic_datagram_socket] 
Start an asynchronous send on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_send.overload1 async_send]``(
      const ConstBufferSequence & buffers,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_send.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_send.overload2 async_send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_send.overload2 more...]]``


[section:overload1 basic_datagram_socket::async_send (1 of 2 overloads)]


Start an asynchronous send on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_send(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to send data on the datagram socket. 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 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 datagram 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_datagram_socket::async_send (2 of 2 overloads)]


Start an asynchronous send on a connected socket. 


  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 function is used to send data on the datagram socket. 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 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.]]

[[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 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 datagram socket. 




[endsect]


[endsect]

[section:async_send_to basic_datagram_socket::async_send_to]

[indexterm2 async_send_to..basic_datagram_socket] 
Start an asynchronous send. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_send_to.overload1 async_send_to]``(
      const ConstBufferSequence & buffers,
      const endpoint_type & destination,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_send_to.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.basic_datagram_socket.async_send_to.overload2 async_send_to]``(
      const ConstBufferSequence & buffers,
      const endpoint_type & destination,
      socket_base::message_flags flags,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.async_send_to.overload2 more...]]``


[section:overload1 basic_datagram_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 function is used to asynchronously send a datagram to the specified remote endpoint. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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.
   ); 
``
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 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. 




[endsect]



[section:overload2 basic_datagram_socket::async_send_to (2 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,
      socket_base::message_flags flags,
      WriteHandler handler);


This function is used to asynchronously send a datagram to the specified remote endpoint. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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.]]

[[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()`. ]]

]




[endsect]


[endsect]

[section:at_mark basic_datagram_socket::at_mark]

[indexterm2 at_mark..basic_datagram_socket] 
Determine whether the socket is at the out-of-band data mark. 


  bool ``[link boost_asio.reference.basic_datagram_socket.at_mark.overload1 at_mark]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.at_mark.overload1 more...]]``

  bool ``[link boost_asio.reference.basic_datagram_socket.at_mark.overload2 at_mark]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.at_mark.overload2 more...]]``


[section:overload1 basic_datagram_socket::at_mark (1 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_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_datagram_socket::available]

[indexterm2 available..basic_datagram_socket] 
Determine the number of bytes available for reading. 


  std::size_t ``[link boost_asio.reference.basic_datagram_socket.available.overload1 available]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.available.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_datagram_socket.available.overload2 available]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.available.overload2 more...]]``


[section:overload1 basic_datagram_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_datagram_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_datagram_socket basic_datagram_socket::basic_datagram_socket]

[indexterm2 basic_datagram_socket..basic_datagram_socket] 
Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] without opening it. 


  explicit ``[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload1 basic_datagram_socket]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload1 more...]]``


Construct and open a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`]. 


  ``[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload2 basic_datagram_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload2 more...]]``


Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`], opening it and binding it to the given local endpoint. 


  ``[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload3 basic_datagram_socket]``(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload3 more...]]``


Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] on an existing native socket. 


  ``[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload4 basic_datagram_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from another. 


  ``[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload5 basic_datagram_socket]``(
      basic_datagram_socket && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.basic_datagram_socket.overload5 more...]]``


[section:overload1 basic_datagram_socket::basic_datagram_socket (1 of 5 overloads)]


Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] without opening it. 


  basic_datagram_socket(
      boost::asio::io_service & io_service);


This constructor creates a datagram 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 [link boost_asio.reference.io_service `io_service`] object that the datagram socket will use to dispatch handlers for any asynchronous operations performed on the socket. ]]

]




[endsect]



[section:overload2 basic_datagram_socket::basic_datagram_socket (2 of 5 overloads)]


Construct and open a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`]. 


  basic_datagram_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);


This constructor creates and opens a datagram socket.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the datagram 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_datagram_socket::basic_datagram_socket (3 of 5 overloads)]


Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`], opening it and binding it to the given local endpoint. 


  basic_datagram_socket(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);


This constructor creates a datagram 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 [link boost_asio.reference.io_service `io_service`] object that the datagram socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]

[[endpoint][An endpoint on the local machine to which the datagram socket will be bound.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload4 basic_datagram_socket::basic_datagram_socket (4 of 5 overloads)]


Construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] on an existing native socket. 


  basic_datagram_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);


This constructor creates a datagram socket object to hold an existing native socket.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the datagram 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]



[section:overload5 basic_datagram_socket::basic_datagram_socket (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from another. 


  basic_datagram_socket(
      basic_datagram_socket && other);


This constructor moves a datagram socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`. 




[endsect]


[endsect]

[section:bind basic_datagram_socket::bind]

[indexterm2 bind..basic_datagram_socket] 
Bind the socket to the given local endpoint. 


  void ``[link boost_asio.reference.basic_datagram_socket.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.bind.overload2 more...]]``


[section:overload1 basic_datagram_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]
  


   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_datagram_socket::bind (2 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::broadcast]


['Inherited from socket_base.]

[indexterm2 broadcast..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_datagram_socket::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_datagram_socket::cancel]

[indexterm2 cancel..basic_datagram_socket] 
Cancel all asynchronous operations associated with the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.cancel.overload2 more...]]``


[section:overload1 basic_datagram_socket::cancel (1 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::cancel (2 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::close]

[indexterm2 close..basic_datagram_socket] 
Close the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.close.overload2 more...]]``


[section:overload1 basic_datagram_socket::close (1 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[heading Remarks]
      
For portable behaviour with respect to graceful closure of a connected socket, call `shutdown()` before closing the socket. 




[endsect]



[section:overload2 basic_datagram_socket::close (2 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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_datagram_socket::connect]

[indexterm2 connect..basic_datagram_socket] 
Connect the socket to the specified endpoint. 


  void ``[link boost_asio.reference.basic_datagram_socket.connect.overload1 connect]``(
      const endpoint_type & peer_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.connect.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.connect.overload2 connect]``(
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.connect.overload2 more...]]``


[section:overload1 basic_datagram_socket::connect (1 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_datagram_socket::connect (2 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_datagram_socket::debug]


['Inherited from socket_base.]

[indexterm2 debug..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_datagram_socket::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_datagram_socket::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_datagram_socket::endpoint_type]

[indexterm2 endpoint_type..basic_datagram_socket] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation basic_datagram_socket::get_implementation]

[indexterm2 get_implementation..basic_datagram_socket] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_datagram_socket.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_datagram_socket.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.get_implementation.overload2 more...]]``


[section:overload1 basic_datagram_socket::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_datagram_socket::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_datagram_socket::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_datagram_socket] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_datagram_socket::get_option]

[indexterm2 get_option..basic_datagram_socket] 
Get an option from the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.get_option.overload1 get_option]``(
      GettableSocketOption & option) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.get_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.get_option.overload2 get_option]``(
      GettableSocketOption & option,
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.get_option.overload2 more...]]``


[section:overload1 basic_datagram_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;


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_datagram_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;


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:get_service basic_datagram_socket::get_service]

[indexterm2 get_service..basic_datagram_socket] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_datagram_socket.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_datagram_socket.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.get_service.overload2 more...]]``


[section:overload1 basic_datagram_socket::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_datagram_socket::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_datagram_socket::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_datagram_socket] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_datagram_socket::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_datagram_socket] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_datagram_socket::io_control]

[indexterm2 io_control..basic_datagram_socket] 
Perform an IO control command on the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.io_control.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.io_control.overload2 more...]]``


[section:overload1 basic_datagram_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);


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_datagram_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);


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:is_open basic_datagram_socket::is_open]


['Inherited from basic_socket.]

[indexterm2 is_open..basic_datagram_socket] 
Determine whether the socket is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_datagram_socket::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_datagram_socket::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:local_endpoint basic_datagram_socket::local_endpoint]

[indexterm2 local_endpoint..basic_datagram_socket] 
Get the local endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_datagram_socket.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_datagram_socket.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.local_endpoint.overload2 more...]]``


[section:overload1 basic_datagram_socket::local_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::local_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::lowest_layer]

[indexterm2 lowest_layer..basic_datagram_socket] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_datagram_socket.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_datagram_socket.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.lowest_layer.overload2 more...]]``


[section:overload1 basic_datagram_socket::lowest_layer (1 of 2 overloads)]


['Inherited from basic_socket.]


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 [link boost_asio.reference.basic_socket `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:overload2 basic_datagram_socket::lowest_layer (2 of 2 overloads)]


['Inherited from basic_socket.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_socket `basic_socket`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_datagram_socket::lowest_layer_type]


['Inherited from basic_socket.]

[indexterm2 lowest_layer_type..basic_datagram_socket] 
A [link boost_asio.reference.basic_socket `basic_socket`] is always the lowest layer. 


  typedef basic_socket< Protocol, DatagramSocketService > 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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 




[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections basic_datagram_socket::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_datagram_socket] 
The maximum length of the queue of pending incoming connections. 


  static const int max_connections = implementation_defined;



[endsect]



[section:message_do_not_route basic_datagram_socket::message_do_not_route]


['Inherited from socket_base.]

[indexterm2 message_do_not_route..basic_datagram_socket] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_datagram_socket::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_datagram_socket] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_datagram_socket::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_datagram_socket] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_datagram_socket::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_datagram_socket] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek basic_datagram_socket::message_peek]


['Inherited from socket_base.]

[indexterm2 message_peek..basic_datagram_socket] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_datagram_socket::native]


['Inherited from basic_socket.]

[indexterm2 native..basic_datagram_socket] 
(Deprecated: Use `native_handle()`.) 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_handle basic_datagram_socket::native_handle]


['Inherited from basic_socket.]

[indexterm2 native_handle..basic_datagram_socket] 
Get the native socket representation. 


  native_handle_type native_handle();


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_handle_type basic_datagram_socket::native_handle_type]

[indexterm2 native_handle_type..basic_datagram_socket] 
The native representation of a socket. 


  typedef DatagramSocketService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_datagram_socket::native_non_blocking]

[indexterm2 native_non_blocking..basic_datagram_socket] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.basic_datagram_socket.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  void ``[link boost_asio.reference.basic_datagram_socket.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.native_non_blocking.overload3 more...]]``


[section:overload1 basic_datagram_socket::native_non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native socket. This mode has no effect on the behaviour of the socket object's synchronous operations.


[heading Return Value]
      
`true` if the underlying socket is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the socket object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native socket.


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload2 basic_datagram_socket::native_non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload3 basic_datagram_socket::native_non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]


[endsect]


[section:native_type basic_datagram_socket::native_type]

[indexterm2 native_type..basic_datagram_socket] 
(Deprecated: Use native\_handle\_type.) The native representation of a socket. 


  typedef DatagramSocketService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_datagram_socket::non_blocking]

[indexterm2 non_blocking..basic_datagram_socket] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.basic_datagram_socket.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.non_blocking.overload3 more...]]``


[section:overload1 basic_datagram_socket::non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the socket. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_datagram_socket::non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_datagram_socket::non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_datagram_socket::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_datagram_socket] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_datagram_socket::open]

[indexterm2 open..basic_datagram_socket] 
Open the socket using the specified protocol. 


  void ``[link boost_asio.reference.basic_datagram_socket.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.open.overload2 more...]]``


[section:overload1 basic_datagram_socket::open (1 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::open (2 of 2 overloads)]


['Inherited from basic_socket.]


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:operator_eq_ basic_datagram_socket::operator=]

[indexterm2 operator=..basic_datagram_socket] 
Move-assign a [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] from another. 


  basic_datagram_socket & operator=(
      basic_datagram_socket && other);


This assignment operator moves a datagram socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`. 




[endsect]



[section:protocol_type basic_datagram_socket::protocol_type]

[indexterm2 protocol_type..basic_datagram_socket] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:receive basic_datagram_socket::receive]

[indexterm2 receive..basic_datagram_socket] 
Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.receive.overload1 receive]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.receive.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.receive.overload2 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.receive.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.receive.overload3 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.receive.overload3 more...]]``


[section:overload1 basic_datagram_socket::receive (1 of 3 overloads)]


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers);


This function is used to receive data on the datagram 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.]]

]


[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 datagram socket.


[heading Example]
  
To receive into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   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. 




[endsect]



[section:overload2 basic_datagram_socket::receive (2 of 3 overloads)]


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags);


This function is used to receive data on the datagram 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.]]

[[flags][Flags specifying how the receive call is to be made.]]

]


[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 datagram socket. 




[endsect]



[section:overload3 basic_datagram_socket::receive (3 of 3 overloads)]


Receive some data on a connected socket. 


  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);


This function is used to receive data on the datagram 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.]]

[[flags][Flags specifying how the receive call is to be made.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes received.


[heading Remarks]
      
The receive operation can only be used with a connected socket. Use the receive\_from function to receive data on an unconnected datagram socket. 




[endsect]


[endsect]


[section:receive_buffer_size basic_datagram_socket::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:receive_from basic_datagram_socket::receive_from]

[indexterm2 receive_from..basic_datagram_socket] 
Receive a datagram with the endpoint of the sender. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.receive_from.overload1 receive_from]``(
      const MutableBufferSequence & buffers,
      endpoint_type & sender_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.receive_from.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.receive_from.overload2 receive_from]``(
      const MutableBufferSequence & buffers,
      endpoint_type & sender_endpoint,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.receive_from.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.receive_from.overload3 receive_from]``(
      const MutableBufferSequence & buffers,
      endpoint_type & sender_endpoint,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.receive_from.overload3 more...]]``


[section:overload1 basic_datagram_socket::receive_from (1 of 3 overloads)]


Receive a datagram 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 a datagram. 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.]]

[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the datagram.]]

]


[heading Return Value]
      
The number of bytes received.


[heading Exceptions]
    

[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]



[section:overload2 basic_datagram_socket::receive_from (2 of 3 overloads)]


Receive a datagram 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,
      socket_base::message_flags flags);


This function is used to receive a datagram. 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.]]

[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the datagram.]]

[[flags][Flags specifying how the receive call is to be made.]]

]


[heading Return Value]
      
The number of bytes received.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 basic_datagram_socket::receive_from (3 of 3 overloads)]


Receive a datagram 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,
      socket_base::message_flags flags,
      boost::system::error_code & ec);


This function is used to receive a datagram. 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.]]

[[sender_endpoint][An endpoint object that receives the endpoint of the remote sender of the datagram.]]

[[flags][Flags specifying how the receive call is to be made.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes received. 




[endsect]


[endsect]


[section:receive_low_watermark basic_datagram_socket::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remote_endpoint basic_datagram_socket::remote_endpoint]

[indexterm2 remote_endpoint..basic_datagram_socket] 
Get the remote endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_datagram_socket.remote_endpoint.overload1 remote_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.remote_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_datagram_socket.remote_endpoint.overload2 remote_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.remote_endpoint.overload2 more...]]``


[section:overload1 basic_datagram_socket::remote_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::remote_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::reuse_address]


['Inherited from socket_base.]

[indexterm2 reuse_address..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:send basic_datagram_socket::send]

[indexterm2 send..basic_datagram_socket] 
Send some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.send.overload1 send]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.send.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.send.overload2 send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.send.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.send.overload3 send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.send.overload3 more...]]``


[section:overload1 basic_datagram_socket::send (1 of 3 overloads)]


Send some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t send(
      const ConstBufferSequence & buffers);


This function is used to send data on the datagram socket. The function call will block until the data has been sent successfully or an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One ore more data buffers to be sent on the socket.]]

]


[heading Return Value]
      
The number of bytes sent.


[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 datagram socket.


[heading Example]
  
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. 




[endsect]



[section:overload2 basic_datagram_socket::send (2 of 3 overloads)]


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);


This function is used to send data on the datagram socket. The function call will block until the data has been sent successfully or an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One ore more data buffers to be sent on the socket.]]

[[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.]]

]


[heading Remarks]
      
The send operation can only be used with a connected socket. Use the send\_to function to send data on an unconnected datagram socket. 




[endsect]



[section:overload3 basic_datagram_socket::send (3 of 3 overloads)]


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);


This function is used to send data on the datagram socket. 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 on the socket.]]

[[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.


[heading Remarks]
      
The send operation can only be used with a connected socket. Use the send\_to function to send data on an unconnected datagram socket. 




[endsect]


[endsect]


[section:send_buffer_size basic_datagram_socket::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_datagram_socket::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_datagram_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:send_to basic_datagram_socket::send_to]

[indexterm2 send_to..basic_datagram_socket] 
Send a datagram to the specified endpoint. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.send_to.overload1 send_to]``(
      const ConstBufferSequence & buffers,
      const endpoint_type & destination);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.send_to.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.send_to.overload2 send_to]``(
      const ConstBufferSequence & buffers,
      const endpoint_type & destination,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.send_to.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_datagram_socket.send_to.overload3 send_to]``(
      const ConstBufferSequence & buffers,
      const endpoint_type & destination,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.send_to.overload3 more...]]``


[section:overload1 basic_datagram_socket::send_to (1 of 3 overloads)]


Send a datagram 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 a datagram 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_datagram_socket::send_to (2 of 3 overloads)]


Send a datagram 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 a datagram 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_datagram_socket::send_to (3 of 3 overloads)]


Send a datagram 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 a datagram 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_datagram_socket::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_datagram_socket] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_datagram_socket::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_datagram_socket] 
The type of the service that will be used to provide I/O operations. 


  typedef DatagramSocketService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_datagram_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_datagram_socket::set_option]

[indexterm2 set_option..basic_datagram_socket] 
Set an option on the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.set_option.overload1 set_option]``(
      const SettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.set_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.set_option.overload2 set_option]``(
      const SettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.set_option.overload2 more...]]``


[section:overload1 basic_datagram_socket::set_option (1 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::set_option (2 of 2 overloads)]


['Inherited from basic_socket.]


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_datagram_socket::shutdown]

[indexterm2 shutdown..basic_datagram_socket] 
Disable sends or receives on the socket. 


  void ``[link boost_asio.reference.basic_datagram_socket.shutdown.overload1 shutdown]``(
      shutdown_type what);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_datagram_socket.shutdown.overload2 shutdown]``(
      shutdown_type what,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_datagram_socket.shutdown.overload2 more...]]``


[section:overload1 basic_datagram_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_datagram_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_datagram_socket::shutdown_type]


['Inherited from socket_base.]

[indexterm2 shutdown_type..basic_datagram_socket] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_datagram_socket]
[indexterm2 shutdown_send..basic_datagram_socket]
[indexterm2 shutdown_both..basic_datagram_socket]

[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_deadline_timer basic_deadline_timer]


Provides waitable timer functionality. 


  template<
      typename Time,
      typename ``[link boost_asio.reference.TimeTraits TimeTraits]`` = boost::asio::time_traits<Time>,
      typename ``[link boost_asio.reference.TimerService TimerService]`` = deadline_timer_service<Time, TimeTraits>>
  class basic_deadline_timer :
    public basic_io_object< TimerService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_deadline_timer.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.time_type [*time_type]]]
    [The time type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.traits_type [*traits_type]]]
    [The time traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_deadline_timer.async_wait [*async_wait]]]
    [Start an asynchronous wait on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.basic_deadline_timer [*basic_deadline_timer]]]
    [Constructor. 

     Constructor to set a particular expiry time as an absolute time. 

     Constructor to set a particular expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.cancel [*cancel]]]
    [Cancel any asynchronous operations that are waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.cancel_one [*cancel_one]]]
    [Cancels one asynchronous operation that is waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.expires_at [*expires_at]]]
    [Get the timer's expiry time as an absolute time. 

     Set the timer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the timer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.wait [*wait]]]
    [Perform a blocking wait on the timer. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_deadline_timer.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_deadline_timer.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_deadline_timer.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_deadline_timer `basic_deadline_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A deadline timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.

Most applications will use the [link boost_asio.reference.deadline_timer `deadline_timer`] typedef.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Examples]
  
Performing a blocking wait: 

   // Construct a timer without setting an expiry time.
   boost::asio::deadline_timer timer(io_service);

   // Set an expiry time relative to now.
   timer.expires_from_now(boost::posix_time::seconds(5));

   // Wait for the timer to expire.
   timer.wait();





Performing an asynchronous wait: 

   void handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Timer expired.
     }
   }

   ...

   // Construct a timer with an absolute expiry time.
   boost::asio::deadline_timer timer(io_service,
       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));

   // Start an asynchronous wait.
   timer.async_wait(handler);





[heading Changing an active deadline_timer's expiry time]
  


Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:



   void on_some_event()
   {
     if (my_timer.expires_from_now(seconds(5)) > 0)
     {
       // We managed to cancel the timer. Start new asynchronous wait.
       my_timer.async_wait(on_timeout);
     }
     else
     {
       // Too late, timer has already expired!
     }
   }

   void on_timeout(const boost::system::error_code& e)
   {
     if (e != boost::asio::error::operation_aborted)
     {
       // Timer was not cancelled, take necessary action.
     }
   }





* The `boost::asio::basic_deadline_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.


* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`. 



[heading Requirements]

[*Header: ][^boost/asio/basic_deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_wait basic_deadline_timer::async_wait]

[indexterm2 async_wait..basic_deadline_timer] 
Start an asynchronous wait on the timer. 


  template<
      typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
  void async_wait(
      WaitHandler handler);


This function may be used to initiate an asynchronous wait against the timer. It always returns immediately.

For each call to `async_wait()`, the supplied handler will be called exactly once. The handler will be called when:


* The timer has expired.


* The timer was cancelled, in which case the handler is passed the error code `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called when the timer expires. 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()`. ]]

]




[endsect]


[section:basic_deadline_timer basic_deadline_timer::basic_deadline_timer]

[indexterm2 basic_deadline_timer..basic_deadline_timer] 
Constructor. 


  explicit ``[link boost_asio.reference.basic_deadline_timer.basic_deadline_timer.overload1 basic_deadline_timer]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.basic_deadline_timer.overload1 more...]]``


Constructor to set a particular expiry time as an absolute time. 


  ``[link boost_asio.reference.basic_deadline_timer.basic_deadline_timer.overload2 basic_deadline_timer]``(
      boost::asio::io_service & io_service,
      const time_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.basic_deadline_timer.overload2 more...]]``


Constructor to set a particular expiry time relative to now. 


  ``[link boost_asio.reference.basic_deadline_timer.basic_deadline_timer.overload3 basic_deadline_timer]``(
      boost::asio::io_service & io_service,
      const duration_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.basic_deadline_timer.overload3 more...]]``


[section:overload1 basic_deadline_timer::basic_deadline_timer (1 of 3 overloads)]


Constructor. 


  basic_deadline_timer(
      boost::asio::io_service & io_service);


This constructor creates a timer without setting an expiry time. The `expires_at()` or `expires_from_now()` functions must be called to set an expiry time before the timer can be waited on.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer. ]]

]




[endsect]



[section:overload2 basic_deadline_timer::basic_deadline_timer (2 of 3 overloads)]


Constructor to set a particular expiry time as an absolute time. 


  basic_deadline_timer(
      boost::asio::io_service & io_service,
      const time_type & expiry_time);


This constructor creates a timer and sets the expiry time.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer.]]

[[expiry_time][The expiry time to be used for the timer, expressed as an absolute time. ]]

]




[endsect]



[section:overload3 basic_deadline_timer::basic_deadline_timer (3 of 3 overloads)]


Constructor to set a particular expiry time relative to now. 


  basic_deadline_timer(
      boost::asio::io_service & io_service,
      const duration_type & expiry_time);


This constructor creates a timer and sets the expiry time.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer.]]

[[expiry_time][The expiry time to be used for the timer, relative to now. ]]

]




[endsect]


[endsect]

[section:cancel basic_deadline_timer::cancel]

[indexterm2 cancel..basic_deadline_timer] 
Cancel any asynchronous operations that are waiting on the timer. 


  std::size_t ``[link boost_asio.reference.basic_deadline_timer.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.cancel.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_deadline_timer.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.cancel.overload2 more...]]``


[section:overload1 basic_deadline_timer::cancel (1 of 2 overloads)]


Cancel any asynchronous operations that are waiting on the timer. 


  std::size_t cancel();


This function forces the completion of any pending asynchronous wait operations against the timer. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `cancel()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload2 basic_deadline_timer::cancel (2 of 2 overloads)]


Cancel any asynchronous operations that are waiting on the timer. 


  std::size_t cancel(
      boost::system::error_code & ec);


This function forces the completion of any pending asynchronous wait operations against the timer. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Remarks]
      
If the timer has already expired when `cancel()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:cancel_one basic_deadline_timer::cancel_one]

[indexterm2 cancel_one..basic_deadline_timer] 
Cancels one asynchronous operation that is waiting on the timer. 


  std::size_t ``[link boost_asio.reference.basic_deadline_timer.cancel_one.overload1 cancel_one]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.cancel_one.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_deadline_timer.cancel_one.overload2 cancel_one]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.cancel_one.overload2 more...]]``


[section:overload1 basic_deadline_timer::cancel_one (1 of 2 overloads)]


Cancels one asynchronous operation that is waiting on the timer. 


  std::size_t cancel_one();


This function forces the completion of one pending asynchronous wait operation against the timer. Handlers are cancelled in FIFO order. The handler for the cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Return Value]
      
The number of asynchronous operations that were cancelled. That is, either 0 or 1.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `cancel_one()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload2 basic_deadline_timer::cancel_one (2 of 2 overloads)]


Cancels one asynchronous operation that is waiting on the timer. 


  std::size_t cancel_one(
      boost::system::error_code & ec);


This function forces the completion of one pending asynchronous wait operation against the timer. Handlers are cancelled in FIFO order. The handler for the cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled. That is, either 0 or 1.


[heading Remarks]
      
If the timer has already expired when `cancel_one()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]


[section:duration_type basic_deadline_timer::duration_type]

[indexterm2 duration_type..basic_deadline_timer] 
The duration type. 


  typedef traits_type::duration_type duration_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:expires_at basic_deadline_timer::expires_at]

[indexterm2 expires_at..basic_deadline_timer] 
Get the timer's expiry time as an absolute time. 


  time_type ``[link boost_asio.reference.basic_deadline_timer.expires_at.overload1 expires_at]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.expires_at.overload1 more...]]``


Set the timer's expiry time as an absolute time. 


  std::size_t ``[link boost_asio.reference.basic_deadline_timer.expires_at.overload2 expires_at]``(
      const time_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.expires_at.overload2 more...]]``

  std::size_t ``[link boost_asio.reference.basic_deadline_timer.expires_at.overload3 expires_at]``(
      const time_type & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.expires_at.overload3 more...]]``


[section:overload1 basic_deadline_timer::expires_at (1 of 3 overloads)]


Get the timer's expiry time as an absolute time. 


  time_type expires_at() const;


This function may be used to obtain the timer's current expiry time. Whether the timer has expired or not does not affect this value. 


[endsect]



[section:overload2 basic_deadline_timer::expires_at (2 of 3 overloads)]


Set the timer's expiry time as an absolute time. 


  std::size_t expires_at(
      const time_type & expiry_time);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `expires_at()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload3 basic_deadline_timer::expires_at (3 of 3 overloads)]


Set the timer's expiry time as an absolute time. 


  std::size_t expires_at(
      const time_type & expiry_time,
      boost::system::error_code & ec);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Remarks]
      
If the timer has already expired when `expires_at()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:expires_from_now basic_deadline_timer::expires_from_now]

[indexterm2 expires_from_now..basic_deadline_timer] 
Get the timer's expiry time relative to now. 


  duration_type ``[link boost_asio.reference.basic_deadline_timer.expires_from_now.overload1 expires_from_now]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.expires_from_now.overload1 more...]]``


Set the timer's expiry time relative to now. 


  std::size_t ``[link boost_asio.reference.basic_deadline_timer.expires_from_now.overload2 expires_from_now]``(
      const duration_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.expires_from_now.overload2 more...]]``

  std::size_t ``[link boost_asio.reference.basic_deadline_timer.expires_from_now.overload3 expires_from_now]``(
      const duration_type & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.expires_from_now.overload3 more...]]``


[section:overload1 basic_deadline_timer::expires_from_now (1 of 3 overloads)]


Get the timer's expiry time relative to now. 


  duration_type expires_from_now() const;


This function may be used to obtain the timer's current expiry time. Whether the timer has expired or not does not affect this value. 


[endsect]



[section:overload2 basic_deadline_timer::expires_from_now (2 of 3 overloads)]


Set the timer's expiry time relative to now. 


  std::size_t expires_from_now(
      const duration_type & expiry_time);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `expires_from_now()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload3 basic_deadline_timer::expires_from_now (3 of 3 overloads)]


Set the timer's expiry time relative to now. 


  std::size_t expires_from_now(
      const duration_type & expiry_time,
      boost::system::error_code & ec);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Remarks]
      
If the timer has already expired when `expires_from_now()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:get_implementation basic_deadline_timer::get_implementation]

[indexterm2 get_implementation..basic_deadline_timer] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_deadline_timer.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_deadline_timer.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.get_implementation.overload2 more...]]``


[section:overload1 basic_deadline_timer::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_deadline_timer::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_deadline_timer::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_deadline_timer] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service basic_deadline_timer::get_service]

[indexterm2 get_service..basic_deadline_timer] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_deadline_timer.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_deadline_timer.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.get_service.overload2 more...]]``


[section:overload1 basic_deadline_timer::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_deadline_timer::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_deadline_timer::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_deadline_timer] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_deadline_timer::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_deadline_timer] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_deadline_timer::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_deadline_timer] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_deadline_timer::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_deadline_timer] 
The type of the service that will be used to provide I/O operations. 


  typedef TimerService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:time_type basic_deadline_timer::time_type]

[indexterm2 time_type..basic_deadline_timer] 
The time type. 


  typedef traits_type::time_type time_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:traits_type basic_deadline_timer::traits_type]

[indexterm2 traits_type..basic_deadline_timer] 
The time traits type. 


  typedef TimeTraits traits_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:wait basic_deadline_timer::wait]

[indexterm2 wait..basic_deadline_timer] 
Perform a blocking wait on the timer. 


  void ``[link boost_asio.reference.basic_deadline_timer.wait.overload1 wait]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.wait.overload1 more...]]``

  void ``[link boost_asio.reference.basic_deadline_timer.wait.overload2 wait]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_deadline_timer.wait.overload2 more...]]``


[section:overload1 basic_deadline_timer::wait (1 of 2 overloads)]


Perform a blocking wait on the timer. 


  void wait();


This function is used to wait for the timer to expire. This function blocks and does not return until the timer has expired.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_deadline_timer::wait (2 of 2 overloads)]


Perform a blocking wait on the timer. 


  void wait(
      boost::system::error_code & ec);


This function is used to wait for the timer to expire. This function blocks and does not return until the timer has expired.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[endsect]

[section:basic_io_object basic_io_object]


Base class for all I/O objects. 


  template<
      typename ``[link boost_asio.reference.IoObjectService IoObjectService]``>
  class basic_io_object


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_io_object.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_io_object.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.basic_io_object.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_io_object.basic_io_object [*basic_io_object]]]
    [Construct a basic_io_object. 

     Move-construct a basic_io_object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_io_object.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_io_object.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_io_object.operator_eq_ [*operator=]]]
    [Move-assign a basic_io_object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_io_object._basic_io_object [*~basic_io_object]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_io_object.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_io_object.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]


[heading Remarks]
      
All I/O objects are non-copyable. However, when using C++0x, certain I/O objects do support move construction and move assignment. 



[heading Requirements]

[*Header: ][^boost/asio/basic_io_object.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:basic_io_object basic_io_object::basic_io_object]

[indexterm2 basic_io_object..basic_io_object] 
Construct a [link boost_asio.reference.basic_io_object `basic_io_object`]. 


  explicit ``[link boost_asio.reference.basic_io_object.basic_io_object.overload1 basic_io_object]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_io_object.basic_io_object.overload1 more...]]``


Move-construct a [link boost_asio.reference.basic_io_object `basic_io_object`]. 


  ``[link boost_asio.reference.basic_io_object.basic_io_object.overload2 basic_io_object]``(
      basic_io_object && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_io_object.basic_io_object.overload2 more...]]``


[section:overload1 basic_io_object::basic_io_object (1 of 2 overloads)]


Construct a [link boost_asio.reference.basic_io_object `basic_io_object`]. 


  basic_io_object(
      boost::asio::io_service & io_service);


Performs: 

   get_service().construct(get_implementation()); 





[endsect]



[section:overload2 basic_io_object::basic_io_object (2 of 2 overloads)]


Move-construct a [link boost_asio.reference.basic_io_object `basic_io_object`]. 


  basic_io_object(
      basic_io_object && other);


Performs: 

   get_service().move_construct(
       get_implementation(), other.get_implementation()); 





[heading Remarks]
      
Available only for services that support movability, 




[endsect]


[endsect]

[section:get_implementation basic_io_object::get_implementation]

[indexterm2 get_implementation..basic_io_object] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_io_object.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_io_object.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_io_object.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_io_object.get_implementation.overload2 more...]]``


[section:overload1 basic_io_object::get_implementation (1 of 2 overloads)]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_io_object::get_implementation (2 of 2 overloads)]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_io_object::get_io_service]

[indexterm2 get_io_service..basic_io_object] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service basic_io_object::get_service]

[indexterm2 get_service..basic_io_object] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_io_object.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_io_object.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_io_object.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_io_object.get_service.overload2 more...]]``


[section:overload1 basic_io_object::get_service (1 of 2 overloads)]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_io_object::get_service (2 of 2 overloads)]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_io_object::implementation]

[indexterm2 implementation..basic_io_object] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_io_object::implementation_type]

[indexterm2 implementation_type..basic_io_object] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_io_object.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ basic_io_object::operator=]

[indexterm2 operator=..basic_io_object] 
Move-assign a [link boost_asio.reference.basic_io_object `basic_io_object`]. 


  basic_io_object & operator=(
      basic_io_object && other);


Performs: 

   get_service().move_assign(get_implementation(),
       other.get_service(), other.get_implementation()); 





[heading Remarks]
      
Available only for services that support movability, 




[endsect]



[section:service basic_io_object::service]

[indexterm2 service..basic_io_object] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_io_object::service_type]

[indexterm2 service_type..basic_io_object] 
The type of the service that will be used to provide I/O operations. 


  typedef IoObjectService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_io_object.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:_basic_io_object basic_io_object::~basic_io_object]

[indexterm2 ~basic_io_object..basic_io_object] 
Protected destructor to prevent deletion through this type. 


  ~basic_io_object();


Performs: 

   get_service().destroy(get_implementation()); 





[endsect]



[endsect]

[section:basic_raw_socket basic_raw_socket]


Provides raw-oriented socket functionality. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.RawSocketService RawSocketService]`` = raw_socket_service<Protocol>>
  class basic_raw_socket :
    public basic_socket< Protocol, RawSocketService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_raw_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_receive_from [*async_receive_from]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_send [*async_send]]]
    [Start an asynchronous send on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.basic_raw_socket [*basic_raw_socket]]]
    [Construct a basic_raw_socket without opening it. 

     Construct and open a basic_raw_socket. 

     Construct a basic_raw_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_raw_socket on an existing native socket. 

     Move-construct a basic_raw_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_raw_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.receive [*receive]]]
    [Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.receive_from [*receive_from]]]
    [Receive raw data with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.send [*send]]]
    [Send some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.send_to [*send_to]]]
    [Send raw data to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] class template provides asynchronous and blocking raw-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_raw_socket::assign]

[indexterm2 assign..basic_raw_socket] 
Assign an existing native socket to the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.assign.overload2 more...]]``


[section:overload1 basic_raw_socket::assign (1 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  void assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket);



[endsect]



[section:overload2 basic_raw_socket::assign (2 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  boost::system::error_code assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_connect basic_raw_socket::async_connect]


['Inherited from basic_socket.]

[indexterm2 async_connect..basic_raw_socket] 
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 not 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:async_receive basic_raw_socket::async_receive]

[indexterm2 async_receive..basic_raw_socket] 
Start an asynchronous receive on a connected socket. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_receive.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_receive.overload2 more...]]``


[section:overload1 basic_raw_socket::async_receive (1 of 2 overloads)]


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 asynchronously receive data from the raw socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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_raw_socket::async_receive (2 of 2 overloads)]


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,
      socket_base::message_flags flags,
      ReadHandler handler);


This function is used to asynchronously receive data from the raw socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 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. 




[endsect]


[endsect]

[section:async_receive_from basic_raw_socket::async_receive_from]

[indexterm2 async_receive_from..basic_raw_socket] 
Start an asynchronous receive. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_receive_from.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_receive_from.overload2 more...]]``


[section:overload1 basic_raw_socket::async_receive_from (1 of 2 overloads)]


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 asynchronously receive raw data. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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_raw_socket::async_receive_from (2 of 2 overloads)]


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,
      socket_base::message_flags flags,
      ReadHandler handler);


This function is used to asynchronously receive raw data. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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:async_send basic_raw_socket::async_send]

[indexterm2 async_send..basic_raw_socket] 
Start an asynchronous send on a connected 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.overload1 async_send]``(
      const ConstBufferSequence & buffers,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_send.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_send.overload2 more...]]``


[section:overload1 basic_raw_socket::async_send (1 of 2 overloads)]


Start an asynchronous send on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_send(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


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]
    

[variablelist
  
[[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_raw_socket::async_send (2 of 2 overloads)]


Start an asynchronous send on a connected socket. 


  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 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]
    

[variablelist
  
[[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.]]

[[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 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. 




[endsect]


[endsect]

[section:async_send_to basic_raw_socket::async_send_to]

[indexterm2 async_send_to..basic_raw_socket] 
Start an asynchronous send. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_send_to.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.async_send_to.overload2 more...]]``


[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 function is used to asynchronously send raw data to the specified remote endpoint. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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.
   ); 
``
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 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. 




[endsect]



[section:overload2 basic_raw_socket::async_send_to (2 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,
      socket_base::message_flags flags,
      WriteHandler handler);


This function is used to asynchronously send raw data to the specified remote endpoint. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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.]]

[[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()`. ]]

]




[endsect]


[endsect]

[section:at_mark basic_raw_socket::at_mark]

[indexterm2 at_mark..basic_raw_socket] 
Determine whether the socket is at the out-of-band data mark. 


  bool ``[link boost_asio.reference.basic_raw_socket.at_mark.overload1 at_mark]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.at_mark.overload1 more...]]``

  bool ``[link boost_asio.reference.basic_raw_socket.at_mark.overload2 at_mark]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.at_mark.overload2 more...]]``


[section:overload1 basic_raw_socket::at_mark (1 of 2 overloads)]


['Inherited from basic_socket.]


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_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]

[indexterm2 available..basic_raw_socket] 
Determine the number of bytes available for reading. 


  std::size_t ``[link boost_asio.reference.basic_raw_socket.available.overload1 available]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.available.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_raw_socket.available.overload2 available]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.available.overload2 more...]]``


[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]

[indexterm2 basic_raw_socket..basic_raw_socket] 
Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] without opening it. 


  explicit ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload1 basic_raw_socket]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload1 more...]]``


Construct and open a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`]. 


  ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload2 basic_raw_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload2 more...]]``


Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`], opening it and binding it to the given local endpoint. 


  ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload3 basic_raw_socket]``(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload3 more...]]``


Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] on an existing native socket. 


  ``[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_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from another. 


  ``[link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload5 basic_raw_socket]``(
      basic_raw_socket && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.basic_raw_socket.overload5 more...]]``


[section:overload1 basic_raw_socket::basic_raw_socket (1 of 5 overloads)]


Construct a [link boost_asio.reference.basic_raw_socket `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 [link boost_asio.reference.io_service `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 5 overloads)]


Construct and open a [link boost_asio.reference.basic_raw_socket `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 [link boost_asio.reference.io_service `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 5 overloads)]


Construct a [link boost_asio.reference.basic_raw_socket `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 [link boost_asio.reference.io_service `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 5 overloads)]


Construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] on an existing native socket. 


  basic_raw_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);


This constructor creates a raw socket object to hold an existing native socket.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `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]



[section:overload5 basic_raw_socket::basic_raw_socket (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from another. 


  basic_raw_socket(
      basic_raw_socket && other);


This constructor moves a raw socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`. 




[endsect]


[endsect]

[section:bind basic_raw_socket::bind]

[indexterm2 bind..basic_raw_socket] 
Bind the socket to the given local endpoint. 


  void ``[link boost_asio.reference.basic_raw_socket.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.bind.overload2 more...]]``


[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]
  


   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_raw_socket::bind (2 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::broadcast]


['Inherited from socket_base.]

[indexterm2 broadcast..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_raw_socket::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_raw_socket::cancel]

[indexterm2 cancel..basic_raw_socket] 
Cancel all asynchronous operations associated with the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.cancel.overload2 more...]]``


[section:overload1 basic_raw_socket::cancel (1 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::cancel (2 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::close]

[indexterm2 close..basic_raw_socket] 
Close the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.close.overload2 more...]]``


[section:overload1 basic_raw_socket::close (1 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[heading Remarks]
      
For portable behaviour with respect to graceful closure of a connected socket, call `shutdown()` before closing the socket. 




[endsect]



[section:overload2 basic_raw_socket::close (2 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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_raw_socket::connect]

[indexterm2 connect..basic_raw_socket] 
Connect the socket to the specified endpoint. 


  void ``[link boost_asio.reference.basic_raw_socket.connect.overload1 connect]``(
      const endpoint_type & peer_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.connect.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.connect.overload2 connect]``(
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.connect.overload2 more...]]``


[section:overload1 basic_raw_socket::connect (1 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_raw_socket::connect (2 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_raw_socket::debug]


['Inherited from socket_base.]

[indexterm2 debug..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_raw_socket::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_raw_socket::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_raw_socket::endpoint_type]

[indexterm2 endpoint_type..basic_raw_socket] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation basic_raw_socket::get_implementation]

[indexterm2 get_implementation..basic_raw_socket] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_raw_socket.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_raw_socket.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.get_implementation.overload2 more...]]``


[section:overload1 basic_raw_socket::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_raw_socket::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_raw_socket::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_raw_socket] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_raw_socket::get_option]

[indexterm2 get_option..basic_raw_socket] 
Get an option from the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.get_option.overload1 get_option]``(
      GettableSocketOption & option) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.get_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.get_option.overload2 get_option]``(
      GettableSocketOption & option,
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.get_option.overload2 more...]]``


[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;


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_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;


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:get_service basic_raw_socket::get_service]

[indexterm2 get_service..basic_raw_socket] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_raw_socket.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_raw_socket.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.get_service.overload2 more...]]``


[section:overload1 basic_raw_socket::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_raw_socket::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_raw_socket::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_raw_socket] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_raw_socket::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_raw_socket] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_raw_socket::io_control]

[indexterm2 io_control..basic_raw_socket] 
Perform an IO control command on the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.io_control.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.io_control.overload2 more...]]``


[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);


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_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);


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:is_open basic_raw_socket::is_open]


['Inherited from basic_socket.]

[indexterm2 is_open..basic_raw_socket] 
Determine whether the socket is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_raw_socket::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_raw_socket::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:local_endpoint basic_raw_socket::local_endpoint]

[indexterm2 local_endpoint..basic_raw_socket] 
Get the local endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_raw_socket.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_raw_socket.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.local_endpoint.overload2 more...]]``


[section:overload1 basic_raw_socket::local_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::local_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::lowest_layer]

[indexterm2 lowest_layer..basic_raw_socket] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_raw_socket.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_raw_socket.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.lowest_layer.overload2 more...]]``


[section:overload1 basic_raw_socket::lowest_layer (1 of 2 overloads)]


['Inherited from basic_socket.]


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 [link boost_asio.reference.basic_socket `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:overload2 basic_raw_socket::lowest_layer (2 of 2 overloads)]


['Inherited from basic_socket.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_socket `basic_socket`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_raw_socket::lowest_layer_type]


['Inherited from basic_socket.]

[indexterm2 lowest_layer_type..basic_raw_socket] 
A [link boost_asio.reference.basic_socket `basic_socket`] is always the lowest layer. 


  typedef basic_socket< Protocol, RawSocketService > 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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 




[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections basic_raw_socket::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_raw_socket] 
The maximum length of the queue of pending incoming connections. 


  static const int max_connections = implementation_defined;



[endsect]



[section:message_do_not_route basic_raw_socket::message_do_not_route]


['Inherited from socket_base.]

[indexterm2 message_do_not_route..basic_raw_socket] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_raw_socket::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_raw_socket] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_raw_socket::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_raw_socket] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_raw_socket::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_raw_socket] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek basic_raw_socket::message_peek]


['Inherited from socket_base.]

[indexterm2 message_peek..basic_raw_socket] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_raw_socket::native]


['Inherited from basic_socket.]

[indexterm2 native..basic_raw_socket] 
(Deprecated: Use `native_handle()`.) 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_handle basic_raw_socket::native_handle]


['Inherited from basic_socket.]

[indexterm2 native_handle..basic_raw_socket] 
Get the native socket representation. 


  native_handle_type native_handle();


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_handle_type basic_raw_socket::native_handle_type]

[indexterm2 native_handle_type..basic_raw_socket] 
The native representation of a socket. 


  typedef RawSocketService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_raw_socket::native_non_blocking]

[indexterm2 native_non_blocking..basic_raw_socket] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.basic_raw_socket.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  void ``[link boost_asio.reference.basic_raw_socket.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.native_non_blocking.overload3 more...]]``


[section:overload1 basic_raw_socket::native_non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native socket. This mode has no effect on the behaviour of the socket object's synchronous operations.


[heading Return Value]
      
`true` if the underlying socket is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the socket object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native socket.


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload2 basic_raw_socket::native_non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload3 basic_raw_socket::native_non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]


[endsect]


[section:native_type basic_raw_socket::native_type]

[indexterm2 native_type..basic_raw_socket] 
(Deprecated: Use native\_handle\_type.) The native representation of a socket. 


  typedef RawSocketService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_raw_socket::non_blocking]

[indexterm2 non_blocking..basic_raw_socket] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.basic_raw_socket.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.non_blocking.overload3 more...]]``


[section:overload1 basic_raw_socket::non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the socket. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_raw_socket::non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_raw_socket::non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_raw_socket::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_raw_socket] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_raw_socket::open]

[indexterm2 open..basic_raw_socket] 
Open the socket using the specified protocol. 


  void ``[link boost_asio.reference.basic_raw_socket.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.open.overload2 more...]]``


[section:overload1 basic_raw_socket::open (1 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::open (2 of 2 overloads)]


['Inherited from basic_socket.]


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:operator_eq_ basic_raw_socket::operator=]

[indexterm2 operator=..basic_raw_socket] 
Move-assign a [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] from another. 


  basic_raw_socket & operator=(
      basic_raw_socket && other);


This assignment operator moves a raw socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`. 




[endsect]



[section:protocol_type basic_raw_socket::protocol_type]

[indexterm2 protocol_type..basic_raw_socket] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:receive basic_raw_socket::receive]

[indexterm2 receive..basic_raw_socket] 
Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_raw_socket.receive.overload1 receive]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.receive.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.receive.overload2 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.receive.overload3 more...]]``


[section:overload1 basic_raw_socket::receive (1 of 3 overloads)]


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers);


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.]]

]


[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: 

   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. 




[endsect]



[section:overload2 basic_raw_socket::receive (2 of 3 overloads)]


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags);


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.]]

[[flags][Flags specifying how the receive call is to be made.]]

]


[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:overload3 basic_raw_socket::receive (3 of 3 overloads)]


Receive some data on a connected socket. 


  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);


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.]]

[[flags][Flags specifying how the receive call is to be made.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes received.


[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]


[endsect]


[section:receive_buffer_size basic_raw_socket::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:receive_from basic_raw_socket::receive_from]

[indexterm2 receive_from..basic_raw_socket] 
Receive raw data with the endpoint of the sender. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.receive_from.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.receive_from.overload2 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.receive_from.overload3 more...]]``


[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]
    

[variablelist
  
[[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]
      
The number of bytes received.


[heading Exceptions]
    

[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]



[section:overload2 basic_raw_socket::receive_from (2 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,
      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.


[heading Parameters]
    

[variablelist
  
[[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.]]

]


[heading Return Value]
      
The number of bytes received.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 basic_raw_socket::receive_from (3 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,
      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.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes received. 




[endsect]


[endsect]


[section:receive_low_watermark basic_raw_socket::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remote_endpoint basic_raw_socket::remote_endpoint]

[indexterm2 remote_endpoint..basic_raw_socket] 
Get the remote endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_raw_socket.remote_endpoint.overload1 remote_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.remote_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_raw_socket.remote_endpoint.overload2 remote_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.remote_endpoint.overload2 more...]]``


[section:overload1 basic_raw_socket::remote_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::remote_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::reuse_address]


['Inherited from socket_base.]

[indexterm2 reuse_address..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:send basic_raw_socket::send]

[indexterm2 send..basic_raw_socket] 
Send some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_raw_socket.send.overload1 send]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.send.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.send.overload2 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.send.overload3 more...]]``


[section:overload1 basic_raw_socket::send (1 of 3 overloads)]


Send some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t send(
      const ConstBufferSequence & buffers);


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]
    

[variablelist
  
[[buffers][One ore more data buffers to be sent on the socket.]]

]


[heading Return Value]
      
The number of bytes sent.


[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.


[heading Example]
  
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. 




[endsect]



[section:overload2 basic_raw_socket::send (2 of 3 overloads)]


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);


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]
    

[variablelist
  
[[buffers][One ore more data buffers to be sent on the socket.]]

[[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.]]

]


[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]



[section:overload3 basic_raw_socket::send (3 of 3 overloads)]


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);


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]
    

[variablelist
  
[[buffers][One or more data buffers to be sent on the socket.]]

[[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.


[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:send_buffer_size basic_raw_socket::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_raw_socket::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_raw_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:send_to basic_raw_socket::send_to]

[indexterm2 send_to..basic_raw_socket] 
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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.send_to.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.send_to.overload2 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.send_to.overload3 more...]]``


[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.]

[indexterm2 service..basic_raw_socket] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_raw_socket::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_raw_socket] 
The type of the service that will be used to provide I/O operations. 


  typedef RawSocketService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_raw_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_raw_socket::set_option]

[indexterm2 set_option..basic_raw_socket] 
Set an option on the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.set_option.overload1 set_option]``(
      const SettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.set_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.set_option.overload2 set_option]``(
      const SettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.set_option.overload2 more...]]``


[section:overload1 basic_raw_socket::set_option (1 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::set_option (2 of 2 overloads)]


['Inherited from basic_socket.]


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_raw_socket::shutdown]

[indexterm2 shutdown..basic_raw_socket] 
Disable sends or receives on the socket. 


  void ``[link boost_asio.reference.basic_raw_socket.shutdown.overload1 shutdown]``(
      shutdown_type what);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_raw_socket.shutdown.overload2 shutdown]``(
      shutdown_type what,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_raw_socket.shutdown.overload2 more...]]``


[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.]

[indexterm2 shutdown_type..basic_raw_socket] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_raw_socket]
[indexterm2 shutdown_send..basic_raw_socket]
[indexterm2 shutdown_both..basic_raw_socket]

[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_seq_packet_socket basic_seq_packet_socket]


Provides sequenced packet socket functionality. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SeqPacketSocketService SeqPacketSocketService]`` = seq_packet_socket_service<Protocol>>
  class basic_seq_packet_socket :
    public basic_socket< Protocol, SeqPacketSocketService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_seq_packet_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket [*basic_seq_packet_socket]]]
    [Construct a basic_seq_packet_socket without opening it. 

     Construct and open a basic_seq_packet_socket. 

     Construct a basic_seq_packet_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_seq_packet_socket on an existing native socket. 

     Move-construct a basic_seq_packet_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_seq_packet_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.receive [*receive]]]
    [Receive some data on the socket. 

     Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.send [*send]]]
    [Send some data on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_seq_packet_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_seq_packet_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] class template provides asynchronous and blocking sequenced packet socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_seq_packet_socket::assign]

[indexterm2 assign..basic_seq_packet_socket] 
Assign an existing native socket to the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.assign.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::assign (1 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  void assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket);



[endsect]



[section:overload2 basic_seq_packet_socket::assign (2 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  boost::system::error_code assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_connect basic_seq_packet_socket::async_connect]


['Inherited from basic_socket.]

[indexterm2 async_connect..basic_seq_packet_socket] 
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 not 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:async_receive basic_seq_packet_socket::async_receive]

[indexterm2 async_receive..basic_seq_packet_socket] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_seq_packet_socket.async_receive.overload1 async_receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags & out_flags,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.async_receive.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_seq_packet_socket.async_receive.overload2 async_receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.async_receive.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::async_receive (1 of 2 overloads)]


Start an asynchronous receive. 


  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 & out_flags,
      ReadHandler handler);


This function is used to asynchronously receive data from the sequenced packet socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[out_flags][Once the asynchronous operation completes, contains flags associated with the received data. For example, if the `socket_base::message_end_of_record` bit is set then the received data marks the end of a record. The caller must guarantee that the referenced variable remains 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(boost::asio::buffer(data, size), out_flags, 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_seq_packet_socket::async_receive (2 of 2 overloads)]


Start an asynchronous receive. 


  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 in_flags,
      socket_base::message_flags & out_flags,
      ReadHandler handler);


This function is used to asynchronously receive data from the sequenced data socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[in_flags][Flags specifying how the receive call is to be made.]]

[[out_flags][Once the asynchronous operation completes, contains flags associated with the received data. For example, if the `socket_base::message_end_of_record` bit is set then the received data marks the end of a record. The caller must guarantee that the referenced variable remains 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(
       boost::asio::buffer(data, size),
       0, out_flags, 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]


[endsect]


[section:async_send basic_seq_packet_socket::async_send]

[indexterm2 async_send..basic_seq_packet_socket] 
Start an asynchronous send. 


  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 function is used to asynchronously send data on the sequenced packet socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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 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), 0, 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:at_mark basic_seq_packet_socket::at_mark]

[indexterm2 at_mark..basic_seq_packet_socket] 
Determine whether the socket is at the out-of-band data mark. 


  bool ``[link boost_asio.reference.basic_seq_packet_socket.at_mark.overload1 at_mark]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.at_mark.overload1 more...]]``

  bool ``[link boost_asio.reference.basic_seq_packet_socket.at_mark.overload2 at_mark]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.at_mark.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::at_mark (1 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_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_seq_packet_socket::available]

[indexterm2 available..basic_seq_packet_socket] 
Determine the number of bytes available for reading. 


  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.available.overload1 available]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.available.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.available.overload2 available]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.available.overload2 more...]]``


[section:overload1 basic_seq_packet_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_seq_packet_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_seq_packet_socket basic_seq_packet_socket::basic_seq_packet_socket]

[indexterm2 basic_seq_packet_socket..basic_seq_packet_socket] 
Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] without opening it. 


  explicit ``[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload1 basic_seq_packet_socket]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload1 more...]]``


Construct and open a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`]. 


  ``[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload2 basic_seq_packet_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload2 more...]]``


Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`], opening it and binding it to the given local endpoint. 


  ``[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload3 basic_seq_packet_socket]``(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload3 more...]]``


Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] on an existing native socket. 


  ``[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload4 basic_seq_packet_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another. 


  ``[link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload5 basic_seq_packet_socket]``(
      basic_seq_packet_socket && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload5 more...]]``


[section:overload1 basic_seq_packet_socket::basic_seq_packet_socket (1 of 5 overloads)]


Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] without opening it. 


  basic_seq_packet_socket(
      boost::asio::io_service & io_service);


This constructor creates a sequenced packet socket without opening it. The socket needs to be opened and then connected or accepted before data can be sent or received on it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the sequenced packet socket will use to dispatch handlers for any asynchronous operations performed on the socket. ]]

]




[endsect]



[section:overload2 basic_seq_packet_socket::basic_seq_packet_socket (2 of 5 overloads)]


Construct and open a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`]. 


  basic_seq_packet_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);


This constructor creates and opens a sequenced\_packet socket. The socket needs to be connected or accepted before data can be sent or received on it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the sequenced packet 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_seq_packet_socket::basic_seq_packet_socket (3 of 5 overloads)]


Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`], opening it and binding it to the given local endpoint. 


  basic_seq_packet_socket(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);


This constructor creates a sequenced packet 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 [link boost_asio.reference.io_service `io_service`] object that the sequenced packet socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]

[[endpoint][An endpoint on the local machine to which the sequenced packet socket will be bound.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload4 basic_seq_packet_socket::basic_seq_packet_socket (4 of 5 overloads)]


Construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] on an existing native socket. 


  basic_seq_packet_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);


This constructor creates a sequenced packet socket object to hold an existing native socket.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the sequenced packet 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]



[section:overload5 basic_seq_packet_socket::basic_seq_packet_socket (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another. 


  basic_seq_packet_socket(
      basic_seq_packet_socket && other);


This constructor moves a sequenced packet socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`. 




[endsect]


[endsect]

[section:bind basic_seq_packet_socket::bind]

[indexterm2 bind..basic_seq_packet_socket] 
Bind the socket to the given local endpoint. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.bind.overload2 more...]]``


[section:overload1 basic_seq_packet_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]
  


   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_seq_packet_socket::bind (2 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::broadcast]


['Inherited from socket_base.]

[indexterm2 broadcast..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_seq_packet_socket::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_seq_packet_socket::cancel]

[indexterm2 cancel..basic_seq_packet_socket] 
Cancel all asynchronous operations associated with the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.cancel.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::cancel (1 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::cancel (2 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::close]

[indexterm2 close..basic_seq_packet_socket] 
Close the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.close.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::close (1 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[heading Remarks]
      
For portable behaviour with respect to graceful closure of a connected socket, call `shutdown()` before closing the socket. 




[endsect]



[section:overload2 basic_seq_packet_socket::close (2 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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_seq_packet_socket::connect]

[indexterm2 connect..basic_seq_packet_socket] 
Connect the socket to the specified endpoint. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.connect.overload1 connect]``(
      const endpoint_type & peer_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.connect.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.connect.overload2 connect]``(
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.connect.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::connect (1 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_seq_packet_socket::connect (2 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_seq_packet_socket::debug]


['Inherited from socket_base.]

[indexterm2 debug..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_seq_packet_socket::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_seq_packet_socket::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_seq_packet_socket::endpoint_type]

[indexterm2 endpoint_type..basic_seq_packet_socket] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation basic_seq_packet_socket::get_implementation]

[indexterm2 get_implementation..basic_seq_packet_socket] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_seq_packet_socket.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_seq_packet_socket.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.get_implementation.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_seq_packet_socket::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_seq_packet_socket::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_seq_packet_socket] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_seq_packet_socket::get_option]

[indexterm2 get_option..basic_seq_packet_socket] 
Get an option from the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.get_option.overload1 get_option]``(
      GettableSocketOption & option) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.get_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.get_option.overload2 get_option]``(
      GettableSocketOption & option,
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.get_option.overload2 more...]]``


[section:overload1 basic_seq_packet_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;


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_seq_packet_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;


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:get_service basic_seq_packet_socket::get_service]

[indexterm2 get_service..basic_seq_packet_socket] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_seq_packet_socket.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_seq_packet_socket.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.get_service.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_seq_packet_socket::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_seq_packet_socket::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_seq_packet_socket] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_seq_packet_socket::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_seq_packet_socket] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_seq_packet_socket::io_control]

[indexterm2 io_control..basic_seq_packet_socket] 
Perform an IO control command on the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.io_control.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.io_control.overload2 more...]]``


[section:overload1 basic_seq_packet_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);


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_seq_packet_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);


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:is_open basic_seq_packet_socket::is_open]


['Inherited from basic_socket.]

[indexterm2 is_open..basic_seq_packet_socket] 
Determine whether the socket is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_seq_packet_socket::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_seq_packet_socket::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:local_endpoint basic_seq_packet_socket::local_endpoint]

[indexterm2 local_endpoint..basic_seq_packet_socket] 
Get the local endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_seq_packet_socket.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_seq_packet_socket.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.local_endpoint.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::local_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::local_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::lowest_layer]

[indexterm2 lowest_layer..basic_seq_packet_socket] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_seq_packet_socket.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_seq_packet_socket.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.lowest_layer.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::lowest_layer (1 of 2 overloads)]


['Inherited from basic_socket.]


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 [link boost_asio.reference.basic_socket `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:overload2 basic_seq_packet_socket::lowest_layer (2 of 2 overloads)]


['Inherited from basic_socket.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_socket `basic_socket`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_seq_packet_socket::lowest_layer_type]


['Inherited from basic_socket.]

[indexterm2 lowest_layer_type..basic_seq_packet_socket] 
A [link boost_asio.reference.basic_socket `basic_socket`] is always the lowest layer. 


  typedef basic_socket< Protocol, SeqPacketSocketService > 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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 




[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections basic_seq_packet_socket::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_seq_packet_socket] 
The maximum length of the queue of pending incoming connections. 


  static const int max_connections = implementation_defined;



[endsect]



[section:message_do_not_route basic_seq_packet_socket::message_do_not_route]


['Inherited from socket_base.]

[indexterm2 message_do_not_route..basic_seq_packet_socket] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_seq_packet_socket::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_seq_packet_socket] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_seq_packet_socket::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_seq_packet_socket] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_seq_packet_socket::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_seq_packet_socket] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek basic_seq_packet_socket::message_peek]


['Inherited from socket_base.]

[indexterm2 message_peek..basic_seq_packet_socket] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_seq_packet_socket::native]


['Inherited from basic_socket.]

[indexterm2 native..basic_seq_packet_socket] 
(Deprecated: Use `native_handle()`.) 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_handle basic_seq_packet_socket::native_handle]


['Inherited from basic_socket.]

[indexterm2 native_handle..basic_seq_packet_socket] 
Get the native socket representation. 


  native_handle_type native_handle();


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_handle_type basic_seq_packet_socket::native_handle_type]

[indexterm2 native_handle_type..basic_seq_packet_socket] 
The native representation of a socket. 


  typedef SeqPacketSocketService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_seq_packet_socket::native_non_blocking]

[indexterm2 native_non_blocking..basic_seq_packet_socket] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.basic_seq_packet_socket.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.native_non_blocking.overload3 more...]]``


[section:overload1 basic_seq_packet_socket::native_non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native socket. This mode has no effect on the behaviour of the socket object's synchronous operations.


[heading Return Value]
      
`true` if the underlying socket is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the socket object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native socket.


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload2 basic_seq_packet_socket::native_non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload3 basic_seq_packet_socket::native_non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]


[endsect]


[section:native_type basic_seq_packet_socket::native_type]

[indexterm2 native_type..basic_seq_packet_socket] 
(Deprecated: Use native\_handle\_type.) The native representation of a socket. 


  typedef SeqPacketSocketService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_seq_packet_socket::non_blocking]

[indexterm2 non_blocking..basic_seq_packet_socket] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.basic_seq_packet_socket.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.non_blocking.overload3 more...]]``


[section:overload1 basic_seq_packet_socket::non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the socket. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_seq_packet_socket::non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_seq_packet_socket::non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_seq_packet_socket::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_seq_packet_socket] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_seq_packet_socket::open]

[indexterm2 open..basic_seq_packet_socket] 
Open the socket using the specified protocol. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.open.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::open (1 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::open (2 of 2 overloads)]


['Inherited from basic_socket.]


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:operator_eq_ basic_seq_packet_socket::operator=]

[indexterm2 operator=..basic_seq_packet_socket] 
Move-assign a [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another. 


  basic_seq_packet_socket & operator=(
      basic_seq_packet_socket && other);


This assignment operator moves a sequenced packet socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`. 




[endsect]



[section:protocol_type basic_seq_packet_socket::protocol_type]

[indexterm2 protocol_type..basic_seq_packet_socket] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:receive basic_seq_packet_socket::receive]

[indexterm2 receive..basic_seq_packet_socket] 
Receive some data on the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.receive.overload1 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags & out_flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.receive.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.receive.overload2 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.receive.overload2 more...]]``


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.receive.overload3 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.receive.overload3 more...]]``


[section:overload1 basic_seq_packet_socket::receive (1 of 3 overloads)]


Receive some data on the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers,
      socket_base::message_flags & out_flags);


This function is used to receive data on the sequenced packet socket. The function call will block until data has been received successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be received.]]

[[out_flags][After the receive call completes, contains flags associated with the received data. For example, if the `socket_base::message_end_of_record` bit is set then the received data marks the end of a record.]]

]


[heading Return Value]
      
The number of bytes received.


[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.]]

]


[heading Example]
  
To receive into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.receive(boost::asio::buffer(data, size), out_flags);


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_seq_packet_socket::receive (2 of 3 overloads)]


Receive some data on the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags);


This function is used to receive data on the sequenced packet socket. The function call will block until data has been received successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be received.]]

[[in_flags][Flags specifying how the receive call is to be made.]]

[[out_flags][After the receive call completes, contains flags associated with the received data. For example, if the `socket_base::message_end_of_record` bit is set then the received data marks the end of a record.]]

]


[heading Return Value]
      
The number of bytes received.


[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.]]

]


[heading Remarks]
      
The receive operation may not receive 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 receive into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.receive(boost::asio::buffer(data, size), 0, out_flags);


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:overload3 basic_seq_packet_socket::receive (3 of 3 overloads)]


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags,
      boost::system::error_code & ec);


This function is used to receive data on the sequenced packet socket. The function call will block until data has been received successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be received.]]

[[in_flags][Flags specifying how the receive call is to be made.]]

[[out_flags][After the receive call completes, contains flags associated with the received data. For example, if the `socket_base::message_end_of_record` bit is set then the received data marks the end of a record.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes received. Returns 0 if an error occurred.


[heading Remarks]
      
The receive operation may not receive 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:receive_buffer_size basic_seq_packet_socket::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_low_watermark basic_seq_packet_socket::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remote_endpoint basic_seq_packet_socket::remote_endpoint]

[indexterm2 remote_endpoint..basic_seq_packet_socket] 
Get the remote endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_seq_packet_socket.remote_endpoint.overload1 remote_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.remote_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_seq_packet_socket.remote_endpoint.overload2 remote_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.remote_endpoint.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::remote_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::remote_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::reuse_address]


['Inherited from socket_base.]

[indexterm2 reuse_address..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:send basic_seq_packet_socket::send]

[indexterm2 send..basic_seq_packet_socket] 
Send some data on the socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.send.overload1 send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.send.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_seq_packet_socket.send.overload2 send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.send.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::send (1 of 2 overloads)]


Send some data on the socket. 


  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 send data on the sequenced packet socket. The function call will block until the data has been sent successfully, or an until error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be sent on the socket.]]

[[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.]]

]


[heading Example]
  
To send a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.send(boost::asio::buffer(data, size), 0);


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_seq_packet_socket::send (2 of 2 overloads)]


Send some data on the 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);


This function is used to send data on the sequenced packet socket. The function call will block the data has been sent successfully, or an until error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be sent on the socket.]]

[[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. Returns 0 if an error occurred.


[heading Remarks]
      
The send 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]


[section:send_buffer_size basic_seq_packet_socket::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_seq_packet_socket::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_seq_packet_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_seq_packet_socket::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_seq_packet_socket] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_seq_packet_socket::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_seq_packet_socket] 
The type of the service that will be used to provide I/O operations. 


  typedef SeqPacketSocketService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_seq_packet_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_seq_packet_socket::set_option]

[indexterm2 set_option..basic_seq_packet_socket] 
Set an option on the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.set_option.overload1 set_option]``(
      const SettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.set_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.set_option.overload2 set_option]``(
      const SettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.set_option.overload2 more...]]``


[section:overload1 basic_seq_packet_socket::set_option (1 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::set_option (2 of 2 overloads)]


['Inherited from basic_socket.]


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_seq_packet_socket::shutdown]

[indexterm2 shutdown..basic_seq_packet_socket] 
Disable sends or receives on the socket. 


  void ``[link boost_asio.reference.basic_seq_packet_socket.shutdown.overload1 shutdown]``(
      shutdown_type what);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_seq_packet_socket.shutdown.overload2 shutdown]``(
      shutdown_type what,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_seq_packet_socket.shutdown.overload2 more...]]``


[section:overload1 basic_seq_packet_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_seq_packet_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_seq_packet_socket::shutdown_type]


['Inherited from socket_base.]

[indexterm2 shutdown_type..basic_seq_packet_socket] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_seq_packet_socket]
[indexterm2 shutdown_send..basic_seq_packet_socket]
[indexterm2 shutdown_both..basic_seq_packet_socket]

[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_serial_port basic_serial_port]


Provides serial port functionality. 


  template<
      typename ``[link boost_asio.reference.SerialPortService SerialPortService]`` = serial_port_service>
  class basic_serial_port :
    public basic_io_object< SerialPortService >,
    public serial_port_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_serial_port.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.lowest_layer_type [*lowest_layer_type]]]
    [A basic_serial_port is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.native_handle_type [*native_handle_type]]]
    [The native representation of a serial port. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a serial port. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.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.basic_serial_port.assign [*assign]]]
    [Assign an existing native serial port to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.basic_serial_port [*basic_serial_port]]]
    [Construct a basic_serial_port without opening it. 

     Construct and open a basic_serial_port. 

     Construct a basic_serial_port on an existing native serial port. 

     Move-construct a basic_serial_port from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.close [*close]]]
    [Close the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_option [*get_option]]]
    [Get an option from the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.is_open [*is_open]]]
    [Determine whether the serial port is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native serial port representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.native_handle [*native_handle]]]
    [Get the native serial port representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.open [*open]]]
    [Open the serial port using the specified device name. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.operator_eq_ [*operator=]]]
    [Move-assign a basic_serial_port from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.read_some [*read_some]]]
    [Read some data from the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.send_break [*send_break]]]
    [Send a break sequence to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.set_option [*set_option]]]
    [Set an option on the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.write_some [*write_some]]]
    [Write some data to the serial port. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_serial_port.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_serial_port.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_serial_port.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_serial_port `basic_serial_port`] class template provides functionality that is common to all serial ports.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/basic_serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_serial_port::assign]

[indexterm2 assign..basic_serial_port] 
Assign an existing native serial port to the serial port. 


  void ``[link boost_asio.reference.basic_serial_port.assign.overload1 assign]``(
      const native_handle_type & native_serial_port);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.assign.overload2 assign]``(
      const native_handle_type & native_serial_port,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.assign.overload2 more...]]``


[section:overload1 basic_serial_port::assign (1 of 2 overloads)]


Assign an existing native serial port to the serial port. 


  void assign(
      const native_handle_type & native_serial_port);



[endsect]



[section:overload2 basic_serial_port::assign (2 of 2 overloads)]


Assign an existing native serial port to the serial port. 


  boost::system::error_code assign(
      const native_handle_type & native_serial_port,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_read_some basic_serial_port::async_read_some]

[indexterm2 async_read_some..basic_serial_port] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read data from the serial port. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be read. 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 read 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 read.
   ); 
``
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 read operation may not read all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   serial_port.async_read_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]



[section:async_write_some basic_serial_port::async_write_some]

[indexterm2 async_write_some..basic_serial_port] 
Start an asynchronous write. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write data to the serial port. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the serial port. 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 write 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 written.
   ); 
``
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 write operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   serial_port.async_write_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]


[section:basic_serial_port basic_serial_port::basic_serial_port]

[indexterm2 basic_serial_port..basic_serial_port] 
Construct a [link boost_asio.reference.basic_serial_port `basic_serial_port`] without opening it. 


  explicit ``[link boost_asio.reference.basic_serial_port.basic_serial_port.overload1 basic_serial_port]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.basic_serial_port.overload1 more...]]``


Construct and open a [link boost_asio.reference.basic_serial_port `basic_serial_port`]. 


  explicit ``[link boost_asio.reference.basic_serial_port.basic_serial_port.overload2 basic_serial_port]``(
      boost::asio::io_service & io_service,
      const char * device);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.basic_serial_port.overload2 more...]]``

  explicit ``[link boost_asio.reference.basic_serial_port.basic_serial_port.overload3 basic_serial_port]``(
      boost::asio::io_service & io_service,
      const std::string & device);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.basic_serial_port.overload3 more...]]``


Construct a [link boost_asio.reference.basic_serial_port `basic_serial_port`] on an existing native serial port. 


  ``[link boost_asio.reference.basic_serial_port.basic_serial_port.overload4 basic_serial_port]``(
      boost::asio::io_service & io_service,
      const native_handle_type & native_serial_port);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.basic_serial_port.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_serial_port `basic_serial_port`] from another. 


  ``[link boost_asio.reference.basic_serial_port.basic_serial_port.overload5 basic_serial_port]``(
      basic_serial_port && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.basic_serial_port.overload5 more...]]``


[section:overload1 basic_serial_port::basic_serial_port (1 of 5 overloads)]


Construct a [link boost_asio.reference.basic_serial_port `basic_serial_port`] without opening it. 


  basic_serial_port(
      boost::asio::io_service & io_service);


This constructor creates a serial port without opening it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the serial port will use to dispatch handlers for any asynchronous operations performed on the port. ]]

]




[endsect]



[section:overload2 basic_serial_port::basic_serial_port (2 of 5 overloads)]


Construct and open a [link boost_asio.reference.basic_serial_port `basic_serial_port`]. 


  basic_serial_port(
      boost::asio::io_service & io_service,
      const char * device);


This constructor creates and opens a serial port for the specified device name.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the serial port will use to dispatch handlers for any asynchronous operations performed on the port.]]

[[device][The platform-specific device name for this serial port. ]]

]




[endsect]



[section:overload3 basic_serial_port::basic_serial_port (3 of 5 overloads)]


Construct and open a [link boost_asio.reference.basic_serial_port `basic_serial_port`]. 


  basic_serial_port(
      boost::asio::io_service & io_service,
      const std::string & device);


This constructor creates and opens a serial port for the specified device name.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the serial port will use to dispatch handlers for any asynchronous operations performed on the port.]]

[[device][The platform-specific device name for this serial port. ]]

]




[endsect]



[section:overload4 basic_serial_port::basic_serial_port (4 of 5 overloads)]


Construct a [link boost_asio.reference.basic_serial_port `basic_serial_port`] on an existing native serial port. 


  basic_serial_port(
      boost::asio::io_service & io_service,
      const native_handle_type & native_serial_port);


This constructor creates a serial port object to hold an existing native serial port.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the serial port will use to dispatch handlers for any asynchronous operations performed on the port.]]

[[native_serial_port][A native serial port.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload5 basic_serial_port::basic_serial_port (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_serial_port `basic_serial_port`] from another. 


  basic_serial_port(
      basic_serial_port && other);


This constructor moves a serial port from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_serial_port `basic_serial_port`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_serial_port(io_service&) constructor`. 




[endsect]


[endsect]

[section:cancel basic_serial_port::cancel]

[indexterm2 cancel..basic_serial_port] 
Cancel all asynchronous operations associated with the serial port. 


  void ``[link boost_asio.reference.basic_serial_port.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.cancel.overload2 more...]]``


[section:overload1 basic_serial_port::cancel (1 of 2 overloads)]


Cancel all asynchronous operations associated with the serial port. 


  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 basic_serial_port::cancel (2 of 2 overloads)]


Cancel all asynchronous operations associated with the serial port. 


  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 basic_serial_port::close]

[indexterm2 close..basic_serial_port] 
Close the serial port. 


  void ``[link boost_asio.reference.basic_serial_port.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.close.overload2 more...]]``


[section:overload1 basic_serial_port::close (1 of 2 overloads)]


Close the serial port. 


  void close();


This function is used to close the serial port. 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 basic_serial_port::close (2 of 2 overloads)]


Close the serial port. 


  boost::system::error_code close(
      boost::system::error_code & ec);


This function is used to close the serial port. 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_implementation basic_serial_port::get_implementation]

[indexterm2 get_implementation..basic_serial_port] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_serial_port.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_serial_port.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.get_implementation.overload2 more...]]``


[section:overload1 basic_serial_port::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_serial_port::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_serial_port::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_serial_port] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_serial_port::get_option]

[indexterm2 get_option..basic_serial_port] 
Get an option from the serial port. 


  template<
      typename ``[link boost_asio.reference.GettableSerialPortOption GettableSerialPortOption]``>
  void ``[link boost_asio.reference.basic_serial_port.get_option.overload1 get_option]``(
      GettableSerialPortOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.get_option.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.GettableSerialPortOption GettableSerialPortOption]``>
  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.get_option.overload2 get_option]``(
      GettableSerialPortOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.get_option.overload2 more...]]``


[section:overload1 basic_serial_port::get_option (1 of 2 overloads)]


Get an option from the serial port. 


  template<
      typename ``[link boost_asio.reference.GettableSerialPortOption GettableSerialPortOption]``>
  void get_option(
      GettableSerialPortOption & option);


This function is used to get the current value of an option on the serial port.


[heading Parameters]
    

[variablelist
  
[[option][The option value to be obtained from the serial port.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]





[endsect]



[section:overload2 basic_serial_port::get_option (2 of 2 overloads)]


Get an option from the serial port. 


  template<
      typename ``[link boost_asio.reference.GettableSerialPortOption GettableSerialPortOption]``>
  boost::system::error_code get_option(
      GettableSerialPortOption & option,
      boost::system::error_code & ec);


This function is used to get the current value of an option on the serial port.


[heading Parameters]
    

[variablelist
  
[[option][The option value to be obtained from the serial port.]]

[[ec][Set to indicate what error occured, if any.]]

]





[endsect]


[endsect]

[section:get_service basic_serial_port::get_service]

[indexterm2 get_service..basic_serial_port] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_serial_port.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_serial_port.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.get_service.overload2 more...]]``


[section:overload1 basic_serial_port::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_serial_port::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_serial_port::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_serial_port] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_serial_port::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_serial_port] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open basic_serial_port::is_open]

[indexterm2 is_open..basic_serial_port] 
Determine whether the serial port is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer basic_serial_port::lowest_layer]

[indexterm2 lowest_layer..basic_serial_port] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_serial_port.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_serial_port.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.lowest_layer.overload2 more...]]``


[section:overload1 basic_serial_port::lowest_layer (1 of 2 overloads)]


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 [link boost_asio.reference.basic_serial_port `basic_serial_port`] 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:overload2 basic_serial_port::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_serial_port `basic_serial_port`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_serial_port::lowest_layer_type]

[indexterm2 lowest_layer_type..basic_serial_port] 
A [link boost_asio.reference.basic_serial_port `basic_serial_port`] is always the lowest layer. 


  typedef basic_serial_port< SerialPortService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_serial_port.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.lowest_layer_type [*lowest_layer_type]]]
    [A basic_serial_port is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.native_handle_type [*native_handle_type]]]
    [The native representation of a serial port. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a serial port. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.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.basic_serial_port.assign [*assign]]]
    [Assign an existing native serial port to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.basic_serial_port [*basic_serial_port]]]
    [Construct a basic_serial_port without opening it. 

     Construct and open a basic_serial_port. 

     Construct a basic_serial_port on an existing native serial port. 

     Move-construct a basic_serial_port from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.close [*close]]]
    [Close the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_option [*get_option]]]
    [Get an option from the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.is_open [*is_open]]]
    [Determine whether the serial port is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native serial port representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.native_handle [*native_handle]]]
    [Get the native serial port representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.open [*open]]]
    [Open the serial port using the specified device name. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.operator_eq_ [*operator=]]]
    [Move-assign a basic_serial_port from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.read_some [*read_some]]]
    [Read some data from the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.send_break [*send_break]]]
    [Send a break sequence to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.set_option [*set_option]]]
    [Set an option on the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.write_some [*write_some]]]
    [Write some data to the serial port. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_serial_port.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_serial_port.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_serial_port.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_serial_port `basic_serial_port`] class template provides functionality that is common to all serial ports.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/basic_serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native basic_serial_port::native]

[indexterm2 native..basic_serial_port] 
(Deprecated: Use `native_handle()`.) Get the native serial port representation. 


  native_type native();


This function may be used to obtain the underlying representation of the serial port. This is intended to allow access to native serial port functionality that is not otherwise provided. 


[endsect]



[section:native_handle basic_serial_port::native_handle]

[indexterm2 native_handle..basic_serial_port] 
Get the native serial port representation. 


  native_handle_type native_handle();


This function may be used to obtain the underlying representation of the serial port. This is intended to allow access to native serial port functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type basic_serial_port::native_handle_type]

[indexterm2 native_handle_type..basic_serial_port] 
The native representation of a serial port. 


  typedef SerialPortService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type basic_serial_port::native_type]

[indexterm2 native_type..basic_serial_port] 
(Deprecated: Use native\_handle\_type.) The native representation of a serial port. 


  typedef SerialPortService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_serial_port::open]

[indexterm2 open..basic_serial_port] 
Open the serial port using the specified device name. 


  void ``[link boost_asio.reference.basic_serial_port.open.overload1 open]``(
      const std::string & device);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.open.overload2 open]``(
      const std::string & device,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.open.overload2 more...]]``


[section:overload1 basic_serial_port::open (1 of 2 overloads)]


Open the serial port using the specified device name. 


  void open(
      const std::string & device);


This function opens the serial port for the specified device name.


[heading Parameters]
    

[variablelist
  
[[device][The platform-specific device name.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_serial_port::open (2 of 2 overloads)]


Open the serial port using the specified device name. 


  boost::system::error_code open(
      const std::string & device,
      boost::system::error_code & ec);


This function opens the serial port using the given platform-specific device name.


[heading Parameters]
    

[variablelist
  
[[device][The platform-specific device name.]]

[[ec][Set the indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[section:operator_eq_ basic_serial_port::operator=]

[indexterm2 operator=..basic_serial_port] 
Move-assign a [link boost_asio.reference.basic_serial_port `basic_serial_port`] from another. 


  basic_serial_port & operator=(
      basic_serial_port && other);


This assignment operator moves a serial port from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_serial_port `basic_serial_port`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_serial_port(io_service&) constructor`. 




[endsect]


[section:read_some basic_serial_port::read_some]

[indexterm2 read_some..basic_serial_port] 
Read some data from the serial port. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_serial_port.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.read_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_serial_port.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.read_some.overload2 more...]]``


[section:overload1 basic_serial_port::read_some (1 of 2 overloads)]


Read some data from the serial port. 


  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 serial port. 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.


[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.]]

]


[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: 

   serial_port.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. 




[endsect]



[section:overload2 basic_serial_port::read_some (2 of 2 overloads)]


Read some data from the serial port. 


  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 read data from the serial port. 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.]]

]


[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:send_break basic_serial_port::send_break]

[indexterm2 send_break..basic_serial_port] 
Send a break sequence to the serial port. 


  void ``[link boost_asio.reference.basic_serial_port.send_break.overload1 send_break]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.send_break.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.send_break.overload2 send_break]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.send_break.overload2 more...]]``


[section:overload1 basic_serial_port::send_break (1 of 2 overloads)]


Send a break sequence to the serial port. 


  void send_break();


This function causes a break sequence of platform-specific duration to be sent out the serial port.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_serial_port::send_break (2 of 2 overloads)]


Send a break sequence to the serial port. 


  boost::system::error_code send_break(
      boost::system::error_code & ec);


This function causes a break sequence of platform-specific duration to be sent out the serial port.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[section:service basic_serial_port::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_serial_port] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_serial_port::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_serial_port] 
The type of the service that will be used to provide I/O operations. 


  typedef SerialPortService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_serial_port::set_option]

[indexterm2 set_option..basic_serial_port] 
Set an option on the serial port. 


  template<
      typename ``[link boost_asio.reference.SettableSerialPortOption SettableSerialPortOption]``>
  void ``[link boost_asio.reference.basic_serial_port.set_option.overload1 set_option]``(
      const SettableSerialPortOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.set_option.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SettableSerialPortOption SettableSerialPortOption]``>
  boost::system::error_code ``[link boost_asio.reference.basic_serial_port.set_option.overload2 set_option]``(
      const SettableSerialPortOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.set_option.overload2 more...]]``


[section:overload1 basic_serial_port::set_option (1 of 2 overloads)]


Set an option on the serial port. 


  template<
      typename ``[link boost_asio.reference.SettableSerialPortOption SettableSerialPortOption]``>
  void set_option(
      const SettableSerialPortOption & option);


This function is used to set an option on the serial port.


[heading Parameters]
    

[variablelist
  
[[option][The option value to be set on the serial port.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]





[endsect]



[section:overload2 basic_serial_port::set_option (2 of 2 overloads)]


Set an option on the serial port. 


  template<
      typename ``[link boost_asio.reference.SettableSerialPortOption SettableSerialPortOption]``>
  boost::system::error_code set_option(
      const SettableSerialPortOption & option,
      boost::system::error_code & ec);


This function is used to set an option on the serial port.


[heading Parameters]
    

[variablelist
  
[[option][The option value to be set on the serial port.]]

[[ec][Set to indicate what error occurred, if any.]]

]





[endsect]


[endsect]

[section:write_some basic_serial_port::write_some]

[indexterm2 write_some..basic_serial_port] 
Write some data to the serial port. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_serial_port.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.write_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_serial_port.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_serial_port.write_some.overload2 more...]]``


[section:overload1 basic_serial_port::write_some (1 of 2 overloads)]


Write some data to the serial port. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);


This function is used to write data to the serial port. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the serial port.]]

]


[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.]]

]


[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: 

   serial_port.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. 




[endsect]



[section:overload2 basic_serial_port::write_some (2 of 2 overloads)]


Write some data to the serial port. 


  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 write data to the serial port. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the serial port.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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]


[endsect]

[section:basic_signal_set basic_signal_set]


Provides signal functionality. 


  template<
      typename ``[link boost_asio.reference.SignalSetService SignalSetService]`` = signal_set_service>
  class basic_signal_set :
    public basic_io_object< SignalSetService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_signal_set.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_signal_set.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.basic_signal_set.add [*add]]]
    [Add a signal to a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.async_wait [*async_wait]]]
    [Start an asynchronous operation to wait for a signal to be delivered. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.basic_signal_set [*basic_signal_set]]]
    [Construct a signal set without adding any signals. 

     Construct a signal set and add one signal. 

     Construct a signal set and add two signals. 

     Construct a signal set and add three signals. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.cancel [*cancel]]]
    [Cancel all operations associated with the signal set. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.clear [*clear]]]
    [Remove all signals from a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.remove [*remove]]]
    [Remove a signal from a signal_set. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_signal_set.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_signal_set.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_signal_set.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_signal_set `basic_signal_set`] class template provides the ability to perform an asynchronous wait for one or more signals to occur.

Most applications will use the [link boost_asio.reference.signal_set `signal_set`] typedef.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Example]
  
Performing an asynchronous wait: 

   void handler(
       const boost::system::error_code& error,
       int signal_number)
   {
     if (!error)
     {
       // A signal occurred.
     }
   }

   ...

   // Construct a signal set registered for process termination.
   boost::asio::signal_set signals(io_service, SIGINT, SIGTERM);

   // Start an asynchronous wait for one of the signals to occur.
   signals.async_wait(handler);





[heading Queueing of signal notifications]
  


If a signal is registered with a signal\_set, and the signal occurs when there are no waiting handlers, then the signal notification is queued. The next async\_wait operation on that signal\_set will dequeue the notification. If multiple notifications are queued, subsequent async\_wait operations dequeue them one at a time. Signal notifications are dequeued in order of ascending signal number.

If a signal number is removed from a signal\_set (using the `remove` or `erase` member functions) then any queued notifications for that signal are discarded.


[heading Multiple registration of signals]
  


The same signal number may be registered with different signal\_set objects. When the signal occurs, one handler is called for each signal\_set object.

Note that multiple registration only works for signals that are registered using Asio. The application must not also register a signal handler using functions such as `signal()` or `sigaction()`.


[heading Signal masking on POSIX platforms]
  


POSIX allows signals to be blocked using functions such as `sigprocmask()` and `pthread_sigmask()`. For signals to be delivered, programs must ensure that any signals registered using signal\_set objects are unblocked in at least one thread. 

[heading Requirements]

[*Header: ][^boost/asio/basic_signal_set.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:add basic_signal_set::add]

[indexterm2 add..basic_signal_set] 
Add a signal to a signal\_set. 


  void ``[link boost_asio.reference.basic_signal_set.add.overload1 add]``(
      int signal_number);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.add.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_signal_set.add.overload2 add]``(
      int signal_number,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.add.overload2 more...]]``


[section:overload1 basic_signal_set::add (1 of 2 overloads)]


Add a signal to a signal\_set. 


  void add(
      int signal_number);


This function adds the specified signal to the set. It has no effect if the signal is already in the set.


[heading Parameters]
    

[variablelist
  
[[signal_number][The signal to be added to the set.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_signal_set::add (2 of 2 overloads)]


Add a signal to a signal\_set. 


  boost::system::error_code add(
      int signal_number,
      boost::system::error_code & ec);


This function adds the specified signal to the set. It has no effect if the signal is already in the set.


[heading Parameters]
    

[variablelist
  
[[signal_number][The signal to be added to the set.]]

[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[section:async_wait basic_signal_set::async_wait]

[indexterm2 async_wait..basic_signal_set] 
Start an asynchronous operation to wait for a signal to be delivered. 


  template<
      typename ``[link boost_asio.reference.SignalHandler SignalHandler]``>
  void async_wait(
      SignalHandler handler);


This function may be used to initiate an asynchronous wait against the signal set. It always returns immediately.

For each call to `async_wait()`, the supplied handler will be called exactly once. The handler will be called when:


* One of the registered signals in the signal set occurs; or


* The signal set was cancelled, in which case the handler is passed the error code `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called when the signal occurs. 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.
     int signal_number // Indicates which signal occurred.
   ); 
``
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:basic_signal_set basic_signal_set::basic_signal_set]

[indexterm2 basic_signal_set..basic_signal_set] 
Construct a signal set without adding any signals. 


  explicit ``[link boost_asio.reference.basic_signal_set.basic_signal_set.overload1 basic_signal_set]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.basic_signal_set.overload1 more...]]``


Construct a signal set and add one signal. 


  ``[link boost_asio.reference.basic_signal_set.basic_signal_set.overload2 basic_signal_set]``(
      boost::asio::io_service & io_service,
      int signal_number_1);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.basic_signal_set.overload2 more...]]``


Construct a signal set and add two signals. 


  ``[link boost_asio.reference.basic_signal_set.basic_signal_set.overload3 basic_signal_set]``(
      boost::asio::io_service & io_service,
      int signal_number_1,
      int signal_number_2);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.basic_signal_set.overload3 more...]]``


Construct a signal set and add three signals. 


  ``[link boost_asio.reference.basic_signal_set.basic_signal_set.overload4 basic_signal_set]``(
      boost::asio::io_service & io_service,
      int signal_number_1,
      int signal_number_2,
      int signal_number_3);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.basic_signal_set.overload4 more...]]``


[section:overload1 basic_signal_set::basic_signal_set (1 of 4 overloads)]


Construct a signal set without adding any signals. 


  basic_signal_set(
      boost::asio::io_service & io_service);


This constructor creates a signal set without registering for any signals.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the signal set will use to dispatch handlers for any asynchronous operations performed on the set. ]]

]




[endsect]



[section:overload2 basic_signal_set::basic_signal_set (2 of 4 overloads)]


Construct a signal set and add one signal. 


  basic_signal_set(
      boost::asio::io_service & io_service,
      int signal_number_1);


This constructor creates a signal set and registers for one signal.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the signal set will use to dispatch handlers for any asynchronous operations performed on the set.]]

[[signal_number_1][The signal number to be added.]]

]


[heading Remarks]
      
This constructor is equivalent to performing: 

   boost::asio::signal_set signals(io_service);
   signals.add(signal_number_1); 







[endsect]



[section:overload3 basic_signal_set::basic_signal_set (3 of 4 overloads)]


Construct a signal set and add two signals. 


  basic_signal_set(
      boost::asio::io_service & io_service,
      int signal_number_1,
      int signal_number_2);


This constructor creates a signal set and registers for two signals.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the signal set will use to dispatch handlers for any asynchronous operations performed on the set.]]

[[signal_number_1][The first signal number to be added.]]

[[signal_number_2][The second signal number to be added.]]

]


[heading Remarks]
      
This constructor is equivalent to performing: 

   boost::asio::signal_set signals(io_service);
   signals.add(signal_number_1);
   signals.add(signal_number_2); 







[endsect]



[section:overload4 basic_signal_set::basic_signal_set (4 of 4 overloads)]


Construct a signal set and add three signals. 


  basic_signal_set(
      boost::asio::io_service & io_service,
      int signal_number_1,
      int signal_number_2,
      int signal_number_3);


This constructor creates a signal set and registers for three signals.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the signal set will use to dispatch handlers for any asynchronous operations performed on the set.]]

[[signal_number_1][The first signal number to be added.]]

[[signal_number_2][The second signal number to be added.]]

[[signal_number_3][The third signal number to be added.]]

]


[heading Remarks]
      
This constructor is equivalent to performing: 

   boost::asio::signal_set signals(io_service);
   signals.add(signal_number_1);
   signals.add(signal_number_2);
   signals.add(signal_number_3); 







[endsect]


[endsect]

[section:cancel basic_signal_set::cancel]

[indexterm2 cancel..basic_signal_set] 
Cancel all operations associated with the signal set. 


  void ``[link boost_asio.reference.basic_signal_set.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_signal_set.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.cancel.overload2 more...]]``


[section:overload1 basic_signal_set::cancel (1 of 2 overloads)]


Cancel all operations associated with the signal set. 


  void cancel();


This function forces the completion of any pending asynchronous wait operations against the signal set. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancellation does not alter the set of registered signals.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If a registered signal occurred before `cancel()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload2 basic_signal_set::cancel (2 of 2 overloads)]


Cancel all operations associated with the signal set. 


  boost::system::error_code cancel(
      boost::system::error_code & ec);


This function forces the completion of any pending asynchronous wait operations against the signal set. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancellation does not alter the set of registered signals.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
If a registered signal occurred before `cancel()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:clear basic_signal_set::clear]

[indexterm2 clear..basic_signal_set] 
Remove all signals from a signal\_set. 


  void ``[link boost_asio.reference.basic_signal_set.clear.overload1 clear]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.clear.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_signal_set.clear.overload2 clear]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.clear.overload2 more...]]``


[section:overload1 basic_signal_set::clear (1 of 2 overloads)]


Remove all signals from a signal\_set. 


  void clear();


This function removes all signals from the set. It has no effect if the set is already empty.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Removes all queued notifications. 




[endsect]



[section:overload2 basic_signal_set::clear (2 of 2 overloads)]


Remove all signals from a signal\_set. 


  boost::system::error_code clear(
      boost::system::error_code & ec);


This function removes all signals from the set. It has no effect if the set is already empty.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Removes all queued notifications. 




[endsect]


[endsect]

[section:get_implementation basic_signal_set::get_implementation]

[indexterm2 get_implementation..basic_signal_set] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_signal_set.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_signal_set.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.get_implementation.overload2 more...]]``


[section:overload1 basic_signal_set::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_signal_set::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_signal_set::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_signal_set] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service basic_signal_set::get_service]

[indexterm2 get_service..basic_signal_set] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_signal_set.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_signal_set.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.get_service.overload2 more...]]``


[section:overload1 basic_signal_set::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_signal_set::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_signal_set::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_signal_set] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_signal_set::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_signal_set] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_signal_set.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remove basic_signal_set::remove]

[indexterm2 remove..basic_signal_set] 
Remove a signal from a signal\_set. 


  void ``[link boost_asio.reference.basic_signal_set.remove.overload1 remove]``(
      int signal_number);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.remove.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_signal_set.remove.overload2 remove]``(
      int signal_number,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_signal_set.remove.overload2 more...]]``


[section:overload1 basic_signal_set::remove (1 of 2 overloads)]


Remove a signal from a signal\_set. 


  void remove(
      int signal_number);


This function removes the specified signal from the set. It has no effect if the signal is not in the set.


[heading Parameters]
    

[variablelist
  
[[signal_number][The signal to be removed from the set.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Removes any notifications that have been queued for the specified signal number. 




[endsect]



[section:overload2 basic_signal_set::remove (2 of 2 overloads)]


Remove a signal from a signal\_set. 


  boost::system::error_code remove(
      int signal_number,
      boost::system::error_code & ec);


This function removes the specified signal from the set. It has no effect if the signal is not in the set.


[heading Parameters]
    

[variablelist
  
[[signal_number][The signal to be removed from the set.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Removes any notifications that have been queued for the specified signal number. 




[endsect]


[endsect]


[section:service basic_signal_set::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_signal_set] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_signal_set::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_signal_set] 
The type of the service that will be used to provide I/O operations. 


  typedef SignalSetService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_signal_set.hpp]

[*Convenience header: ][^boost/asio.hpp]


[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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_socket::assign]

[indexterm2 assign..basic_socket] 
Assign an existing native socket to the socket. 


  void ``[link boost_asio.reference.basic_socket.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.assign.overload2 more...]]``


[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_handle_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_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_connect basic_socket::async_connect]

[indexterm2 async_connect..basic_socket] 
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 not 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]

[indexterm2 at_mark..basic_socket] 
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;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.at_mark.overload1 more...]]``

  bool ``[link boost_asio.reference.basic_socket.at_mark.overload2 at_mark]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.at_mark.overload2 more...]]``


[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]

[indexterm2 available..basic_socket] 
Determine the number of bytes available for reading. 


  std::size_t ``[link boost_asio.reference.basic_socket.available.overload1 available]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.available.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_socket.available.overload2 available]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.available.overload2 more...]]``


[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]

[indexterm2 basic_socket..basic_socket] 
Construct a [link boost_asio.reference.basic_socket `basic_socket`] without opening it. 


  explicit ``[link boost_asio.reference.basic_socket.basic_socket.overload1 basic_socket]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload1 more...]]``


Construct and open a [link boost_asio.reference.basic_socket `basic_socket`]. 


  ``[link boost_asio.reference.basic_socket.basic_socket.overload2 basic_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload2 more...]]``


Construct a [link boost_asio.reference.basic_socket `basic_socket`], opening it and binding it to the given local endpoint. 


  ``[link boost_asio.reference.basic_socket.basic_socket.overload3 basic_socket]``(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload3 more...]]``


Construct a [link boost_asio.reference.basic_socket `basic_socket`] on an existing native socket. 


  ``[link boost_asio.reference.basic_socket.basic_socket.overload4 basic_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_socket `basic_socket`] from another. 


  ``[link boost_asio.reference.basic_socket.basic_socket.overload5 basic_socket]``(
      basic_socket && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.basic_socket.overload5 more...]]``


[section:overload1 basic_socket::basic_socket (1 of 5 overloads)]


Construct a [link boost_asio.reference.basic_socket `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 [link boost_asio.reference.io_service `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 5 overloads)]


Construct and open a [link boost_asio.reference.basic_socket `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 [link boost_asio.reference.io_service `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 5 overloads)]


Construct a [link boost_asio.reference.basic_socket `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 [link boost_asio.reference.io_service `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 5 overloads)]


Construct a [link boost_asio.reference.basic_socket `basic_socket`] on an existing native socket. 


  basic_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);


This constructor creates a socket object to hold an existing native socket.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `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]



[section:overload5 basic_socket::basic_socket (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_socket `basic_socket`] from another. 


  basic_socket(
      basic_socket && other);


This constructor moves a socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_socket `basic_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 




[endsect]


[endsect]

[section:bind basic_socket::bind]

[indexterm2 bind..basic_socket] 
Bind the socket to the given local endpoint. 


  void ``[link boost_asio.reference.basic_socket.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.bind.overload2 more...]]``


[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.]

[indexterm2 broadcast..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_socket::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_socket::cancel]

[indexterm2 cancel..basic_socket] 
Cancel all asynchronous operations associated with the socket. 


  void ``[link boost_asio.reference.basic_socket.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.cancel.overload2 more...]]``


[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]

[indexterm2 close..basic_socket] 
Close the socket. 


  void ``[link boost_asio.reference.basic_socket.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.close.overload2 more...]]``


[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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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]

[indexterm2 connect..basic_socket] 
Connect the socket to the specified endpoint. 


  void ``[link boost_asio.reference.basic_socket.connect.overload1 connect]``(
      const endpoint_type & peer_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.connect.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.connect.overload2 connect]``(
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.connect.overload2 more...]]``


[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 not 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 not 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.]

[indexterm2 debug..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_socket::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_socket::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_socket::endpoint_type]

[indexterm2 endpoint_type..basic_socket] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation basic_socket::get_implementation]

[indexterm2 get_implementation..basic_socket] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_socket.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_socket.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.get_implementation.overload2 more...]]``


[section:overload1 basic_socket::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_socket::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_socket::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_socket] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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]

[indexterm2 get_option..basic_socket] 
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;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.get_option.overload1 more...]]``

  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;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.get_option.overload2 more...]]``


[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:get_service basic_socket::get_service]

[indexterm2 get_service..basic_socket] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_socket.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_socket.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.get_service.overload2 more...]]``


[section:overload1 basic_socket::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_socket::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_socket::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_socket] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_socket::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_socket] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_socket::io_control]

[indexterm2 io_control..basic_socket] 
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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.io_control.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.io_control.overload2 more...]]``


[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:is_open basic_socket::is_open]

[indexterm2 is_open..basic_socket] 
Determine whether the socket is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_socket::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_socket::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:local_endpoint basic_socket::local_endpoint]

[indexterm2 local_endpoint..basic_socket] 
Get the local endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_socket.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_socket.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.local_endpoint.overload2 more...]]``


[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]

[indexterm2 lowest_layer..basic_socket] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_socket.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_socket.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.lowest_layer.overload2 more...]]``


[section:overload1 basic_socket::lowest_layer (1 of 2 overloads)]


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 [link boost_asio.reference.basic_socket `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:overload2 basic_socket::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_socket `basic_socket`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_socket::lowest_layer_type]

[indexterm2 lowest_layer_type..basic_socket] 
A [link boost_asio.reference.basic_socket `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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 




[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections basic_socket::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_socket] 
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.]

[indexterm2 message_do_not_route..basic_socket] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_socket::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_socket] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_socket::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_socket] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_socket::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_socket] 
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.]

[indexterm2 message_peek..basic_socket] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_socket::native]

[indexterm2 native..basic_socket] 
(Deprecated: Use `native_handle()`.) 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_handle basic_socket::native_handle]

[indexterm2 native_handle..basic_socket] 
Get the native socket representation. 


  native_handle_type native_handle();


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_handle_type basic_socket::native_handle_type]

[indexterm2 native_handle_type..basic_socket] 
The native representation of a socket. 


  typedef SocketService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_socket::native_non_blocking]

[indexterm2 native_non_blocking..basic_socket] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.basic_socket.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  void ``[link boost_asio.reference.basic_socket.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.native_non_blocking.overload3 more...]]``


[section:overload1 basic_socket::native_non_blocking (1 of 3 overloads)]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native socket. This mode has no effect on the behaviour of the socket object's synchronous operations.


[heading Return Value]
      
`true` if the underlying socket is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the socket object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native socket.


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload2 basic_socket::native_non_blocking (2 of 3 overloads)]


Sets the non-blocking mode of the native socket implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload3 basic_socket::native_non_blocking (3 of 3 overloads)]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]


[endsect]


[section:native_type basic_socket::native_type]

[indexterm2 native_type..basic_socket] 
(Deprecated: Use native\_handle\_type.) The native representation of a socket. 


  typedef SocketService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_socket::non_blocking]

[indexterm2 non_blocking..basic_socket] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.basic_socket.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  void ``[link boost_asio.reference.basic_socket.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.non_blocking.overload3 more...]]``


[section:overload1 basic_socket::non_blocking (1 of 3 overloads)]


Gets the non-blocking mode of the socket. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_socket::non_blocking (2 of 3 overloads)]


Sets the non-blocking mode of the socket. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_socket::non_blocking (3 of 3 overloads)]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_socket::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_socket] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_socket::open]

[indexterm2 open..basic_socket] 
Open the socket using the specified protocol. 


  void ``[link boost_asio.reference.basic_socket.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.open.overload2 more...]]``


[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:operator_eq_ basic_socket::operator=]

[indexterm2 operator=..basic_socket] 
Move-assign a [link boost_asio.reference.basic_socket `basic_socket`] from another. 


  basic_socket & operator=(
      basic_socket && other);


This assignment operator moves a socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_socket `basic_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 




[endsect]



[section:protocol_type basic_socket::protocol_type]

[indexterm2 protocol_type..basic_socket] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_buffer_size basic_socket::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_low_watermark basic_socket::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remote_endpoint basic_socket::remote_endpoint]

[indexterm2 remote_endpoint..basic_socket] 
Get the remote endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_socket.remote_endpoint.overload1 remote_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.remote_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_socket.remote_endpoint.overload2 remote_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.remote_endpoint.overload2 more...]]``


[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.]

[indexterm2 reuse_address..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_buffer_size basic_socket::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_socket::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_socket::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_socket] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_socket::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_socket] 
The type of the service that will be used to provide I/O operations. 


  typedef SocketService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_socket::set_option]

[indexterm2 set_option..basic_socket] 
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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.set_option.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.set_option.overload2 more...]]``


[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]

[indexterm2 shutdown..basic_socket] 
Disable sends or receives on the socket. 


  void ``[link boost_asio.reference.basic_socket.shutdown.overload1 shutdown]``(
      shutdown_type what);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket.shutdown.overload2 shutdown]``(
      shutdown_type what,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket.shutdown.overload2 more...]]``


[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.]

[indexterm2 shutdown_type..basic_socket] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_socket]
[indexterm2 shutdown_send..basic_socket]
[indexterm2 shutdown_both..basic_socket]

[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]

[indexterm2 ~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. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.native_handle_type [*native_handle_type]]]
    [The native representation of an acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of an acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.accept [*accept]]]
    [Accept a new connection. 

     Accept a new connection and obtain the endpoint of the peer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.assign [*assign]]]
    [Assigns an existing native acceptor to the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.async_accept [*async_accept]]]
    [Start an asynchronous accept. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor [*basic_socket_acceptor]]]
    [Construct an acceptor without opening it. 

     Construct an open acceptor. 

     Construct an acceptor opened on the given endpoint. 

     Construct a basic_socket_acceptor on an existing native acceptor. 

     Move-construct a basic_socket_acceptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.bind [*bind]]]
    [Bind the acceptor to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.close [*close]]]
    [Close the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_option [*get_option]]]
    [Get an option from the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.io_control [*io_control]]]
    [Perform an IO control command on the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.is_open [*is_open]]]
    [Determine whether the acceptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.listen [*listen]]]
    [Place the acceptor into the state where it will listen for new connections. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native acceptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native_handle [*native_handle]]]
    [Get the native acceptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native acceptor implementation. 

     Sets the non-blocking mode of the native acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the acceptor. 

     Sets the non-blocking mode of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.open [*open]]]
    [Open the acceptor using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket_acceptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.set_option [*set_option]]]
    [Set an option on the acceptor. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] class template is used for accepting new socket connections.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Example]
  
Opening a socket acceptor with the SO\_REUSEADDR option enabled: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
   acceptor.open(endpoint.protocol());
   acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
   acceptor.bind(endpoint);
   acceptor.listen();






[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:accept basic_socket_acceptor::accept]

[indexterm2 accept..basic_socket_acceptor] 
Accept a new connection. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.accept.overload1 accept]``(
      basic_socket< protocol_type, SocketService > & peer);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.accept.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.accept.overload2 accept]``(
      basic_socket< protocol_type, SocketService > & peer,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.accept.overload2 more...]]``


Accept a new connection and obtain the endpoint of the peer. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.accept.overload3 accept]``(
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type & peer_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.accept.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.accept.overload4 accept]``(
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.accept.overload4 more...]]``


[section:overload1 basic_socket_acceptor::accept (1 of 4 overloads)]


Accept a new connection. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  void accept(
      basic_socket< protocol_type, SocketService > & peer);


This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.


[heading Parameters]
    

[variablelist
  
[[peer][The socket into which the new connection will be accepted.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::socket socket(io_service);
   acceptor.accept(socket);







[endsect]



[section:overload2 basic_socket_acceptor::accept (2 of 4 overloads)]


Accept a new connection. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  boost::system::error_code accept(
      basic_socket< protocol_type, SocketService > & peer,
      boost::system::error_code & ec);


This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.


[heading Parameters]
    

[variablelist
  
[[peer][The socket into which the new connection will be accepted.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::soocket socket(io_service);
   boost::system::error_code ec;
   acceptor.accept(socket, ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]



[section:overload3 basic_socket_acceptor::accept (3 of 4 overloads)]


Accept a new connection and obtain the endpoint of the peer. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  void accept(
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type & peer_endpoint);


This function is used to accept a new connection from a peer into the given socket, and additionally provide the endpoint of the remote peer. The function call will block until a new connection has been accepted successfully or an error occurs.


[heading Parameters]
    

[variablelist
  
[[peer][The socket into which the new connection will be accepted.]]

[[peer_endpoint][An endpoint object which will receive the endpoint of the remote peer.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::socket socket(io_service);
   boost::asio::ip::tcp::endpoint endpoint;
   acceptor.accept(socket, endpoint);







[endsect]



[section:overload4 basic_socket_acceptor::accept (4 of 4 overloads)]


Accept a new connection and obtain the endpoint of the peer. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  boost::system::error_code accept(
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type & peer_endpoint,
      boost::system::error_code & ec);


This function is used to accept a new connection from a peer into the given socket, and additionally provide the endpoint of the remote peer. The function call will block until a new connection has been accepted successfully or an error occurs.


[heading Parameters]
    

[variablelist
  
[[peer][The socket into which the new connection will be accepted.]]

[[peer_endpoint][An endpoint object which will receive the endpoint of the remote peer.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::socket socket(io_service);
   boost::asio::ip::tcp::endpoint endpoint;
   boost::system::error_code ec;
   acceptor.accept(socket, endpoint, ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]

[section:assign basic_socket_acceptor::assign]

[indexterm2 assign..basic_socket_acceptor] 
Assigns an existing native acceptor to the acceptor. 


  void ``[link boost_asio.reference.basic_socket_acceptor.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_acceptor);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_acceptor,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.assign.overload2 more...]]``


[section:overload1 basic_socket_acceptor::assign (1 of 2 overloads)]


Assigns an existing native acceptor to the acceptor. 


  void assign(
      const protocol_type & protocol,
      const native_handle_type & native_acceptor);



[endsect]



[section:overload2 basic_socket_acceptor::assign (2 of 2 overloads)]


Assigns an existing native acceptor to the acceptor. 


  boost::system::error_code assign(
      const protocol_type & protocol,
      const native_handle_type & native_acceptor,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:async_accept basic_socket_acceptor::async_accept]

[indexterm2 async_accept..basic_socket_acceptor] 
Start an asynchronous accept. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.async_accept.overload1 async_accept]``(
      basic_socket< protocol_type, SocketService > & peer,
      AcceptHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.async_accept.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.async_accept.overload2 async_accept]``(
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type & peer_endpoint,
      AcceptHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.async_accept.overload2 more...]]``


[section:overload1 basic_socket_acceptor::async_accept (1 of 2 overloads)]


Start an asynchronous accept. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
  void async_accept(
      basic_socket< protocol_type, SocketService > & peer,
      AcceptHandler handler);


This function is used to asynchronously accept a new connection into a socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[peer][The socket into which the new connection will be accepted. Ownership of the peer 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 accept 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 accept_handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Accept succeeded.
     }
   }

   ...

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::socket socket(io_service);
   acceptor.async_accept(socket, accept_handler);







[endsect]



[section:overload2 basic_socket_acceptor::async_accept (2 of 2 overloads)]


Start an asynchronous accept. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
  void async_accept(
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type & peer_endpoint,
      AcceptHandler handler);


This function is used to asynchronously accept a new connection into a socket, and additionally obtain the endpoint of the remote peer. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[peer][The socket into which the new connection will be accepted. Ownership of the peer object is retained by the caller, which must guarantee that it is valid until the handler is called.]]

[[peer_endpoint][An endpoint object into which the endpoint of the remote peer will be written. Ownership of the peer\_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 accept 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()`. ]]

]




[endsect]


[endsect]

[section:basic_socket_acceptor basic_socket_acceptor::basic_socket_acceptor]

[indexterm2 basic_socket_acceptor..basic_socket_acceptor] 
Construct an acceptor without opening it. 


  explicit ``[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload1 basic_socket_acceptor]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload1 more...]]``


Construct an open acceptor. 


  ``[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload2 basic_socket_acceptor]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload2 more...]]``


Construct an acceptor opened on the given endpoint. 


  ``[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload3 basic_socket_acceptor]``(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint,
      bool reuse_addr = true);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload3 more...]]``


Construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] on an existing native acceptor. 


  ``[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload4 basic_socket_acceptor]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_acceptor);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another. 


  ``[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload5 basic_socket_acceptor]``(
      basic_socket_acceptor && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload5 more...]]``


[section:overload1 basic_socket_acceptor::basic_socket_acceptor (1 of 5 overloads)]


Construct an acceptor without opening it. 


  basic_socket_acceptor(
      boost::asio::io_service & io_service);


This constructor creates an acceptor without opening it to listen for new connections. The `open()` function must be called before the acceptor can accept new socket connections.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the acceptor will use to dispatch handlers for any asynchronous operations performed on the acceptor. ]]

]




[endsect]



[section:overload2 basic_socket_acceptor::basic_socket_acceptor (2 of 5 overloads)]


Construct an open acceptor. 


  basic_socket_acceptor(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);


This constructor creates an acceptor and automatically opens it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the acceptor will use to dispatch handlers for any asynchronous operations performed on the acceptor.]]

[[protocol][An object specifying protocol parameters to be used.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 basic_socket_acceptor::basic_socket_acceptor (3 of 5 overloads)]


Construct an acceptor opened on the given endpoint. 


  basic_socket_acceptor(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint,
      bool reuse_addr = true);


This constructor creates an acceptor and automatically opens it to listen for new connections on the specified endpoint.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the acceptor will use to dispatch handlers for any asynchronous operations performed on the acceptor.]]

[[endpoint][An endpoint on the local machine on which the acceptor will listen for new connections.]]

[[reuse_addr][Whether the constructor should set the socket option `socket_base::reuse_address`.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
This constructor is equivalent to the following code: 

   basic_socket_acceptor<Protocol> acceptor(io_service);
   acceptor.open(endpoint.protocol());
   if (reuse_addr)
     acceptor.set_option(socket_base::reuse_address(true));
   acceptor.bind(endpoint);
   acceptor.listen(listen_backlog);







[endsect]



[section:overload4 basic_socket_acceptor::basic_socket_acceptor (4 of 5 overloads)]


Construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] on an existing native acceptor. 


  basic_socket_acceptor(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_acceptor);


This constructor creates an acceptor object to hold an existing native acceptor.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the acceptor will use to dispatch handlers for any asynchronous operations performed on the acceptor.]]

[[protocol][An object specifying protocol parameters to be used.]]

[[native_acceptor][A native acceptor.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload5 basic_socket_acceptor::basic_socket_acceptor (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another. 


  basic_socket_acceptor(
      basic_socket_acceptor && other);


This constructor moves an acceptor from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_socket_acceptor(io_service&) constructor`. 




[endsect]


[endsect]

[section:bind basic_socket_acceptor::bind]

[indexterm2 bind..basic_socket_acceptor] 
Bind the acceptor to the given local endpoint. 


  void ``[link boost_asio.reference.basic_socket_acceptor.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.bind.overload2 more...]]``


[section:overload1 basic_socket_acceptor::bind (1 of 2 overloads)]


Bind the acceptor to the given local endpoint. 


  void bind(
      const endpoint_type & endpoint);


This function binds the socket acceptor to the specified endpoint on the local machine.


[heading Parameters]
    

[variablelist
  
[[endpoint][An endpoint on the local machine to which the socket acceptor will be bound.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   acceptor.open(boost::asio::ip::tcp::v4());
   acceptor.bind(boost::asio::ip::tcp::endpoint(12345));







[endsect]



[section:overload2 basic_socket_acceptor::bind (2 of 2 overloads)]


Bind the acceptor to the given local endpoint. 


  boost::system::error_code bind(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);


This function binds the socket acceptor to the specified endpoint on the local machine.


[heading Parameters]
    

[variablelist
  
[[endpoint][An endpoint on the local machine to which the socket acceptor will be bound.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   acceptor.open(boost::asio::ip::tcp::v4());
   boost::system::error_code ec;
   acceptor.bind(boost::asio::ip::tcp::endpoint(12345), ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]


[section:broadcast basic_socket_acceptor::broadcast]


['Inherited from socket_base.]

[indexterm2 broadcast..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_socket_acceptor::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_socket_acceptor::cancel]

[indexterm2 cancel..basic_socket_acceptor] 
Cancel all asynchronous operations associated with the acceptor. 


  void ``[link boost_asio.reference.basic_socket_acceptor.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.cancel.overload2 more...]]``


[section:overload1 basic_socket_acceptor::cancel (1 of 2 overloads)]


Cancel all asynchronous operations associated with the acceptor. 


  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. ]]

]




[endsect]



[section:overload2 basic_socket_acceptor::cancel (2 of 2 overloads)]


Cancel all asynchronous operations associated with the acceptor. 


  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. ]]

]




[endsect]


[endsect]

[section:close basic_socket_acceptor::close]

[indexterm2 close..basic_socket_acceptor] 
Close the acceptor. 


  void ``[link boost_asio.reference.basic_socket_acceptor.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.close.overload2 more...]]``


[section:overload1 basic_socket_acceptor::close (1 of 2 overloads)]


Close the acceptor. 


  void close();


This function is used to close the acceptor. Any asynchronous accept operations will be cancelled immediately.

A subsequent call to `open()` is required before the acceptor can again be used to again perform socket accept operations.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_socket_acceptor::close (2 of 2 overloads)]


Close the acceptor. 


  boost::system::error_code close(
      boost::system::error_code & ec);


This function is used to close the acceptor. Any asynchronous accept operations will be cancelled immediately.

A subsequent call to `open()` is required before the acceptor can again be used to again perform socket accept operations.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::system::error_code ec;
   acceptor.close(ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]


[section:debug basic_socket_acceptor::debug]


['Inherited from socket_base.]

[indexterm2 debug..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_socket_acceptor::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_socket_acceptor::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_socket_acceptor::endpoint_type]

[indexterm2 endpoint_type..basic_socket_acceptor] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation basic_socket_acceptor::get_implementation]

[indexterm2 get_implementation..basic_socket_acceptor] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_socket_acceptor.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_socket_acceptor.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.get_implementation.overload2 more...]]``


[section:overload1 basic_socket_acceptor::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_socket_acceptor::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_socket_acceptor::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_socket_acceptor] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_acceptor::get_option]

[indexterm2 get_option..basic_socket_acceptor] 
Get an option from the acceptor. 


  template<
      typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.get_option.overload1 get_option]``(
      GettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.get_option.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.get_option.overload2 get_option]``(
      GettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.get_option.overload2 more...]]``


[section:overload1 basic_socket_acceptor::get_option (1 of 2 overloads)]


Get an option from the acceptor. 


  template<
      typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
  void get_option(
      GettableSocketOption & option);


This function is used to get the current value of an option on the acceptor.


[heading Parameters]
    

[variablelist
  
[[option][The option value to be obtained from the acceptor.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]



[heading Example]
  
Getting the value of the SOL\_SOCKET/SO\_REUSEADDR option: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::acceptor::reuse_address option;
   acceptor.get_option(option);
   bool is_set = option.get();







[endsect]



[section:overload2 basic_socket_acceptor::get_option (2 of 2 overloads)]


Get an option from the acceptor. 


  template<
      typename ``[link boost_asio.reference.GettableSocketOption GettableSocketOption]``>
  boost::system::error_code get_option(
      GettableSocketOption & option,
      boost::system::error_code & ec);


This function is used to get the current value of an option on the acceptor.


[heading Parameters]
    

[variablelist
  
[[option][The option value to be obtained from the acceptor.]]

[[ec][Set to indicate what error occurred, if any.]]

]



[heading Example]
  
Getting the value of the SOL\_SOCKET/SO\_REUSEADDR option: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::acceptor::reuse_address option;
   boost::system::error_code ec;
   acceptor.get_option(option, ec);
   if (ec)
   {
     // An error occurred.
   }
   bool is_set = option.get();







[endsect]


[endsect]

[section:get_service basic_socket_acceptor::get_service]

[indexterm2 get_service..basic_socket_acceptor] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_socket_acceptor.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_socket_acceptor.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.get_service.overload2 more...]]``


[section:overload1 basic_socket_acceptor::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_socket_acceptor::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_socket_acceptor::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_socket_acceptor] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_socket_acceptor::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_socket_acceptor] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_socket_acceptor::io_control]

[indexterm2 io_control..basic_socket_acceptor] 
Perform an IO control command on the acceptor. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.io_control.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.io_control.overload2 more...]]``


[section:overload1 basic_socket_acceptor::io_control (1 of 2 overloads)]


Perform an IO control command on the acceptor. 


  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 acceptor.


[heading Parameters]
    

[variablelist
  
[[command][The IO control command to be performed on the acceptor.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]



[heading Example]
  
Getting the number of bytes ready to read: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::acceptor::non_blocking_io command(true);
   socket.io_control(command);







[endsect]



[section:overload2 basic_socket_acceptor::io_control (2 of 2 overloads)]


Perform an IO control command on the acceptor. 


  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 acceptor.


[heading Parameters]
    

[variablelist
  
[[command][The IO control command to be performed on the acceptor.]]

[[ec][Set to indicate what error occurred, if any.]]

]



[heading Example]
  
Getting the number of bytes ready to read: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::acceptor::non_blocking_io command(true);
   boost::system::error_code ec;
   socket.io_control(command, ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]


[section:is_open basic_socket_acceptor::is_open]

[indexterm2 is_open..basic_socket_acceptor] 
Determine whether the acceptor is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_socket_acceptor::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_socket_acceptor::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:listen basic_socket_acceptor::listen]

[indexterm2 listen..basic_socket_acceptor] 
Place the acceptor into the state where it will listen for new connections. 


  void ``[link boost_asio.reference.basic_socket_acceptor.listen.overload1 listen]``(
      int backlog = socket_base::max_connections);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.listen.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.listen.overload2 listen]``(
      int backlog,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.listen.overload2 more...]]``


[section:overload1 basic_socket_acceptor::listen (1 of 2 overloads)]


Place the acceptor into the state where it will listen for new connections. 


  void listen(
      int backlog = socket_base::max_connections);


This function puts the socket acceptor into the state where it may accept new connections.


[heading Parameters]
    

[variablelist
  
[[backlog][The maximum length of the queue of pending connections.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_socket_acceptor::listen (2 of 2 overloads)]


Place the acceptor into the state where it will listen for new connections. 


  boost::system::error_code listen(
      int backlog,
      boost::system::error_code & ec);


This function puts the socket acceptor into the state where it may accept new connections.


[heading Parameters]
    

[variablelist
  
[[backlog][The maximum length of the queue of pending connections.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::system::error_code ec;
   acceptor.listen(boost::asio::socket_base::max_connections, ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]

[section:local_endpoint basic_socket_acceptor::local_endpoint]

[indexterm2 local_endpoint..basic_socket_acceptor] 
Get the local endpoint of the acceptor. 


  endpoint_type ``[link boost_asio.reference.basic_socket_acceptor.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_socket_acceptor.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.local_endpoint.overload2 more...]]``


[section:overload1 basic_socket_acceptor::local_endpoint (1 of 2 overloads)]


Get the local endpoint of the acceptor. 


  endpoint_type local_endpoint() const;


This function is used to obtain the locally bound endpoint of the acceptor.


[heading Return Value]
      
An object that represents the local endpoint of the acceptor.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::endpoint endpoint = acceptor.local_endpoint();







[endsect]



[section:overload2 basic_socket_acceptor::local_endpoint (2 of 2 overloads)]


Get the local endpoint of the acceptor. 


  endpoint_type local_endpoint(
      boost::system::error_code & ec) const;


This function is used to obtain the locally bound endpoint of the acceptor.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
An object that represents the local endpoint of the acceptor. Returns a default-constructed endpoint object if an error occurred and the error handler did not throw an exception.


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::system::error_code ec;
   boost::asio::ip::tcp::endpoint endpoint = acceptor.local_endpoint(ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]


[section:max_connections basic_socket_acceptor::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_socket_acceptor] 
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_acceptor::message_do_not_route]


['Inherited from socket_base.]

[indexterm2 message_do_not_route..basic_socket_acceptor] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_socket_acceptor::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_socket_acceptor] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_socket_acceptor::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_socket_acceptor] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_socket_acceptor::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_socket_acceptor] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek basic_socket_acceptor::message_peek]


['Inherited from socket_base.]

[indexterm2 message_peek..basic_socket_acceptor] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_socket_acceptor::native]

[indexterm2 native..basic_socket_acceptor] 
(Deprecated: Use `native_handle()`.) Get the native acceptor representation. 


  native_type native();


This function may be used to obtain the underlying representation of the acceptor. This is intended to allow access to native acceptor functionality that is not otherwise provided. 


[endsect]



[section:native_handle basic_socket_acceptor::native_handle]

[indexterm2 native_handle..basic_socket_acceptor] 
Get the native acceptor representation. 


  native_handle_type native_handle();


This function may be used to obtain the underlying representation of the acceptor. This is intended to allow access to native acceptor functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type basic_socket_acceptor::native_handle_type]

[indexterm2 native_handle_type..basic_socket_acceptor] 
The native representation of an acceptor. 


  typedef SocketAcceptorService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_socket_acceptor::native_non_blocking]

[indexterm2 native_non_blocking..basic_socket_acceptor] 
Gets the non-blocking mode of the native acceptor implementation. 


  bool ``[link boost_asio.reference.basic_socket_acceptor.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native acceptor implementation. 


  void ``[link boost_asio.reference.basic_socket_acceptor.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.native_non_blocking.overload3 more...]]``


[section:overload1 basic_socket_acceptor::native_non_blocking (1 of 3 overloads)]


Gets the non-blocking mode of the native acceptor implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native acceptor. This mode has no effect on the behaviour of the acceptor object's synchronous operations.


[heading Return Value]
      
`true` if the underlying acceptor is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the acceptor object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native acceptor. 




[endsect]



[section:overload2 basic_socket_acceptor::native_non_blocking (2 of 3 overloads)]


Sets the non-blocking mode of the native acceptor implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native acceptor. It has no effect on the behaviour of the acceptor object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying acceptor is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense. ]]

]




[endsect]



[section:overload3 basic_socket_acceptor::native_non_blocking (3 of 3 overloads)]


Sets the non-blocking mode of the native acceptor implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native acceptor. It has no effect on the behaviour of the acceptor object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying acceptor is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense. ]]

]




[endsect]


[endsect]


[section:native_type basic_socket_acceptor::native_type]

[indexterm2 native_type..basic_socket_acceptor] 
(Deprecated: Use native\_handle\_type.) The native representation of an acceptor. 


  typedef SocketAcceptorService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_socket_acceptor::non_blocking]

[indexterm2 non_blocking..basic_socket_acceptor] 
Gets the non-blocking mode of the acceptor. 


  bool ``[link boost_asio.reference.basic_socket_acceptor.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the acceptor. 


  void ``[link boost_asio.reference.basic_socket_acceptor.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.non_blocking.overload3 more...]]``


[section:overload1 basic_socket_acceptor::non_blocking (1 of 3 overloads)]


Gets the non-blocking mode of the acceptor. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the acceptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_socket_acceptor::non_blocking (2 of 3 overloads)]


Sets the non-blocking mode of the acceptor. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the acceptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_socket_acceptor::non_blocking (3 of 3 overloads)]


Sets the non-blocking mode of the acceptor. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the acceptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_socket_acceptor::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_socket_acceptor] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_socket_acceptor::open]

[indexterm2 open..basic_socket_acceptor] 
Open the acceptor using the specified protocol. 


  void ``[link boost_asio.reference.basic_socket_acceptor.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.open.overload2 more...]]``


[section:overload1 basic_socket_acceptor::open (1 of 2 overloads)]


Open the acceptor using the specified protocol. 


  void open(
      const protocol_type & protocol = protocol_type());


This function opens the socket acceptor so that it will use the specified protocol.


[heading Parameters]
    

[variablelist
  
[[protocol][An object specifying which protocol is to be used.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  


   boost::asio::ip::tcp::acceptor acceptor(io_service);
   acceptor.open(boost::asio::ip::tcp::v4());







[endsect]



[section:overload2 basic_socket_acceptor::open (2 of 2 overloads)]


Open the acceptor using the specified protocol. 


  boost::system::error_code open(
      const protocol_type & protocol,
      boost::system::error_code & ec);


This function opens the socket acceptor 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::acceptor acceptor(io_service);
   boost::system::error_code ec;
   acceptor.open(boost::asio::ip::tcp::v4(), ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]


[section:operator_eq_ basic_socket_acceptor::operator=]

[indexterm2 operator=..basic_socket_acceptor] 
Move-assign a [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another. 


  basic_socket_acceptor & operator=(
      basic_socket_acceptor && other);


This assignment operator moves an acceptor from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_socket_acceptor(io_service&) constructor`. 




[endsect]



[section:protocol_type basic_socket_acceptor::protocol_type]

[indexterm2 protocol_type..basic_socket_acceptor] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_buffer_size basic_socket_acceptor::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_low_watermark basic_socket_acceptor::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:reuse_address basic_socket_acceptor::reuse_address]


['Inherited from socket_base.]

[indexterm2 reuse_address..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_buffer_size basic_socket_acceptor::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_socket_acceptor::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_socket_acceptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_socket_acceptor::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_socket_acceptor] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_socket_acceptor::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_socket_acceptor] 
The type of the service that will be used to provide I/O operations. 


  typedef SocketAcceptorService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_acceptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_socket_acceptor::set_option]

[indexterm2 set_option..basic_socket_acceptor] 
Set an option on the acceptor. 


  template<
      typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
  void ``[link boost_asio.reference.basic_socket_acceptor.set_option.overload1 set_option]``(
      const SettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.set_option.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
  boost::system::error_code ``[link boost_asio.reference.basic_socket_acceptor.set_option.overload2 set_option]``(
      const SettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_acceptor.set_option.overload2 more...]]``


[section:overload1 basic_socket_acceptor::set_option (1 of 2 overloads)]


Set an option on the acceptor. 


  template<
      typename ``[link boost_asio.reference.SettableSocketOption SettableSocketOption]``>
  void set_option(
      const SettableSocketOption & option);


This function is used to set an option on the acceptor.


[heading Parameters]
    

[variablelist
  
[[option][The new option value to be set on the acceptor.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]



[heading Example]
  
Setting the SOL\_SOCKET/SO\_REUSEADDR option: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::acceptor::reuse_address option(true);
   acceptor.set_option(option);







[endsect]



[section:overload2 basic_socket_acceptor::set_option (2 of 2 overloads)]


Set an option on the acceptor. 


  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 acceptor.


[heading Parameters]
    

[variablelist
  
[[option][The new option value to be set on the acceptor.]]

[[ec][Set to indicate what error occurred, if any.]]

]



[heading Example]
  
Setting the SOL\_SOCKET/SO\_REUSEADDR option: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   ...
   boost::asio::ip::tcp::acceptor::reuse_address option(true);
   boost::system::error_code ec;
   acceptor.set_option(option, ec);
   if (ec)
   {
     // An error occurred.
   }







[endsect]


[endsect]


[section:shutdown_type basic_socket_acceptor::shutdown_type]


['Inherited from socket_base.]

[indexterm2 shutdown_type..basic_socket_acceptor] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_socket_acceptor]
[indexterm2 shutdown_send..basic_socket_acceptor]
[indexterm2 shutdown_both..basic_socket_acceptor]

[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_iostream basic_socket_iostream]


Iostream interface for a socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.StreamSocketService StreamSocketService]`` = stream_socket_service<Protocol>,
      typename Time = boost::posix_time::ptime,
      typename ``[link boost_asio.reference.TimeTraits TimeTraits]`` = boost::asio::time_traits<Time>,
      typename ``[link boost_asio.reference.TimerService TimerService]`` = deadline_timer_service<Time, TimeTraits>>
  class basic_socket_iostream


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_socket_iostream.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_iostream.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_iostream.time_type [*time_type]]]
    [The time type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream [*basic_socket_iostream]]]
    [Construct a basic_socket_iostream without establishing a connection. 

     Establish a connection to an endpoint corresponding to a resolver query. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.close [*close]]]
    [Close the connection. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.connect [*connect]]]
    [Establish a connection to an endpoint corresponding to a resolver query. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.error [*error]]]
    [Get the last error associated with the stream. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.expires_at [*expires_at]]]
    [Get the stream's expiry time as an absolute time. 

     Set the stream's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the stream's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.rdbuf [*rdbuf]]]
    [Return a pointer to the underlying streambuf. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/basic_socket_iostream.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:basic_socket_iostream basic_socket_iostream::basic_socket_iostream]

[indexterm2 basic_socket_iostream..basic_socket_iostream] 
Construct a [link boost_asio.reference.basic_socket_iostream `basic_socket_iostream`] without establishing a connection. 


  ``[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream.overload1 basic_socket_iostream]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_iostream.basic_socket_iostream.overload1 more...]]``


Establish a connection to an endpoint corresponding to a resolver query. 


  template<
      typename T1,
      ... ,
      typename TN>
  explicit ``[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream.overload2 basic_socket_iostream]``(
      T1 t1,
      ... ,
      TN tn);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_iostream.basic_socket_iostream.overload2 more...]]``


[section:overload1 basic_socket_iostream::basic_socket_iostream (1 of 2 overloads)]


Construct a [link boost_asio.reference.basic_socket_iostream `basic_socket_iostream`] without establishing a connection. 


  basic_socket_iostream();



[endsect]



[section:overload2 basic_socket_iostream::basic_socket_iostream (2 of 2 overloads)]


Establish a connection to an endpoint corresponding to a resolver query. 


  template<
      typename T1,
      ... ,
      typename TN>
  basic_socket_iostream(
      T1 t1,
      ... ,
      TN tn);


This constructor automatically establishes a connection based on the supplied resolver query parameters. The arguments are used to construct a resolver query object. 


[endsect]


[endsect]


[section:close basic_socket_iostream::close]

[indexterm2 close..basic_socket_iostream] 
Close the connection. 


  void close();



[endsect]



[section:connect basic_socket_iostream::connect]

[indexterm2 connect..basic_socket_iostream] 
Establish a connection to an endpoint corresponding to a resolver query. 


  template<
      typename T1,
      ... ,
      typename TN>
  void connect(
      T1 t1,
      ... ,
      TN tn);


This function automatically establishes a connection based on the supplied resolver query parameters. The arguments are used to construct a resolver query object. 


[endsect]



[section:duration_type basic_socket_iostream::duration_type]

[indexterm2 duration_type..basic_socket_iostream] 
The duration type. 


  typedef TimeTraits::duration_type duration_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_iostream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_socket_iostream::endpoint_type]

[indexterm2 endpoint_type..basic_socket_iostream] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_iostream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error basic_socket_iostream::error]

[indexterm2 error..basic_socket_iostream] 
Get the last error associated with the stream. 


  const boost::system::error_code & error() const;



[heading Return Value]
      
An `error_code` corresponding to the last error from the stream.


[heading Example]
  
To print the error associated with a failure to establish a connection: 

   tcp::iostream s("www.boost.org", "http");
   if (!s)
   {
     std::cout << "Error: " << s.error().message() << std::endl;
   } 







[endsect]


[section:expires_at basic_socket_iostream::expires_at]

[indexterm2 expires_at..basic_socket_iostream] 
Get the stream's expiry time as an absolute time. 


  time_type ``[link boost_asio.reference.basic_socket_iostream.expires_at.overload1 expires_at]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_iostream.expires_at.overload1 more...]]``


Set the stream's expiry time as an absolute time. 


  void ``[link boost_asio.reference.basic_socket_iostream.expires_at.overload2 expires_at]``(
      const time_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_iostream.expires_at.overload2 more...]]``


[section:overload1 basic_socket_iostream::expires_at (1 of 2 overloads)]


Get the stream's expiry time as an absolute time. 


  time_type expires_at() const;



[heading Return Value]
      
An absolute time value representing the stream's expiry time. 




[endsect]



[section:overload2 basic_socket_iostream::expires_at (2 of 2 overloads)]


Set the stream's expiry time as an absolute time. 


  void expires_at(
      const time_type & expiry_time);


This function sets the expiry time associated with the stream. Stream operations performed after this time (where the operations cannot be completed using the internal buffers) will fail with the error `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the stream. ]]

]




[endsect]


[endsect]

[section:expires_from_now basic_socket_iostream::expires_from_now]

[indexterm2 expires_from_now..basic_socket_iostream] 
Get the timer's expiry time relative to now. 


  duration_type ``[link boost_asio.reference.basic_socket_iostream.expires_from_now.overload1 expires_from_now]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_iostream.expires_from_now.overload1 more...]]``


Set the stream's expiry time relative to now. 


  void ``[link boost_asio.reference.basic_socket_iostream.expires_from_now.overload2 expires_from_now]``(
      const duration_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_iostream.expires_from_now.overload2 more...]]``


[section:overload1 basic_socket_iostream::expires_from_now (1 of 2 overloads)]


Get the timer's expiry time relative to now. 


  duration_type expires_from_now() const;



[heading Return Value]
      
A relative time value representing the stream's expiry time. 




[endsect]



[section:overload2 basic_socket_iostream::expires_from_now (2 of 2 overloads)]


Set the stream's expiry time relative to now. 


  void expires_from_now(
      const duration_type & expiry_time);


This function sets the expiry time associated with the stream. Stream operations performed after this time (where the operations cannot be completed using the internal buffers) will fail with the error `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer. ]]

]




[endsect]


[endsect]


[section:rdbuf basic_socket_iostream::rdbuf]

[indexterm2 rdbuf..basic_socket_iostream] 
Return a pointer to the underlying streambuf. 


  basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * rdbuf() const;



[endsect]



[section:time_type basic_socket_iostream::time_type]

[indexterm2 time_type..basic_socket_iostream] 
The time type. 


  typedef TimeTraits::time_type time_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_iostream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]

[section:basic_socket_streambuf basic_socket_streambuf]


Iostream streambuf for a socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.StreamSocketService StreamSocketService]`` = stream_socket_service<Protocol>,
      typename Time = boost::posix_time::ptime,
      typename ``[link boost_asio.reference.TimeTraits TimeTraits]`` = boost::asio::time_traits<Time>,
      typename ``[link boost_asio.reference.TimerService TimerService]`` = deadline_timer_service<Time, TimeTraits>>
  class basic_socket_streambuf :
    public basic_socket< Protocol, StreamSocketService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_socket_streambuf.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.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_streambuf.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.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_streambuf.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_streambuf.time_type [*time_type]]]
    [The time type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_streambuf.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.basic_socket_streambuf [*basic_socket_streambuf]]]
    [Construct a basic_socket_streambuf without establishing a connection. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.close [*close]]]
    [Close the connection. 

     Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.connect [*connect]]]
    [Establish a connection. 

     Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.expires_at [*expires_at]]]
    [Get the stream buffer's expiry time as an absolute time. 

     Set the stream buffer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.expires_from_now [*expires_from_now]]]
    [Get the stream buffer's expiry time relative to now. 

     Set the stream buffer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.puberror [*puberror]]]
    [Get the last error associated with the stream buffer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf._basic_socket_streambuf [*~basic_socket_streambuf]]]
    [Destructor flushes buffered data. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_streambuf.error [*error]]]
    [Get the last error associated with the stream buffer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.overflow [*overflow]]]
    []
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.setbuf [*setbuf]]]
    []
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.sync [*sync]]]
    []
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.underflow [*underflow]]]
    []
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_streambuf.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_streambuf.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_streambuf.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_streambuf.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_streambuf.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_streambuf.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_streambuf.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_streambuf.io_handler [*io_handler]]]
    []
  ]
  
  [
    [[link boost_asio.reference.basic_socket_streambuf.timer_handler [*timer_handler]]]
    []
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_socket_streambuf::assign]

[indexterm2 assign..basic_socket_streambuf] 
Assign an existing native socket to the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.assign.overload2 more...]]``


[section:overload1 basic_socket_streambuf::assign (1 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  void assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket);



[endsect]



[section:overload2 basic_socket_streambuf::assign (2 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  boost::system::error_code assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_connect basic_socket_streambuf::async_connect]


['Inherited from basic_socket.]

[indexterm2 async_connect..basic_socket_streambuf] 
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 not 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_streambuf::at_mark]

[indexterm2 at_mark..basic_socket_streambuf] 
Determine whether the socket is at the out-of-band data mark. 


  bool ``[link boost_asio.reference.basic_socket_streambuf.at_mark.overload1 at_mark]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.at_mark.overload1 more...]]``

  bool ``[link boost_asio.reference.basic_socket_streambuf.at_mark.overload2 at_mark]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.at_mark.overload2 more...]]``


[section:overload1 basic_socket_streambuf::at_mark (1 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::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_socket_streambuf::available]

[indexterm2 available..basic_socket_streambuf] 
Determine the number of bytes available for reading. 


  std::size_t ``[link boost_asio.reference.basic_socket_streambuf.available.overload1 available]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.available.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_socket_streambuf.available.overload2 available]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.available.overload2 more...]]``


[section:overload1 basic_socket_streambuf::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_socket_streambuf::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_socket_streambuf basic_socket_streambuf::basic_socket_streambuf]

[indexterm2 basic_socket_streambuf..basic_socket_streambuf] 
Construct a [link boost_asio.reference.basic_socket_streambuf `basic_socket_streambuf`] without establishing a connection. 


  basic_socket_streambuf();



[endsect]


[section:bind basic_socket_streambuf::bind]

[indexterm2 bind..basic_socket_streambuf] 
Bind the socket to the given local endpoint. 


  void ``[link boost_asio.reference.basic_socket_streambuf.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.bind.overload2 more...]]``


[section:overload1 basic_socket_streambuf::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]
  


   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_streambuf::bind (2 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::broadcast]


['Inherited from socket_base.]

[indexterm2 broadcast..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_socket_streambuf::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_socket_streambuf::cancel]

[indexterm2 cancel..basic_socket_streambuf] 
Cancel all asynchronous operations associated with the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.cancel.overload2 more...]]``


[section:overload1 basic_socket_streambuf::cancel (1 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::cancel (2 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::close]

[indexterm2 close..basic_socket_streambuf] 
Close the connection. 


  basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * ``[link boost_asio.reference.basic_socket_streambuf.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.close.overload1 more...]]``


Close the socket. 


  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.close.overload2 more...]]``


[section:overload1 basic_socket_streambuf::close (1 of 2 overloads)]


Close the connection. 


  basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * close();



[heading Return Value]
      
`this` if a connection was successfully established, a null pointer otherwise. 




[endsect]



[section:overload2 basic_socket_streambuf::close (2 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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_streambuf::connect]

[indexterm2 connect..basic_socket_streambuf] 
Establish a connection. 


  basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * ``[link boost_asio.reference.basic_socket_streambuf.connect.overload1 connect]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.connect.overload1 more...]]``

  template<
      typename T1,
      ... ,
      typename TN>
  basic_socket_streambuf< Protocol, StreamSocketService > * ``[link boost_asio.reference.basic_socket_streambuf.connect.overload2 connect]``(
      T1 t1,
      ... ,
      TN tn);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.connect.overload2 more...]]``


Connect the socket to the specified endpoint. 


  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.connect.overload3 connect]``(
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.connect.overload3 more...]]``


[section:overload1 basic_socket_streambuf::connect (1 of 3 overloads)]


Establish a connection. 


  basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * connect(
      const endpoint_type & endpoint);


This function establishes a connection to the specified endpoint.


[heading Return Value]
      
`this` if a connection was successfully established, a null pointer otherwise. 




[endsect]



[section:overload2 basic_socket_streambuf::connect (2 of 3 overloads)]


Establish a connection. 


  template<
      typename T1,
      ... ,
      typename TN>
  basic_socket_streambuf< Protocol, StreamSocketService > * connect(
      T1 t1,
      ... ,
      TN tn);


This function automatically establishes a connection based on the supplied resolver query parameters. The arguments are used to construct a resolver query object.


[heading Return Value]
      
`this` if a connection was successfully established, a null pointer otherwise. 




[endsect]



[section:overload3 basic_socket_streambuf::connect (3 of 3 overloads)]


['Inherited from basic_socket.]


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 not 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_streambuf::debug]


['Inherited from socket_base.]

[indexterm2 debug..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_socket_streambuf::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:duration_type basic_socket_streambuf::duration_type]

[indexterm2 duration_type..basic_socket_streambuf] 
The duration type. 


  typedef TimeTraits::duration_type duration_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_socket_streambuf::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_socket_streambuf::endpoint_type]

[indexterm2 endpoint_type..basic_socket_streambuf] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error basic_socket_streambuf::error]

[indexterm2 error..basic_socket_streambuf] 
Get the last error associated with the stream buffer. 


  virtual const boost::system::error_code & error() const;



[heading Return Value]
      
An `error_code` corresponding to the last error from the stream buffer. 




[endsect]


[section:expires_at basic_socket_streambuf::expires_at]

[indexterm2 expires_at..basic_socket_streambuf] 
Get the stream buffer's expiry time as an absolute time. 


  time_type ``[link boost_asio.reference.basic_socket_streambuf.expires_at.overload1 expires_at]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.expires_at.overload1 more...]]``


Set the stream buffer's expiry time as an absolute time. 


  void ``[link boost_asio.reference.basic_socket_streambuf.expires_at.overload2 expires_at]``(
      const time_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.expires_at.overload2 more...]]``


[section:overload1 basic_socket_streambuf::expires_at (1 of 2 overloads)]


Get the stream buffer's expiry time as an absolute time. 


  time_type expires_at() const;



[heading Return Value]
      
An absolute time value representing the stream buffer's expiry time. 




[endsect]



[section:overload2 basic_socket_streambuf::expires_at (2 of 2 overloads)]


Set the stream buffer's expiry time as an absolute time. 


  void expires_at(
      const time_type & expiry_time);


This function sets the expiry time associated with the stream. Stream operations performed after this time (where the operations cannot be completed using the internal buffers) will fail with the error `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the stream. ]]

]




[endsect]


[endsect]

[section:expires_from_now basic_socket_streambuf::expires_from_now]

[indexterm2 expires_from_now..basic_socket_streambuf] 
Get the stream buffer's expiry time relative to now. 


  duration_type ``[link boost_asio.reference.basic_socket_streambuf.expires_from_now.overload1 expires_from_now]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.expires_from_now.overload1 more...]]``


Set the stream buffer's expiry time relative to now. 


  void ``[link boost_asio.reference.basic_socket_streambuf.expires_from_now.overload2 expires_from_now]``(
      const duration_type & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.expires_from_now.overload2 more...]]``


[section:overload1 basic_socket_streambuf::expires_from_now (1 of 2 overloads)]


Get the stream buffer's expiry time relative to now. 


  duration_type expires_from_now() const;



[heading Return Value]
      
A relative time value representing the stream buffer's expiry time. 




[endsect]



[section:overload2 basic_socket_streambuf::expires_from_now (2 of 2 overloads)]


Set the stream buffer's expiry time relative to now. 


  void expires_from_now(
      const duration_type & expiry_time);


This function sets the expiry time associated with the stream. Stream operations performed after this time (where the operations cannot be completed using the internal buffers) will fail with the error `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer. ]]

]




[endsect]


[endsect]

[section:get_implementation basic_socket_streambuf::get_implementation]

[indexterm2 get_implementation..basic_socket_streambuf] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_socket_streambuf.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_socket_streambuf.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.get_implementation.overload2 more...]]``


[section:overload1 basic_socket_streambuf::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_socket_streambuf::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_socket_streambuf::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_socket_streambuf] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_streambuf::get_option]

[indexterm2 get_option..basic_socket_streambuf] 
Get an option from the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.get_option.overload1 get_option]``(
      GettableSocketOption & option) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.get_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.get_option.overload2 get_option]``(
      GettableSocketOption & option,
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.get_option.overload2 more...]]``


[section:overload1 basic_socket_streambuf::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;


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_streambuf::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;


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:get_service basic_socket_streambuf::get_service]

[indexterm2 get_service..basic_socket_streambuf] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_socket_streambuf.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_socket_streambuf.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.get_service.overload2 more...]]``


[section:overload1 basic_socket_streambuf::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_socket_streambuf::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_socket_streambuf::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_socket_streambuf] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_socket_streambuf::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_socket_streambuf] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_socket_streambuf::io_control]

[indexterm2 io_control..basic_socket_streambuf] 
Perform an IO control command on the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.io_control.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.io_control.overload2 more...]]``


[section:overload1 basic_socket_streambuf::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);


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_streambuf::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);


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_handler basic_socket_streambuf::io_handler]

[indexterm2 io_handler..basic_socket_streambuf] 

  friend struct io_handler();


[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open basic_socket_streambuf::is_open]


['Inherited from basic_socket.]

[indexterm2 is_open..basic_socket_streambuf] 
Determine whether the socket is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_socket_streambuf::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_socket_streambuf::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:local_endpoint basic_socket_streambuf::local_endpoint]

[indexterm2 local_endpoint..basic_socket_streambuf] 
Get the local endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_socket_streambuf.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_socket_streambuf.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.local_endpoint.overload2 more...]]``


[section:overload1 basic_socket_streambuf::local_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::local_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::lowest_layer]

[indexterm2 lowest_layer..basic_socket_streambuf] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_socket_streambuf.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_socket_streambuf.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.lowest_layer.overload2 more...]]``


[section:overload1 basic_socket_streambuf::lowest_layer (1 of 2 overloads)]


['Inherited from basic_socket.]


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 [link boost_asio.reference.basic_socket `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:overload2 basic_socket_streambuf::lowest_layer (2 of 2 overloads)]


['Inherited from basic_socket.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_socket `basic_socket`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_socket_streambuf::lowest_layer_type]


['Inherited from basic_socket.]

[indexterm2 lowest_layer_type..basic_socket_streambuf] 
A [link boost_asio.reference.basic_socket `basic_socket`] is always the lowest layer. 


  typedef basic_socket< Protocol, StreamSocketService > 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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 




[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections basic_socket_streambuf::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_socket_streambuf] 
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_streambuf::message_do_not_route]


['Inherited from socket_base.]

[indexterm2 message_do_not_route..basic_socket_streambuf] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_socket_streambuf::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_socket_streambuf] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_socket_streambuf::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_socket_streambuf] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_socket_streambuf::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_socket_streambuf] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek basic_socket_streambuf::message_peek]


['Inherited from socket_base.]

[indexterm2 message_peek..basic_socket_streambuf] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_socket_streambuf::native]


['Inherited from basic_socket.]

[indexterm2 native..basic_socket_streambuf] 
(Deprecated: Use `native_handle()`.) 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_handle basic_socket_streambuf::native_handle]


['Inherited from basic_socket.]

[indexterm2 native_handle..basic_socket_streambuf] 
Get the native socket representation. 


  native_handle_type native_handle();


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_handle_type basic_socket_streambuf::native_handle_type]


['Inherited from basic_socket.]

[indexterm2 native_handle_type..basic_socket_streambuf] 
The native representation of a socket. 


  typedef StreamSocketService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_socket_streambuf::native_non_blocking]

[indexterm2 native_non_blocking..basic_socket_streambuf] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.basic_socket_streambuf.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  void ``[link boost_asio.reference.basic_socket_streambuf.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.native_non_blocking.overload3 more...]]``


[section:overload1 basic_socket_streambuf::native_non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native socket. This mode has no effect on the behaviour of the socket object's synchronous operations.


[heading Return Value]
      
`true` if the underlying socket is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the socket object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native socket.


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload2 basic_socket_streambuf::native_non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload3 basic_socket_streambuf::native_non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]


[endsect]


[section:native_type basic_socket_streambuf::native_type]


['Inherited from basic_socket.]

[indexterm2 native_type..basic_socket_streambuf] 
(Deprecated: Use native\_handle\_type.) The native representation of a socket. 


  typedef StreamSocketService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_socket_streambuf::non_blocking]

[indexterm2 non_blocking..basic_socket_streambuf] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.basic_socket_streambuf.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.non_blocking.overload3 more...]]``


[section:overload1 basic_socket_streambuf::non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the socket. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_socket_streambuf::non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_socket_streambuf::non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_socket_streambuf::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_socket_streambuf] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_socket_streambuf::open]

[indexterm2 open..basic_socket_streambuf] 
Open the socket using the specified protocol. 


  void ``[link boost_asio.reference.basic_socket_streambuf.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.open.overload2 more...]]``


[section:overload1 basic_socket_streambuf::open (1 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::open (2 of 2 overloads)]


['Inherited from basic_socket.]


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:overflow basic_socket_streambuf::overflow]

[indexterm2 overflow..basic_socket_streambuf] 

  int_type overflow(
      int_type c);



[endsect]



[section:protocol_type basic_socket_streambuf::protocol_type]


['Inherited from basic_socket.]

[indexterm2 protocol_type..basic_socket_streambuf] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:puberror basic_socket_streambuf::puberror]

[indexterm2 puberror..basic_socket_streambuf] 
Get the last error associated with the stream buffer. 


  const boost::system::error_code & puberror() const;



[heading Return Value]
      
An `error_code` corresponding to the last error from the stream buffer. 




[endsect]



[section:receive_buffer_size basic_socket_streambuf::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_low_watermark basic_socket_streambuf::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remote_endpoint basic_socket_streambuf::remote_endpoint]

[indexterm2 remote_endpoint..basic_socket_streambuf] 
Get the remote endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_socket_streambuf.remote_endpoint.overload1 remote_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.remote_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_socket_streambuf.remote_endpoint.overload2 remote_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.remote_endpoint.overload2 more...]]``


[section:overload1 basic_socket_streambuf::remote_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::remote_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::reuse_address]


['Inherited from socket_base.]

[indexterm2 reuse_address..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_buffer_size basic_socket_streambuf::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_socket_streambuf::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_socket_streambuf] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_socket_streambuf::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_socket_streambuf] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_socket_streambuf::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_socket_streambuf] 
The type of the service that will be used to provide I/O operations. 


  typedef StreamSocketService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_socket_streambuf::set_option]

[indexterm2 set_option..basic_socket_streambuf] 
Set an option on the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.set_option.overload1 set_option]``(
      const SettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.set_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.set_option.overload2 set_option]``(
      const SettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.set_option.overload2 more...]]``


[section:overload1 basic_socket_streambuf::set_option (1 of 2 overloads)]


['Inherited from basic_socket.]


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_streambuf::set_option (2 of 2 overloads)]


['Inherited from basic_socket.]


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:setbuf basic_socket_streambuf::setbuf]

[indexterm2 setbuf..basic_socket_streambuf] 

  std::streambuf * setbuf(
      char_type * s,
      std::streamsize n);



[endsect]


[section:shutdown basic_socket_streambuf::shutdown]

[indexterm2 shutdown..basic_socket_streambuf] 
Disable sends or receives on the socket. 


  void ``[link boost_asio.reference.basic_socket_streambuf.shutdown.overload1 shutdown]``(
      shutdown_type what);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_socket_streambuf.shutdown.overload2 shutdown]``(
      shutdown_type what,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_socket_streambuf.shutdown.overload2 more...]]``


[section:overload1 basic_socket_streambuf::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_socket_streambuf::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_socket_streambuf::shutdown_type]


['Inherited from socket_base.]

[indexterm2 shutdown_type..basic_socket_streambuf] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_socket_streambuf]
[indexterm2 shutdown_send..basic_socket_streambuf]
[indexterm2 shutdown_both..basic_socket_streambuf]

[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:sync basic_socket_streambuf::sync]

[indexterm2 sync..basic_socket_streambuf] 

  int sync();



[endsect]



[section:time_type basic_socket_streambuf::time_type]

[indexterm2 time_type..basic_socket_streambuf] 
The time type. 


  typedef TimeTraits::time_type time_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:timer_handler basic_socket_streambuf::timer_handler]

[indexterm2 timer_handler..basic_socket_streambuf] 

  friend struct timer_handler();


[heading Requirements]

[*Header: ][^boost/asio/basic_socket_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:underflow basic_socket_streambuf::underflow]

[indexterm2 underflow..basic_socket_streambuf] 

  int_type underflow();



[endsect]



[section:_basic_socket_streambuf basic_socket_streambuf::~basic_socket_streambuf]

[indexterm2 ~basic_socket_streambuf..basic_socket_streambuf] 
Destructor flushes buffered data. 


  virtual ~basic_socket_streambuf();



[endsect]



[endsect]

[section:basic_stream_socket basic_stream_socket]


Provides stream-oriented socket functionality. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.StreamSocketService StreamSocketService]`` = stream_socket_service<Protocol>>
  class basic_stream_socket :
    public basic_socket< Protocol, StreamSocketService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_stream_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.basic_stream_socket [*basic_stream_socket]]]
    [Construct a basic_stream_socket without opening it. 

     Construct and open a basic_stream_socket. 

     Construct a basic_stream_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_stream_socket on an existing native socket. 

     Move-construct a basic_stream_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.read_some [*read_some]]]
    [Read some data from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.receive [*receive]]]
    [Receive some data on the socket. 

     Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.send [*send]]]
    [Send some data on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.write_some [*write_some]]]
    [Write some data to the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] class template provides asynchronous and blocking stream-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign basic_stream_socket::assign]

[indexterm2 assign..basic_stream_socket] 
Assign an existing native socket to the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.assign.overload1 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.assign.overload2 assign]``(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.assign.overload2 more...]]``


[section:overload1 basic_stream_socket::assign (1 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  void assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket);



[endsect]



[section:overload2 basic_stream_socket::assign (2 of 2 overloads)]


['Inherited from basic_socket.]


Assign an existing native socket to the socket. 


  boost::system::error_code assign(
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_connect basic_stream_socket::async_connect]


['Inherited from basic_socket.]

[indexterm2 async_connect..basic_stream_socket] 
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 not 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:async_read_some basic_stream_socket::async_read_some]

[indexterm2 async_read_some..basic_stream_socket] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read data from the stream socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be read. 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 read 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 read.
   ); 
``
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 read operation may not read all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.async_read_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]


[section:async_receive basic_stream_socket::async_receive]

[indexterm2 async_receive..basic_stream_socket] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_stream_socket.async_receive.overload1 async_receive]``(
      const MutableBufferSequence & buffers,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.async_receive.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void ``[link boost_asio.reference.basic_stream_socket.async_receive.overload2 async_receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      ReadHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.async_receive.overload2 more...]]``


[section:overload1 basic_stream_socket::async_receive (1 of 2 overloads)]


Start an asynchronous receive. 


  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 asynchronously receive data from the stream socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 receive operation may not receive all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is received before the asynchronous operation completes.


[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_stream_socket::async_receive (2 of 2 overloads)]


Start an asynchronous receive. 


  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 asynchronously receive data from the stream socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 Remarks]
      
The receive operation may not receive all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is received before the asynchronous operation completes.


[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), 0, 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]


[endsect]

[section:async_send basic_stream_socket::async_send]

[indexterm2 async_send..basic_stream_socket] 
Start an asynchronous send. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.basic_stream_socket.async_send.overload1 async_send]``(
      const ConstBufferSequence & buffers,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.async_send.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void ``[link boost_asio.reference.basic_stream_socket.async_send.overload2 async_send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.async_send.overload2 more...]]``


[section:overload1 basic_stream_socket::async_send (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(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously send data on the stream socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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 send operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[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_stream_socket::async_send (2 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(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);


This function is used to asynchronously send data on the stream socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[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.]]

[[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 Remarks]
      
The send operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[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), 0, 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]


[endsect]


[section:async_write_some basic_stream_socket::async_write_some]

[indexterm2 async_write_some..basic_stream_socket] 
Start an asynchronous write. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write data to the stream socket. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to 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 write 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 written.
   ); 
``
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 write operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.async_write_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]


[section:at_mark basic_stream_socket::at_mark]

[indexterm2 at_mark..basic_stream_socket] 
Determine whether the socket is at the out-of-band data mark. 


  bool ``[link boost_asio.reference.basic_stream_socket.at_mark.overload1 at_mark]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.at_mark.overload1 more...]]``

  bool ``[link boost_asio.reference.basic_stream_socket.at_mark.overload2 at_mark]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.at_mark.overload2 more...]]``


[section:overload1 basic_stream_socket::at_mark (1 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_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_stream_socket::available]

[indexterm2 available..basic_stream_socket] 
Determine the number of bytes available for reading. 


  std::size_t ``[link boost_asio.reference.basic_stream_socket.available.overload1 available]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.available.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_stream_socket.available.overload2 available]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.available.overload2 more...]]``


[section:overload1 basic_stream_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_stream_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_stream_socket basic_stream_socket::basic_stream_socket]

[indexterm2 basic_stream_socket..basic_stream_socket] 
Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] without opening it. 


  explicit ``[link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload1 basic_stream_socket]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload1 more...]]``


Construct and open a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`]. 


  ``[link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload2 basic_stream_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload2 more...]]``


Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`], opening it and binding it to the given local endpoint. 


  ``[link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload3 basic_stream_socket]``(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload3 more...]]``


Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] on an existing native socket. 


  ``[link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload4 basic_stream_socket]``(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload4 more...]]``


Move-construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from another. 


  ``[link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload5 basic_stream_socket]``(
      basic_stream_socket && other);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.basic_stream_socket.overload5 more...]]``


[section:overload1 basic_stream_socket::basic_stream_socket (1 of 5 overloads)]


Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] without opening it. 


  basic_stream_socket(
      boost::asio::io_service & io_service);


This constructor creates a stream socket without opening it. The socket needs to be opened and then connected or accepted before data can be sent or received on it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the stream socket will use to dispatch handlers for any asynchronous operations performed on the socket. ]]

]




[endsect]



[section:overload2 basic_stream_socket::basic_stream_socket (2 of 5 overloads)]


Construct and open a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`]. 


  basic_stream_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol);


This constructor creates and opens a stream socket. The socket needs to be connected or accepted before data can be sent or received on it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the stream 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_stream_socket::basic_stream_socket (3 of 5 overloads)]


Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`], opening it and binding it to the given local endpoint. 


  basic_stream_socket(
      boost::asio::io_service & io_service,
      const endpoint_type & endpoint);


This constructor creates a stream 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 [link boost_asio.reference.io_service `io_service`] object that the stream socket will use to dispatch handlers for any asynchronous operations performed on the socket.]]

[[endpoint][An endpoint on the local machine to which the stream socket will be bound.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload4 basic_stream_socket::basic_stream_socket (4 of 5 overloads)]


Construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] on an existing native socket. 


  basic_stream_socket(
      boost::asio::io_service & io_service,
      const protocol_type & protocol,
      const native_handle_type & native_socket);


This constructor creates a stream socket object to hold an existing native socket.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the stream 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]



[section:overload5 basic_stream_socket::basic_stream_socket (5 of 5 overloads)]


Move-construct a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from another. 


  basic_stream_socket(
      basic_stream_socket && other);


This constructor moves a stream socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`. 




[endsect]


[endsect]

[section:bind basic_stream_socket::bind]

[indexterm2 bind..basic_stream_socket] 
Bind the socket to the given local endpoint. 


  void ``[link boost_asio.reference.basic_stream_socket.bind.overload1 bind]``(
      const endpoint_type & endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.bind.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.bind.overload2 bind]``(
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.bind.overload2 more...]]``


[section:overload1 basic_stream_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]
  


   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_stream_socket::bind (2 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::broadcast]


['Inherited from socket_base.]

[indexterm2 broadcast..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable basic_stream_socket::bytes_readable]


['Inherited from socket_base.]

[indexterm2 bytes_readable..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel basic_stream_socket::cancel]

[indexterm2 cancel..basic_stream_socket] 
Cancel all asynchronous operations associated with the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.cancel.overload2 more...]]``


[section:overload1 basic_stream_socket::cancel (1 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::cancel (2 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::close]

[indexterm2 close..basic_stream_socket] 
Close the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.close.overload2 more...]]``


[section:overload1 basic_stream_socket::close (1 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[heading Remarks]
      
For portable behaviour with respect to graceful closure of a connected socket, call `shutdown()` before closing the socket. 




[endsect]



[section:overload2 basic_stream_socket::close (2 of 2 overloads)]


['Inherited from basic_socket.]


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. Note that, even if the function indicates an error, the underlying descriptor is closed.]]

]


[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_stream_socket::connect]

[indexterm2 connect..basic_stream_socket] 
Connect the socket to the specified endpoint. 


  void ``[link boost_asio.reference.basic_stream_socket.connect.overload1 connect]``(
      const endpoint_type & peer_endpoint);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.connect.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.connect.overload2 connect]``(
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.connect.overload2 more...]]``


[section:overload1 basic_stream_socket::connect (1 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_stream_socket::connect (2 of 2 overloads)]


['Inherited from basic_socket.]


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 not 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_stream_socket::debug]


['Inherited from socket_base.]

[indexterm2 debug..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route basic_stream_socket::do_not_route]


['Inherited from socket_base.]

[indexterm2 do_not_route..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted basic_stream_socket::enable_connection_aborted]


['Inherited from socket_base.]

[indexterm2 enable_connection_aborted..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint_type basic_stream_socket::endpoint_type]

[indexterm2 endpoint_type..basic_stream_socket] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation basic_stream_socket::get_implementation]

[indexterm2 get_implementation..basic_stream_socket] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_stream_socket.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_stream_socket.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.get_implementation.overload2 more...]]``


[section:overload1 basic_stream_socket::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_stream_socket::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_stream_socket::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_stream_socket] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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_stream_socket::get_option]

[indexterm2 get_option..basic_stream_socket] 
Get an option from the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.get_option.overload1 get_option]``(
      GettableSocketOption & option) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.get_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.get_option.overload2 get_option]``(
      GettableSocketOption & option,
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.get_option.overload2 more...]]``


[section:overload1 basic_stream_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;


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_stream_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;


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:get_service basic_stream_socket::get_service]

[indexterm2 get_service..basic_stream_socket] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_stream_socket.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_stream_socket.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.get_service.overload2 more...]]``


[section:overload1 basic_stream_socket::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_stream_socket::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_stream_socket::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_stream_socket] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_stream_socket::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_stream_socket] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control basic_stream_socket::io_control]

[indexterm2 io_control..basic_stream_socket] 
Perform an IO control command on the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.io_control.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.io_control.overload2 more...]]``


[section:overload1 basic_stream_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);


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_stream_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);


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:is_open basic_stream_socket::is_open]


['Inherited from basic_socket.]

[indexterm2 is_open..basic_stream_socket] 
Determine whether the socket is open. 


  bool is_open() const;



[endsect]



[section:keep_alive basic_stream_socket::keep_alive]


['Inherited from socket_base.]

[indexterm2 keep_alive..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger basic_stream_socket::linger]


['Inherited from socket_base.]

[indexterm2 linger..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:local_endpoint basic_stream_socket::local_endpoint]

[indexterm2 local_endpoint..basic_stream_socket] 
Get the local endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_stream_socket.local_endpoint.overload1 local_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.local_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_stream_socket.local_endpoint.overload2 local_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.local_endpoint.overload2 more...]]``


[section:overload1 basic_stream_socket::local_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::local_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::lowest_layer]

[indexterm2 lowest_layer..basic_stream_socket] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.basic_stream_socket.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.basic_stream_socket.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.lowest_layer.overload2 more...]]``


[section:overload1 basic_stream_socket::lowest_layer (1 of 2 overloads)]


['Inherited from basic_socket.]


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 [link boost_asio.reference.basic_socket `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:overload2 basic_stream_socket::lowest_layer (2 of 2 overloads)]


['Inherited from basic_socket.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.basic_socket `basic_socket`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type basic_stream_socket::lowest_layer_type]


['Inherited from basic_socket.]

[indexterm2 lowest_layer_type..basic_stream_socket] 
A [link boost_asio.reference.basic_socket `basic_socket`] is always the lowest layer. 


  typedef basic_socket< Protocol, StreamSocketService > 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_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_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. 

     Construct and open a basic_socket. 

     Construct a basic_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_socket on an existing native socket. 

     Move-construct a basic_socket from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket from another. ]
  ]
  
  [
    [[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.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[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]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket `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. 




[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections basic_stream_socket::max_connections]


['Inherited from socket_base.]

[indexterm2 max_connections..basic_stream_socket] 
The maximum length of the queue of pending incoming connections. 


  static const int max_connections = implementation_defined;



[endsect]



[section:message_do_not_route basic_stream_socket::message_do_not_route]


['Inherited from socket_base.]

[indexterm2 message_do_not_route..basic_stream_socket] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record basic_stream_socket::message_end_of_record]


['Inherited from socket_base.]

[indexterm2 message_end_of_record..basic_stream_socket] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags basic_stream_socket::message_flags]


['Inherited from socket_base.]

[indexterm2 message_flags..basic_stream_socket] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band basic_stream_socket::message_out_of_band]


['Inherited from socket_base.]

[indexterm2 message_out_of_band..basic_stream_socket] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek basic_stream_socket::message_peek]


['Inherited from socket_base.]

[indexterm2 message_peek..basic_stream_socket] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:native basic_stream_socket::native]


['Inherited from basic_socket.]

[indexterm2 native..basic_stream_socket] 
(Deprecated: Use `native_handle()`.) 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_handle basic_stream_socket::native_handle]


['Inherited from basic_socket.]

[indexterm2 native_handle..basic_stream_socket] 
Get the native socket representation. 


  native_handle_type native_handle();


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_handle_type basic_stream_socket::native_handle_type]

[indexterm2 native_handle_type..basic_stream_socket] 
The native representation of a socket. 


  typedef StreamSocketService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking basic_stream_socket::native_non_blocking]

[indexterm2 native_non_blocking..basic_stream_socket] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.basic_stream_socket.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  void ``[link boost_asio.reference.basic_stream_socket.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.native_non_blocking.overload3 more...]]``


[section:overload1 basic_stream_socket::native_non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native socket. This mode has no effect on the behaviour of the socket object's synchronous operations.


[heading Return Value]
      
`true` if the underlying socket is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the socket object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native socket.


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload2 basic_stream_socket::native_non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]



[section:overload3 basic_stream_socket::native_non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native socket. It has no effect on the behaviour of the socket object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying socket is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense.]]

]


[heading Example]
  
This function is intended to allow the encapsulation of arbitrary non-blocking system calls as asynchronous operations, in a way that is transparent to the user of the socket object. The following example illustrates how Linux's `sendfile` system call might be encapsulated: 

   template <typename Handler>
   struct sendfile_op
   {
     tcp::socket& sock_;
     int fd_;
     Handler handler_;
     off_t offset_;
     std::size_t total_bytes_transferred_;

     // Function call operator meeting WriteHandler requirements.
     // Used as the handler for the async_write_some operation.
     void operator()(boost::system::error_code ec, std::size_t)
     {
       // Put the underlying socket into non-blocking mode.
       if (!ec)
         if (!sock_.native_non_blocking())
           sock_.native_non_blocking(true, ec);

       if (!ec)
       {
         for (;;)
         {
           // Try the system call.
           errno = 0;
           int n = ::sendfile(sock_.native_handle(), fd_, &offset_, 65536);
           ec = boost::system::error_code(n < 0 ? errno : 0,
               boost::asio::error::get_system_category());
           total_bytes_transferred_ += ec ? 0 : n;

           // Retry operation immediately if interrupted by signal.
           if (ec == boost::asio::error::interrupted)
             continue;

           // Check if we need to run the operation again.
           if (ec == boost::asio::error::would_block
               || ec == boost::asio::error::try_again)
           {
             // We have to wait for the socket to become ready again.
             sock_.async_write_some(boost::asio::null_buffers(), *this);
             return;
           }

           if (ec || n == 0)
           {
             // An error occurred, or we have reached the end of the file.
             // Either way we must exit the loop so we can call the handler.
             break;
           }

           // Loop around to try calling sendfile again.
         }
       }

       // Pass result back to user's handler.
       handler_(ec, total_bytes_transferred_);
     }
   };

   template <typename Handler>
   void async_sendfile(tcp::socket& sock, int fd, Handler h)
   {
     sendfile_op<Handler> op = { sock, fd, h, 0, 0 };
     sock.async_write_some(boost::asio::null_buffers(), op);
   } 







[endsect]


[endsect]


[section:native_type basic_stream_socket::native_type]

[indexterm2 native_type..basic_stream_socket] 
(Deprecated: Use native\_handle\_type.) The native representation of a socket. 


  typedef StreamSocketService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking basic_stream_socket::non_blocking]

[indexterm2 non_blocking..basic_stream_socket] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.basic_stream_socket.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.non_blocking.overload3 more...]]``


[section:overload1 basic_stream_socket::non_blocking (1 of 3 overloads)]


['Inherited from basic_socket.]


Gets the non-blocking mode of the socket. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 basic_stream_socket::non_blocking (2 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 basic_stream_socket::non_blocking (3 of 3 overloads)]


['Inherited from basic_socket.]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the socket's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io basic_stream_socket::non_blocking_io]


['Inherited from socket_base.]

[indexterm2 non_blocking_io..basic_stream_socket] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:open basic_stream_socket::open]

[indexterm2 open..basic_stream_socket] 
Open the socket using the specified protocol. 


  void ``[link boost_asio.reference.basic_stream_socket.open.overload1 open]``(
      const protocol_type & protocol = protocol_type());
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.open.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.open.overload2 open]``(
      const protocol_type & protocol,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.open.overload2 more...]]``


[section:overload1 basic_stream_socket::open (1 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::open (2 of 2 overloads)]


['Inherited from basic_socket.]


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:operator_eq_ basic_stream_socket::operator=]

[indexterm2 operator=..basic_stream_socket] 
Move-assign a [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] from another. 


  basic_stream_socket & operator=(
      basic_stream_socket && other);


This assignment operator moves a stream socket from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`. 




[endsect]



[section:protocol_type basic_stream_socket::protocol_type]

[indexterm2 protocol_type..basic_stream_socket] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:read_some basic_stream_socket::read_some]

[indexterm2 read_some..basic_stream_socket] 
Read some data from the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.read_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.read_some.overload2 more...]]``


[section:overload1 basic_stream_socket::read_some (1 of 2 overloads)]


Read some data from the socket. 


  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 socket. 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.


[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.]]

]


[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: 

   socket.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. 




[endsect]



[section:overload2 basic_stream_socket::read_some (2 of 2 overloads)]


Read some data from the socket. 


  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 read data from the stream socket. 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.]]

]


[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:receive basic_stream_socket::receive]

[indexterm2 receive..basic_stream_socket] 
Receive some data on the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.receive.overload1 receive]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.receive.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.receive.overload2 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.receive.overload2 more...]]``


Receive some data on a connected socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.receive.overload3 receive]``(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.receive.overload3 more...]]``


[section:overload1 basic_stream_socket::receive (1 of 3 overloads)]


Receive some data on the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers);


This function is used to receive data on the stream socket. The function call will block until one or more bytes of data has been received successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be received.]]

]


[heading Return Value]
      
The number of bytes received.


[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.]]

]


[heading Remarks]
      
The receive operation may not receive 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 receive into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   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. 




[endsect]



[section:overload2 basic_stream_socket::receive (2 of 3 overloads)]


Receive some data on the socket. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags);


This function is used to receive data on the stream socket. The function call will block until one or more bytes of data has been received successfully, or until an error occurs.


[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.]]

]


[heading Return Value]
      
The number of bytes received.


[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.]]

]


[heading Remarks]
      
The receive operation may not receive 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 receive into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.receive(boost::asio::buffer(data, size), 0);


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:overload3 basic_stream_socket::receive (3 of 3 overloads)]


Receive some data on a connected socket. 


  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);


This function is used to receive data on the stream socket. The function call will block until one or more bytes of data has been received successfully, or until an error occurs.


[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.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes received. Returns 0 if an error occurred.


[heading Remarks]
      
The receive operation may not receive 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:receive_buffer_size basic_stream_socket::receive_buffer_size]


['Inherited from socket_base.]

[indexterm2 receive_buffer_size..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_low_watermark basic_stream_socket::receive_low_watermark]


['Inherited from socket_base.]

[indexterm2 receive_low_watermark..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:remote_endpoint basic_stream_socket::remote_endpoint]

[indexterm2 remote_endpoint..basic_stream_socket] 
Get the remote endpoint of the socket. 


  endpoint_type ``[link boost_asio.reference.basic_stream_socket.remote_endpoint.overload1 remote_endpoint]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.remote_endpoint.overload1 more...]]``

  endpoint_type ``[link boost_asio.reference.basic_stream_socket.remote_endpoint.overload2 remote_endpoint]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.remote_endpoint.overload2 more...]]``


[section:overload1 basic_stream_socket::remote_endpoint (1 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::remote_endpoint (2 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::reuse_address]


['Inherited from socket_base.]

[indexterm2 reuse_address..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:send basic_stream_socket::send]

[indexterm2 send..basic_stream_socket] 
Send some data on the socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.send.overload1 send]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.send.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.send.overload2 send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.send.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.send.overload3 send]``(
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.send.overload3 more...]]``


[section:overload1 basic_stream_socket::send (1 of 3 overloads)]


Send some data on the socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t send(
      const ConstBufferSequence & buffers);


This function is used to send data on the stream socket. The function call will block until one or more bytes of the data has been sent successfully, or an until error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be sent on the socket.]]

]


[heading Return Value]
      
The number of bytes sent.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The send 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 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. 




[endsect]



[section:overload2 basic_stream_socket::send (2 of 3 overloads)]


Send some data on the socket. 


  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 send data on the stream socket. The function call will block until one or more bytes of the data has been sent successfully, or an until error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be sent on the socket.]]

[[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.]]

]


[heading Remarks]
      
The send 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 send a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   socket.send(boost::asio::buffer(data, size), 0);


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:overload3 basic_stream_socket::send (3 of 3 overloads)]


Send some data on the 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);


This function is used to send data on the stream socket. The function call will block until one or more bytes of the data has been sent successfully, or an until error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be sent on the socket.]]

[[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. Returns 0 if an error occurred.


[heading Remarks]
      
The send 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]


[section:send_buffer_size basic_stream_socket::send_buffer_size]


['Inherited from socket_base.]

[indexterm2 send_buffer_size..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark basic_stream_socket::send_low_watermark]


['Inherited from socket_base.]

[indexterm2 send_low_watermark..basic_stream_socket] 
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();







[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_stream_socket::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_stream_socket] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_stream_socket::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_stream_socket] 
The type of the service that will be used to provide I/O operations. 


  typedef StreamSocketService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_stream_socket.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:set_option basic_stream_socket::set_option]

[indexterm2 set_option..basic_stream_socket] 
Set an option on the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.set_option.overload1 set_option]``(
      const SettableSocketOption & option);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.set_option.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.set_option.overload2 set_option]``(
      const SettableSocketOption & option,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.set_option.overload2 more...]]``


[section:overload1 basic_stream_socket::set_option (1 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::set_option (2 of 2 overloads)]


['Inherited from basic_socket.]


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_stream_socket::shutdown]

[indexterm2 shutdown..basic_stream_socket] 
Disable sends or receives on the socket. 


  void ``[link boost_asio.reference.basic_stream_socket.shutdown.overload1 shutdown]``(
      shutdown_type what);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.basic_stream_socket.shutdown.overload2 shutdown]``(
      shutdown_type what,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.shutdown.overload2 more...]]``


[section:overload1 basic_stream_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_stream_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_stream_socket::shutdown_type]


['Inherited from socket_base.]

[indexterm2 shutdown_type..basic_stream_socket] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..basic_stream_socket]
[indexterm2 shutdown_send..basic_stream_socket]
[indexterm2 shutdown_both..basic_stream_socket]

[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:write_some basic_stream_socket::write_some]

[indexterm2 write_some..basic_stream_socket] 
Write some data to the socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.write_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.basic_stream_socket.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_stream_socket.write_some.overload2 more...]]``


[section:overload1 basic_stream_socket::write_some (1 of 2 overloads)]


Write some data to the socket. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);


This function is used to write data to the stream socket. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the socket.]]

]


[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.]]

]


[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: 

   socket.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. 




[endsect]



[section:overload2 basic_stream_socket::write_some (2 of 2 overloads)]


Write some data to the socket. 


  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 write data to the stream socket. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the socket.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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]


[endsect]

[section:basic_streambuf basic_streambuf]


Automatically resizable buffer class based on std::streambuf. 


  template<
      typename Allocator = std::allocator<char>>
  class basic_streambuf :
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_streambuf.const_buffers_type [*const_buffers_type]]]
    [The type used to represent the input sequence as a list of buffers. ]
  
  ]

  [

    [[link boost_asio.reference.basic_streambuf.mutable_buffers_type [*mutable_buffers_type]]]
    [The type used to represent the output sequence as a list of buffers. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_streambuf.basic_streambuf [*basic_streambuf]]]
    [Construct a basic_streambuf object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.commit [*commit]]]
    [Move characters from the output sequence to the input sequence. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.consume [*consume]]]
    [Remove characters from the input sequence. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.data [*data]]]
    [Get a list of buffers that represents the input sequence. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.max_size [*max_size]]]
    [Get the maximum size of the basic_streambuf. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.prepare [*prepare]]]
    [Get a list of buffers that represents the output sequence, with the given size. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.size [*size]]]
    [Get the size of the input sequence. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_streambuf.overflow [*overflow]]]
    [Override std::streambuf behaviour. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.reserve [*reserve]]]
    []
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.underflow [*underflow]]]
    [Override std::streambuf behaviour. ]
  ]
  
]

The `basic_streambuf` class is derived from `std::streambuf` to associate the streambuf's input and output sequences with one or more character arrays. These character arrays are internal to the `basic_streambuf` object, but direct access to the array elements is provided to permit them to be used efficiently with I/O operations. Characters written to the output sequence of a `basic_streambuf` object are appended to the input sequence of the same object.

The `basic_streambuf` class's public interface is intended to permit the following implementation strategies:


* A single contiguous character array, which is reallocated as necessary to accommodate changes in the size of the character sequence. This is the implementation approach currently used in Asio.


* A sequence of one or more character arrays, where each array is of the same size. Additional character array objects are appended to the sequence to accommodate changes in the size of the character sequence.


* A sequence of one or more character arrays of varying sizes. Additional character array objects are appended to the sequence to accommodate changes in the size of the character sequence.

The constructor for [link boost_asio.reference.basic_streambuf `basic_streambuf`] accepts a `size_t` argument specifying the maximum of the sum of the sizes of the input sequence and output sequence. During the lifetime of the `basic_streambuf` object, the following invariant holds: 

   size() <= max_size()


Any member function that would, if successful, cause the invariant to be violated shall throw an exception of class `std::length_error`.

The constructor for `basic_streambuf` takes an Allocator argument. A copy of this argument is used for any memory allocation performed, by the constructor and by all member functions, during the lifetime of each `basic_streambuf` object.


[heading Examples]
  
Writing directly from an streambuf to a socket: 

   boost::asio::streambuf b;
   std::ostream os(&b);
   os << "Hello, World!\n";

   // try sending some data in input sequence
   size_t n = sock.send(b.data());

   b.consume(n); // sent data is removed from input sequence




Reading from a socket directly into a streambuf: 

   boost::asio::streambuf b;

   // reserve 512 bytes in output sequence
   boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(512);

   size_t n = sock.receive(bufs);

   // received data is "committed" from output sequence to input sequence
   b.commit(n);

   std::istream is(&b);
   std::string s;
   is >> s;




[heading Requirements]

[*Header: ][^boost/asio/basic_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:basic_streambuf basic_streambuf::basic_streambuf]

[indexterm2 basic_streambuf..basic_streambuf] 
Construct a [link boost_asio.reference.basic_streambuf `basic_streambuf`] object. 


  basic_streambuf(
      std::size_t maximum_size = (std::numeric_limits< std::size_t >::max)(),
      const Allocator & allocator = Allocator());


Constructs a streambuf with the specified maximum size. The initial size of the streambuf's input sequence is 0. 


[endsect]



[section:commit basic_streambuf::commit]

[indexterm2 commit..basic_streambuf] 
Move characters from the output sequence to the input sequence. 


  void commit(
      std::size_t n);


Appends `n` characters from the start of the output sequence to the input sequence. The beginning of the output sequence is advanced by `n` characters.

Requires a preceding call `prepare(x)` where `x >= n`, and no intervening operations that modify the input or output sequence.


[heading Exceptions]
    

[variablelist
  
[[std::length_error][If `n` is greater than the size of the output sequence. ]]

]




[endsect]



[section:const_buffers_type basic_streambuf::const_buffers_type]

[indexterm2 const_buffers_type..basic_streambuf] 
The type used to represent the input sequence as a list of buffers. 


  typedef implementation_defined const_buffers_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:consume basic_streambuf::consume]

[indexterm2 consume..basic_streambuf] 
Remove characters from the input sequence. 


  void consume(
      std::size_t n);


Removes `n` characters from the beginning of the input sequence.


[heading Exceptions]
    

[variablelist
  
[[std::length_error][If `n > size()`. ]]

]




[endsect]



[section:data basic_streambuf::data]

[indexterm2 data..basic_streambuf] 
Get a list of buffers that represents the input sequence. 


  const_buffers_type data() const;



[heading Return Value]
      
An object of type `const_buffers_type` that satisfies ConstBufferSequence requirements, representing all character arrays in the input sequence.


[heading Remarks]
      
The returned object is invalidated by any `basic_streambuf` member function that modifies the input sequence or output sequence. 




[endsect]



[section:max_size basic_streambuf::max_size]

[indexterm2 max_size..basic_streambuf] 
Get the maximum size of the [link boost_asio.reference.basic_streambuf `basic_streambuf`]. 


  std::size_t max_size() const;



[heading Return Value]
      
The allowed maximum of the sum of the sizes of the input sequence and output sequence. 




[endsect]



[section:mutable_buffers_type basic_streambuf::mutable_buffers_type]

[indexterm2 mutable_buffers_type..basic_streambuf] 
The type used to represent the output sequence as a list of buffers. 


  typedef implementation_defined mutable_buffers_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:overflow basic_streambuf::overflow]

[indexterm2 overflow..basic_streambuf] 
Override std::streambuf behaviour. 


  int_type overflow(
      int_type c);


Behaves according to the specification of `std::streambuf::overflow()`, with the specialisation that `std::length_error` is thrown if appending the character to the input sequence would require the condition `size() > max_size()` to be true. 


[endsect]



[section:prepare basic_streambuf::prepare]

[indexterm2 prepare..basic_streambuf] 
Get a list of buffers that represents the output sequence, with the given size. 


  mutable_buffers_type prepare(
      std::size_t n);


Ensures that the output sequence can accommodate `n` characters, reallocating character array objects as necessary.


[heading Return Value]
      
An object of type `mutable_buffers_type` that satisfies MutableBufferSequence requirements, representing character array objects at the start of the output sequence such that the sum of the buffer sizes is `n`.


[heading Exceptions]
    

[variablelist
  
[[std::length_error][If `size() + n > max_size()`.]]

]


[heading Remarks]
      
The returned object is invalidated by any `basic_streambuf` member function that modifies the input sequence or output sequence. 




[endsect]



[section:reserve basic_streambuf::reserve]

[indexterm2 reserve..basic_streambuf] 

  void reserve(
      std::size_t n);



[endsect]



[section:size basic_streambuf::size]

[indexterm2 size..basic_streambuf] 
Get the size of the input sequence. 


  std::size_t size() const;



[heading Return Value]
      
The size of the input sequence. The value is equal to that calculated for `s` in the following code: 

   size_t s = 0;
   const_buffers_type bufs = data();
   const_buffers_type::const_iterator i = bufs.begin();
   while (i != bufs.end())
   {
     const_buffer buf(*i++);
     s += buffer_size(buf);
   }







[endsect]



[section:underflow basic_streambuf::underflow]

[indexterm2 underflow..basic_streambuf] 
Override std::streambuf behaviour. 


  int_type underflow();


Behaves according to the specification of `std::streambuf::underflow()`. 


[endsect]



[endsect]

[section:basic_waitable_timer basic_waitable_timer]


Provides waitable timer functionality. 


  template<
      typename Clock,
      typename ``[link boost_asio.reference.WaitTraits WaitTraits]`` = boost::asio::wait_traits<Clock>,
      typename ``[link boost_asio.reference.WaitableTimerService WaitableTimerService]`` = waitable_timer_service<Clock, WaitTraits>>
  class basic_waitable_timer :
    public basic_io_object< WaitableTimerService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_waitable_timer.clock_type [*clock_type]]]
    [The clock type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.duration [*duration]]]
    [The duration type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.time_point [*time_point]]]
    [The time point type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.traits_type [*traits_type]]]
    [The wait traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.async_wait [*async_wait]]]
    [Start an asynchronous wait on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer [*basic_waitable_timer]]]
    [Constructor. 

     Constructor to set a particular expiry time as an absolute time. 

     Constructor to set a particular expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel [*cancel]]]
    [Cancel any asynchronous operations that are waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel_one [*cancel_one]]]
    [Cancels one asynchronous operation that is waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_at [*expires_at]]]
    [Get the timer's expiry time as an absolute time. 

     Set the timer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the timer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.wait [*wait]]]
    [Perform a blocking wait on the timer. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_waitable_timer.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.

Most applications will use the boost::asio::waitable\_timer typedef.


[heading Remarks]
      
This waitable timer functionality is for use with the C++11 standard library's `<chrono>` facility, or with the Boost.Chrono library.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Examples]
  
Performing a blocking wait: 

   // Construct a timer without setting an expiry time.
   boost::asio::waitable_timer timer(io_service);

   // Set an expiry time relative to now.
   timer.expires_from_now(boost::posix_time::seconds(5));

   // Wait for the timer to expire.
   timer.wait();





Performing an asynchronous wait: 

   void handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Timer expired.
     }
   }

   ...

   // Construct a timer with an absolute expiry time.
   boost::asio::waitable_timer timer(io_service,
       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));

   // Start an asynchronous wait.
   timer.async_wait(handler);





[heading Changing an active waitable_timer's expiry time]
  


Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:



   void on_some_event()
   {
     if (my_timer.expires_from_now(seconds(5)) > 0)
     {
       // We managed to cancel the timer. Start new asynchronous wait.
       my_timer.async_wait(on_timeout);
     }
     else
     {
       // Too late, timer has already expired!
     }
   }

   void on_timeout(const boost::system::error_code& e)
   {
     if (e != boost::asio::error::operation_aborted)
     {
       // Timer was not cancelled, take necessary action.
     }
   }





* The `boost::asio::basic_waitable_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.


* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`. 



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_wait basic_waitable_timer::async_wait]

[indexterm2 async_wait..basic_waitable_timer] 
Start an asynchronous wait on the timer. 


  template<
      typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
  void async_wait(
      WaitHandler handler);


This function may be used to initiate an asynchronous wait against the timer. It always returns immediately.

For each call to `async_wait()`, the supplied handler will be called exactly once. The handler will be called when:


* The timer has expired.


* The timer was cancelled, in which case the handler is passed the error code `boost::asio::error::operation_aborted`.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called when the timer expires. 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()`. ]]

]




[endsect]


[section:basic_waitable_timer basic_waitable_timer::basic_waitable_timer]

[indexterm2 basic_waitable_timer..basic_waitable_timer] 
Constructor. 


  explicit ``[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer.overload1 basic_waitable_timer]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.basic_waitable_timer.overload1 more...]]``


Constructor to set a particular expiry time as an absolute time. 


  ``[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer.overload2 basic_waitable_timer]``(
      boost::asio::io_service & io_service,
      const time_point & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.basic_waitable_timer.overload2 more...]]``


Constructor to set a particular expiry time relative to now. 


  ``[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer.overload3 basic_waitable_timer]``(
      boost::asio::io_service & io_service,
      const duration & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.basic_waitable_timer.overload3 more...]]``


[section:overload1 basic_waitable_timer::basic_waitable_timer (1 of 3 overloads)]


Constructor. 


  basic_waitable_timer(
      boost::asio::io_service & io_service);


This constructor creates a timer without setting an expiry time. The `expires_at()` or `expires_from_now()` functions must be called to set an expiry time before the timer can be waited on.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer. ]]

]




[endsect]



[section:overload2 basic_waitable_timer::basic_waitable_timer (2 of 3 overloads)]


Constructor to set a particular expiry time as an absolute time. 


  basic_waitable_timer(
      boost::asio::io_service & io_service,
      const time_point & expiry_time);


This constructor creates a timer and sets the expiry time.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer.]]

[[expiry_time][The expiry time to be used for the timer, expressed as an absolute time. ]]

]




[endsect]



[section:overload3 basic_waitable_timer::basic_waitable_timer (3 of 3 overloads)]


Constructor to set a particular expiry time relative to now. 


  basic_waitable_timer(
      boost::asio::io_service & io_service,
      const duration & expiry_time);


This constructor creates a timer and sets the expiry time.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer.]]

[[expiry_time][The expiry time to be used for the timer, relative to now. ]]

]




[endsect]


[endsect]

[section:cancel basic_waitable_timer::cancel]

[indexterm2 cancel..basic_waitable_timer] 
Cancel any asynchronous operations that are waiting on the timer. 


  std::size_t ``[link boost_asio.reference.basic_waitable_timer.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.cancel.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_waitable_timer.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.cancel.overload2 more...]]``


[section:overload1 basic_waitable_timer::cancel (1 of 2 overloads)]


Cancel any asynchronous operations that are waiting on the timer. 


  std::size_t cancel();


This function forces the completion of any pending asynchronous wait operations against the timer. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `cancel()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload2 basic_waitable_timer::cancel (2 of 2 overloads)]


Cancel any asynchronous operations that are waiting on the timer. 


  std::size_t cancel(
      boost::system::error_code & ec);


This function forces the completion of any pending asynchronous wait operations against the timer. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Remarks]
      
If the timer has already expired when `cancel()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:cancel_one basic_waitable_timer::cancel_one]

[indexterm2 cancel_one..basic_waitable_timer] 
Cancels one asynchronous operation that is waiting on the timer. 


  std::size_t ``[link boost_asio.reference.basic_waitable_timer.cancel_one.overload1 cancel_one]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.cancel_one.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.basic_waitable_timer.cancel_one.overload2 cancel_one]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.cancel_one.overload2 more...]]``


[section:overload1 basic_waitable_timer::cancel_one (1 of 2 overloads)]


Cancels one asynchronous operation that is waiting on the timer. 


  std::size_t cancel_one();


This function forces the completion of one pending asynchronous wait operation against the timer. Handlers are cancelled in FIFO order. The handler for the cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Return Value]
      
The number of asynchronous operations that were cancelled. That is, either 0 or 1.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `cancel_one()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload2 basic_waitable_timer::cancel_one (2 of 2 overloads)]


Cancels one asynchronous operation that is waiting on the timer. 


  std::size_t cancel_one(
      boost::system::error_code & ec);


This function forces the completion of one pending asynchronous wait operation against the timer. Handlers are cancelled in FIFO order. The handler for the cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.

Cancelling the timer does not change the expiry time.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled. That is, either 0 or 1.


[heading Remarks]
      
If the timer has already expired when `cancel_one()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]


[section:clock_type basic_waitable_timer::clock_type]

[indexterm2 clock_type..basic_waitable_timer] 
The clock type. 


  typedef Clock clock_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:duration basic_waitable_timer::duration]

[indexterm2 duration..basic_waitable_timer] 
The duration type of the clock. 


  typedef clock_type::duration duration;



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:expires_at basic_waitable_timer::expires_at]

[indexterm2 expires_at..basic_waitable_timer] 
Get the timer's expiry time as an absolute time. 


  time_point ``[link boost_asio.reference.basic_waitable_timer.expires_at.overload1 expires_at]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.expires_at.overload1 more...]]``


Set the timer's expiry time as an absolute time. 


  std::size_t ``[link boost_asio.reference.basic_waitable_timer.expires_at.overload2 expires_at]``(
      const time_point & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.expires_at.overload2 more...]]``

  std::size_t ``[link boost_asio.reference.basic_waitable_timer.expires_at.overload3 expires_at]``(
      const time_point & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.expires_at.overload3 more...]]``


[section:overload1 basic_waitable_timer::expires_at (1 of 3 overloads)]


Get the timer's expiry time as an absolute time. 


  time_point expires_at() const;


This function may be used to obtain the timer's current expiry time. Whether the timer has expired or not does not affect this value. 


[endsect]



[section:overload2 basic_waitable_timer::expires_at (2 of 3 overloads)]


Set the timer's expiry time as an absolute time. 


  std::size_t expires_at(
      const time_point & expiry_time);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `expires_at()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload3 basic_waitable_timer::expires_at (3 of 3 overloads)]


Set the timer's expiry time as an absolute time. 


  std::size_t expires_at(
      const time_point & expiry_time,
      boost::system::error_code & ec);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Remarks]
      
If the timer has already expired when `expires_at()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:expires_from_now basic_waitable_timer::expires_from_now]

[indexterm2 expires_from_now..basic_waitable_timer] 
Get the timer's expiry time relative to now. 


  duration ``[link boost_asio.reference.basic_waitable_timer.expires_from_now.overload1 expires_from_now]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.expires_from_now.overload1 more...]]``


Set the timer's expiry time relative to now. 


  std::size_t ``[link boost_asio.reference.basic_waitable_timer.expires_from_now.overload2 expires_from_now]``(
      const duration & expiry_time);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.expires_from_now.overload2 more...]]``

  std::size_t ``[link boost_asio.reference.basic_waitable_timer.expires_from_now.overload3 expires_from_now]``(
      const duration & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.expires_from_now.overload3 more...]]``


[section:overload1 basic_waitable_timer::expires_from_now (1 of 3 overloads)]


Get the timer's expiry time relative to now. 


  duration expires_from_now() const;


This function may be used to obtain the timer's current expiry time. Whether the timer has expired or not does not affect this value. 


[endsect]



[section:overload2 basic_waitable_timer::expires_from_now (2 of 3 overloads)]


Set the timer's expiry time relative to now. 


  std::size_t expires_from_now(
      const duration & expiry_time);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
If the timer has already expired when `expires_from_now()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]



[section:overload3 basic_waitable_timer::expires_from_now (3 of 3 overloads)]


Set the timer's expiry time relative to now. 


  std::size_t expires_from_now(
      const duration & expiry_time,
      boost::system::error_code & ec);


This function sets the expiry time. Any pending asynchronous wait operations will be cancelled. The handler for each cancelled operation will be invoked with the `boost::asio::error::operation_aborted` error code.


[heading Parameters]
    

[variablelist
  
[[expiry_time][The expiry time to be used for the timer.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of asynchronous operations that were cancelled.


[heading Remarks]
      
If the timer has already expired when `expires_from_now()` is called, then the handlers for asynchronous wait operations will:


* have already been invoked; or


* have been queued for invocation in the near future.

These handlers can no longer be cancelled, and therefore are passed an error code that indicates the successful completion of the wait operation. 


[endsect]


[endsect]

[section:get_implementation basic_waitable_timer::get_implementation]

[indexterm2 get_implementation..basic_waitable_timer] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.basic_waitable_timer.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.basic_waitable_timer.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.get_implementation.overload2 more...]]``


[section:overload1 basic_waitable_timer::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 basic_waitable_timer::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service basic_waitable_timer::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..basic_waitable_timer] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service basic_waitable_timer::get_service]

[indexterm2 get_service..basic_waitable_timer] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.basic_waitable_timer.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.basic_waitable_timer.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.get_service.overload2 more...]]``


[section:overload1 basic_waitable_timer::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 basic_waitable_timer::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation basic_waitable_timer::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..basic_waitable_timer] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type basic_waitable_timer::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..basic_waitable_timer] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service basic_waitable_timer::service]


['Inherited from basic_io_object.]

[indexterm2 service..basic_waitable_timer] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type basic_waitable_timer::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..basic_waitable_timer] 
The type of the service that will be used to provide I/O operations. 


  typedef WaitableTimerService service_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:time_point basic_waitable_timer::time_point]

[indexterm2 time_point..basic_waitable_timer] 
The time point type of the clock. 


  typedef clock_type::time_point time_point;



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:traits_type basic_waitable_timer::traits_type]

[indexterm2 traits_type..basic_waitable_timer] 
The wait traits type. 


  typedef WaitTraits traits_type;



[heading Requirements]

[*Header: ][^boost/asio/basic_waitable_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:wait basic_waitable_timer::wait]

[indexterm2 wait..basic_waitable_timer] 
Perform a blocking wait on the timer. 


  void ``[link boost_asio.reference.basic_waitable_timer.wait.overload1 wait]``();
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.wait.overload1 more...]]``

  void ``[link boost_asio.reference.basic_waitable_timer.wait.overload2 wait]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.basic_waitable_timer.wait.overload2 more...]]``


[section:overload1 basic_waitable_timer::wait (1 of 2 overloads)]


Perform a blocking wait on the timer. 


  void wait();


This function is used to wait for the timer to expire. This function blocks and does not return until the timer has expired.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 basic_waitable_timer::wait (2 of 2 overloads)]


Perform a blocking wait on the timer. 


  void wait(
      boost::system::error_code & ec);


This function is used to wait for the timer to expire. This function blocks and does not return until the timer has expired.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[endsect]

[section:buffer buffer]

[indexterm1 buffer] 
The `boost::asio::buffer` function is used to create a buffer object to represent raw memory, an array of POD elements, a vector of POD elements, or a std::string. 

      
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload1 buffer]``(
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload1 more...]]``

  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload2 buffer]``(
      const mutable_buffer & b,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload2 more...]]``

  const_buffers_1 ``[link boost_asio.reference.buffer.overload3 buffer]``(
      const const_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload3 more...]]``

  const_buffers_1 ``[link boost_asio.reference.buffer.overload4 buffer]``(
      const const_buffer & b,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload4 more...]]``

  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload5 buffer]``(
      void * data,
      std::size_t size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload5 more...]]``

  const_buffers_1 ``[link boost_asio.reference.buffer.overload6 buffer]``(
      const void * data,
      std::size_t size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload6 more...]]``

  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload7 buffer]``(
      PodType (&data)[N]);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload7 more...]]``

  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload8 buffer]``(
      PodType (&data)[N],
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload8 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload9 buffer]``(
      const PodType (&data)[N]);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload9 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload10 buffer]``(
      const PodType (&data)[N],
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload10 more...]]``

  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload11 buffer]``(
      boost::array< PodType, N > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload11 more...]]``

  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload12 buffer]``(
      boost::array< PodType, N > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload12 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload13 buffer]``(
      boost::array< const PodType, N > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload13 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload14 buffer]``(
      boost::array< const PodType, N > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload14 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload15 buffer]``(
      const boost::array< PodType, N > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload15 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload16 buffer]``(
      const boost::array< PodType, N > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload16 more...]]``

  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload17 buffer]``(
      std::array< PodType, N > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload17 more...]]``

  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload18 buffer]``(
      std::array< PodType, N > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload18 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload19 buffer]``(
      std::array< const PodType, N > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload19 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload20 buffer]``(
      std::array< const PodType, N > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload20 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload21 buffer]``(
      const std::array< PodType, N > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload21 more...]]``

  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload22 buffer]``(
      const std::array< PodType, N > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload22 more...]]``

  template<
      typename PodType,
      typename Allocator>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload23 buffer]``(
      std::vector< PodType, Allocator > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload23 more...]]``

  template<
      typename PodType,
      typename Allocator>
  mutable_buffers_1 ``[link boost_asio.reference.buffer.overload24 buffer]``(
      std::vector< PodType, Allocator > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload24 more...]]``

  template<
      typename PodType,
      typename Allocator>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload25 buffer]``(
      const std::vector< PodType, Allocator > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload25 more...]]``

  template<
      typename PodType,
      typename Allocator>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload26 buffer]``(
      const std::vector< PodType, Allocator > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload26 more...]]``

  template<
      typename Elem,
      typename Traits,
      typename Allocator>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload27 buffer]``(
      const std::basic_string< Elem, Traits, Allocator > & data);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload27 more...]]``

  template<
      typename Elem,
      typename Traits,
      typename Allocator>
  const_buffers_1 ``[link boost_asio.reference.buffer.overload28 buffer]``(
      const std::basic_string< Elem, Traits, Allocator > & data,
      std::size_t max_size_in_bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer.overload28 more...]]``

A buffer object represents a contiguous region of memory as a 2-tuple consisting of a pointer and size in bytes. A tuple of the form `{void*, size_t}` specifies a mutable (modifiable) region of memory. Similarly, a tuple of the form `{const void*, size_t}` specifies a const (non-modifiable) region of memory. These two forms correspond to the classes [link boost_asio.reference.mutable_buffer `mutable_buffer`] and [link boost_asio.reference.const_buffer `const_buffer`], respectively. To mirror C++'s conversion rules, a [link boost_asio.reference.mutable_buffer `mutable_buffer`] is implicitly convertible to a [link boost_asio.reference.const_buffer `const_buffer`], and the opposite conversion is not permitted.

The simplest use case involves reading or writing a single buffer of a specified size:



   sock.send(boost::asio::buffer(data, size)); 




In the above example, the return value of `boost::asio::buffer` meets the requirements of the ConstBufferSequence concept so that it may be directly passed to the socket's write function. A buffer created for modifiable memory also meets the requirements of the MutableBufferSequence concept.

An individual buffer may be created from a builtin array, std::vector, std::array or boost::array of POD elements. This helps prevent buffer overruns by automatically determining the size of the buffer:



   char d1[128];
   size_t bytes_transferred = sock.receive(boost::asio::buffer(d1));

   std::vector<char> d2(128);
   bytes_transferred = sock.receive(boost::asio::buffer(d2));

   std::array<char, 128> d3;
   bytes_transferred = sock.receive(boost::asio::buffer(d3));

   boost::array<char, 128> d4;
   bytes_transferred = sock.receive(boost::asio::buffer(d4)); 




In all three cases above, the buffers created are exactly 128 bytes long. Note that a vector is [*never] automatically resized when creating or using a buffer. The buffer size is determined using the vector's `size()` member function, and not its capacity.


[heading Accessing Buffer Contents]
  


The contents of a buffer may be accessed using the [link boost_asio.reference.buffer_size `buffer_size`]  and [link boost_asio.reference.buffer_cast `buffer_cast`]  functions:



   boost::asio::mutable_buffer b1 = ...;
   std::size_t s1 = boost::asio::buffer_size(b1);
   unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);

   boost::asio::const_buffer b2 = ...;
   std::size_t s2 = boost::asio::buffer_size(b2);
   const void* p2 = boost::asio::buffer_cast<const void*>(b2); 




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered.

For convenience, the [link boost_asio.reference.buffer_size `buffer_size`]  function also works on buffer sequences (that is, types meeting the ConstBufferSequence or MutableBufferSequence type requirements). In this case, the function returns the total size of all buffers in the sequence.


[heading Buffer Copying]
  


The [link boost_asio.reference.buffer_copy `buffer_copy`]  function may be used to copy raw bytes between individual buffers and buffer sequences.

In particular, when used with the [link boost_asio.reference.buffer_size `buffer_size`] , the [link boost_asio.reference.buffer_copy `buffer_copy`]  function can be used to linearise a sequence of buffers. For example:



   vector<const_buffer> buffers = ...;

   vector<unsigned char> data(boost::asio::buffer_size(buffers));
   boost::asio::buffer_copy(boost::asio::buffer(data), buffers); 





[heading Buffer Invalidation]
  


A buffer object does not have any ownership of the memory it refers to. It is the responsibility of the application to ensure the memory region remains valid until it is no longer required for an I/O operation. When the memory is no longer available, the buffer is said to have been invalidated.

For the `boost::asio::buffer` overloads that accept an argument of type std::vector, the buffer objects returned are invalidated by any vector operation that also invalidates all references, pointers and iterators referring to the elements in the sequence (C++ Std, 23.2.4)

For the `boost::asio::buffer` overloads that accept an argument of type std::basic\_string, the buffer objects returned are invalidated according to the rules defined for invalidation of references, pointers and iterators referring to elements of the sequence (C++ Std, 21.3).


[heading Buffer Arithmetic]
  


Buffer objects may be manipulated using simple arithmetic in a safe way which helps prevent buffer overruns. Consider an array initialised as follows:



   boost::array<char, 6> a = { 'a', 'b', 'c', 'd', 'e' }; 




A buffer object `b1` created using:



   b1 = boost::asio::buffer(a); 




represents the entire array, `{ 'a', 'b', 'c', 'd', 'e' }`. An optional second argument to the `boost::asio::buffer` function may be used to limit the size, in bytes, of the buffer:



   b2 = boost::asio::buffer(a, 3); 




such that `b2` represents the data `{ 'a', 'b', 'c' }`. Even if the size argument exceeds the actual size of the array, the size of the buffer object created will be limited to the array size.

An offset may be applied to an existing buffer to create a new one:



   b3 = b1 + 2; 




where `b3` will set to represent `{ 'c', 'd', 'e' }`. If the offset exceeds the size of the existing buffer, the newly created buffer will be empty.

Both an offset and size may be specified to create a buffer that corresponds to a specific range of bytes within an existing buffer:



   b4 = boost::asio::buffer(b1 + 1, 3); 




so that `b4` will refer to the bytes `{ 'b', 'c', 'd' }`.


[heading Buffers and Scatter-Gather I/O]
  


To read or write using multiple buffers (i.e. scatter-gather I/O), multiple buffer objects may be assigned into a container that supports the MutableBufferSequence (for read) or ConstBufferSequence (for write) concepts:



   char d1[128];
   std::vector<char> d2(128);
   boost::array<char, 128> d3;

   boost::array<mutable_buffer, 3> bufs1 = {
     boost::asio::buffer(d1),
     boost::asio::buffer(d2),
     boost::asio::buffer(d3) };
   bytes_transferred = sock.receive(bufs1);

   std::vector<const_buffer> bufs2;
   bufs2.push_back(boost::asio::buffer(d1));
   bufs2.push_back(boost::asio::buffer(d2));
   bufs2.push_back(boost::asio::buffer(d3));
   bytes_transferred = sock.send(bufs2); 




[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 buffer (1 of 28 overloads)]


Create a new modifiable buffer from an existing buffer. 


  mutable_buffers_1 buffer(
      const mutable_buffer & b);



[heading Return Value]
      
`mutable_buffers_1(b)`. 




[endsect]



[section:overload2 buffer (2 of 28 overloads)]


Create a new modifiable buffer from an existing buffer. 


  mutable_buffers_1 buffer(
      const mutable_buffer & b,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       buffer_cast<void*>(b),
       min(buffer_size(b), max_size_in_bytes)); 







[endsect]



[section:overload3 buffer (3 of 28 overloads)]


Create a new non-modifiable buffer from an existing buffer. 


  const_buffers_1 buffer(
      const const_buffer & b);



[heading Return Value]
      
`const_buffers_1(b)`. 




[endsect]



[section:overload4 buffer (4 of 28 overloads)]


Create a new non-modifiable buffer from an existing buffer. 


  const_buffers_1 buffer(
      const const_buffer & b,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       buffer_cast<const void*>(b),
       min(buffer_size(b), max_size_in_bytes)); 







[endsect]



[section:overload5 buffer (5 of 28 overloads)]


Create a new modifiable buffer that represents the given memory range. 


  mutable_buffers_1 buffer(
      void * data,
      std::size_t size_in_bytes);



[heading Return Value]
      
`mutable_buffers_1(data, size_in_bytes)`. 




[endsect]



[section:overload6 buffer (6 of 28 overloads)]


Create a new non-modifiable buffer that represents the given memory range. 


  const_buffers_1 buffer(
      const void * data,
      std::size_t size_in_bytes);



[heading Return Value]
      
`const_buffers_1(data, size_in_bytes)`. 




[endsect]



[section:overload7 buffer (7 of 28 overloads)]


Create a new modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 buffer(
      PodType (&data)[N]);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       static_cast<void*>(data),
       N * sizeof(PodType)); 







[endsect]



[section:overload8 buffer (8 of 28 overloads)]


Create a new modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 buffer(
      PodType (&data)[N],
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       static_cast<void*>(data),
       min(N * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload9 buffer (9 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      const PodType (&data)[N]);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       static_cast<const void*>(data),
       N * sizeof(PodType)); 







[endsect]



[section:overload10 buffer (10 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      const PodType (&data)[N],
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       static_cast<const void*>(data),
       min(N * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload11 buffer (11 of 28 overloads)]


Create a new modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 buffer(
      boost::array< PodType, N > & data);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       data.data(),
       data.size() * sizeof(PodType)); 







[endsect]



[section:overload12 buffer (12 of 28 overloads)]


Create a new modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 buffer(
      boost::array< PodType, N > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       data.data(),
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload13 buffer (13 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      boost::array< const PodType, N > & data);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       data.size() * sizeof(PodType)); 







[endsect]



[section:overload14 buffer (14 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      boost::array< const PodType, N > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload15 buffer (15 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      const boost::array< PodType, N > & data);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       data.size() * sizeof(PodType)); 







[endsect]



[section:overload16 buffer (16 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      const boost::array< PodType, N > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload17 buffer (17 of 28 overloads)]


Create a new modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 buffer(
      std::array< PodType, N > & data);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       data.data(),
       data.size() * sizeof(PodType)); 







[endsect]



[section:overload18 buffer (18 of 28 overloads)]


Create a new modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  mutable_buffers_1 buffer(
      std::array< PodType, N > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       data.data(),
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload19 buffer (19 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      std::array< const PodType, N > & data);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       data.size() * sizeof(PodType)); 







[endsect]



[section:overload20 buffer (20 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      std::array< const PodType, N > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload21 buffer (21 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      const std::array< PodType, N > & data);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       data.size() * sizeof(PodType)); 







[endsect]



[section:overload22 buffer (22 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD array. 


  template<
      typename PodType,
      std::size_t N>
  const_buffers_1 buffer(
      const std::array< PodType, N > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 







[endsect]



[section:overload23 buffer (23 of 28 overloads)]


Create a new modifiable buffer that represents the given POD vector. 


  template<
      typename PodType,
      typename Allocator>
  mutable_buffers_1 buffer(
      std::vector< PodType, Allocator > & data);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       data.size() ? &data[0] : 0,
       data.size() * sizeof(PodType)); 





[heading Remarks]
      
The buffer is invalidated by any vector operation that would also invalidate iterators. 




[endsect]



[section:overload24 buffer (24 of 28 overloads)]


Create a new modifiable buffer that represents the given POD vector. 


  template<
      typename PodType,
      typename Allocator>
  mutable_buffers_1 buffer(
      std::vector< PodType, Allocator > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.mutable_buffers_1 `mutable_buffers_1`] value equivalent to: 

   mutable_buffers_1(
       data.size() ? &data[0] : 0,
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 





[heading Remarks]
      
The buffer is invalidated by any vector operation that would also invalidate iterators. 




[endsect]



[section:overload25 buffer (25 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD vector. 


  template<
      typename PodType,
      typename Allocator>
  const_buffers_1 buffer(
      const std::vector< PodType, Allocator > & data);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.size() ? &data[0] : 0,
       data.size() * sizeof(PodType)); 





[heading Remarks]
      
The buffer is invalidated by any vector operation that would also invalidate iterators. 




[endsect]



[section:overload26 buffer (26 of 28 overloads)]


Create a new non-modifiable buffer that represents the given POD vector. 


  template<
      typename PodType,
      typename Allocator>
  const_buffers_1 buffer(
      const std::vector< PodType, Allocator > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.size() ? &data[0] : 0,
       min(data.size() * sizeof(PodType), max_size_in_bytes)); 





[heading Remarks]
      
The buffer is invalidated by any vector operation that would also invalidate iterators. 




[endsect]



[section:overload27 buffer (27 of 28 overloads)]


Create a new non-modifiable buffer that represents the given string. 


  template<
      typename Elem,
      typename Traits,
      typename Allocator>
  const_buffers_1 buffer(
      const std::basic_string< Elem, Traits, Allocator > & data);



[heading Return Value]
      
`const_buffers_1(data.data(), data.size() * sizeof(Elem))`.


[heading Remarks]
      
The buffer is invalidated by any non-const operation called on the given string object. 




[endsect]



[section:overload28 buffer (28 of 28 overloads)]


Create a new non-modifiable buffer that represents the given string. 


  template<
      typename Elem,
      typename Traits,
      typename Allocator>
  const_buffers_1 buffer(
      const std::basic_string< Elem, Traits, Allocator > & data,
      std::size_t max_size_in_bytes);



[heading Return Value]
      
A [link boost_asio.reference.const_buffers_1 `const_buffers_1`] value equivalent to: 

   const_buffers_1(
       data.data(),
       min(data.size() * sizeof(Elem), max_size_in_bytes)); 





[heading Remarks]
      
The buffer is invalidated by any non-const operation called on the given string object. 




[endsect]


[endsect]

[section:buffer_cast buffer_cast]

[indexterm1 buffer_cast] 
The `boost::asio::buffer_cast` function is used to obtain a pointer to the underlying memory region associated with a buffer. 

      
  template<
      typename PointerToPodType>
  PointerToPodType ``[link boost_asio.reference.buffer_cast.overload1 buffer_cast]``(
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_cast.overload1 more...]]``

  template<
      typename PointerToPodType>
  PointerToPodType ``[link boost_asio.reference.buffer_cast.overload2 buffer_cast]``(
      const const_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_cast.overload2 more...]]``


[heading Examples:]
  


To access the memory of a non-modifiable buffer, use: 

   boost::asio::const_buffer b1 = ...;
   const unsigned char* p1 = boost::asio::buffer_cast<const unsigned char*>(b1);




To access the memory of a modifiable buffer, use: 

   boost::asio::mutable_buffer b2 = ...;
   unsigned char* p2 = boost::asio::buffer_cast<unsigned char*>(b2);




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered. 

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 buffer_cast (1 of 2 overloads)]


Cast a non-modifiable buffer to a specified pointer to POD type. 


  template<
      typename PointerToPodType>
  PointerToPodType buffer_cast(
      const mutable_buffer & b);



[endsect]



[section:overload2 buffer_cast (2 of 2 overloads)]


Cast a non-modifiable buffer to a specified pointer to POD type. 


  template<
      typename PointerToPodType>
  PointerToPodType buffer_cast(
      const const_buffer & b);



[endsect]


[endsect]

[section:buffer_copy buffer_copy]

[indexterm1 buffer_copy] 
The `boost::asio::buffer_copy` function is used to copy bytes from a source buffer (or buffer sequence) to a target buffer (or buffer sequence). 

      
  std::size_t ``[link boost_asio.reference.buffer_copy.overload1 buffer_copy]``(
      const mutable_buffer & target,
      const const_buffer & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload2 buffer_copy]``(
      const mutable_buffer & target,
      const const_buffers_1 & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload2 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload3 buffer_copy]``(
      const mutable_buffer & target,
      const mutable_buffer & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload3 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload4 buffer_copy]``(
      const mutable_buffer & target,
      const mutable_buffers_1 & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload5 buffer_copy]``(
      const mutable_buffer & target,
      const ConstBufferSequence & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload5 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload6 buffer_copy]``(
      const mutable_buffers_1 & target,
      const const_buffer & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload6 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload7 buffer_copy]``(
      const mutable_buffers_1 & target,
      const const_buffers_1 & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload7 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload8 buffer_copy]``(
      const mutable_buffers_1 & target,
      const mutable_buffer & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload8 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload9 buffer_copy]``(
      const mutable_buffers_1 & target,
      const mutable_buffers_1 & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload9 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload10 buffer_copy]``(
      const mutable_buffers_1 & target,
      const ConstBufferSequence & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload10 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload11 buffer_copy]``(
      const MutableBufferSequence & target,
      const const_buffer & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload11 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload12 buffer_copy]``(
      const MutableBufferSequence & target,
      const const_buffers_1 & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload12 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload13 buffer_copy]``(
      const MutableBufferSequence & target,
      const mutable_buffer & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload13 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload14 buffer_copy]``(
      const MutableBufferSequence & target,
      const mutable_buffers_1 & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload14 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload15 buffer_copy]``(
      const MutableBufferSequence & target,
      const ConstBufferSequence & source);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload15 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload16 buffer_copy]``(
      const mutable_buffer & target,
      const const_buffer & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload16 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload17 buffer_copy]``(
      const mutable_buffer & target,
      const const_buffers_1 & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload17 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload18 buffer_copy]``(
      const mutable_buffer & target,
      const mutable_buffer & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload18 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload19 buffer_copy]``(
      const mutable_buffer & target,
      const mutable_buffers_1 & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload19 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload20 buffer_copy]``(
      const mutable_buffer & target,
      const ConstBufferSequence & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload20 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload21 buffer_copy]``(
      const mutable_buffers_1 & target,
      const const_buffer & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload21 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload22 buffer_copy]``(
      const mutable_buffers_1 & target,
      const const_buffers_1 & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload22 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload23 buffer_copy]``(
      const mutable_buffers_1 & target,
      const mutable_buffer & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload23 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_copy.overload24 buffer_copy]``(
      const mutable_buffers_1 & target,
      const mutable_buffers_1 & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload24 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload25 buffer_copy]``(
      const mutable_buffers_1 & target,
      const ConstBufferSequence & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload25 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload26 buffer_copy]``(
      const MutableBufferSequence & target,
      const const_buffer & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload26 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload27 buffer_copy]``(
      const MutableBufferSequence & target,
      const const_buffers_1 & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload27 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload28 buffer_copy]``(
      const MutableBufferSequence & target,
      const mutable_buffer & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload28 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload29 buffer_copy]``(
      const MutableBufferSequence & target,
      const mutable_buffers_1 & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload29 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffer_copy.overload30 buffer_copy]``(
      const MutableBufferSequence & target,
      const ConstBufferSequence & source,
      std::size_t max_bytes_to_copy);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_copy.overload30 more...]]``

The `buffer_copy` function is available in two forms:


* A 2-argument form: `buffer_copy(target, source)` 


* A 3-argument form: `buffer_copy(target, source, max_bytes_to_copy)` 

Both forms return the number of bytes actually copied. The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `If` specified, `max_bytes_to_copy`.

This prevents buffer overflow, regardless of the buffer sizes used in the copy operation. 

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 buffer_copy (1 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const const_buffer & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload2 buffer_copy (2 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const const_buffers_1 & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload3 buffer_copy (3 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const mutable_buffer & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload4 buffer_copy (4 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const mutable_buffers_1 & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload5 buffer_copy (5 of 30 overloads)]


Copies bytes from a source buffer sequence to a target buffer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t buffer_copy(
      const mutable_buffer & target,
      const ConstBufferSequence & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer sequence representing the memory regions from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload6 buffer_copy (6 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const const_buffer & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload7 buffer_copy (7 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const const_buffers_1 & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload8 buffer_copy (8 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const mutable_buffer & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload9 buffer_copy (9 of 30 overloads)]


Copies bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const mutable_buffers_1 & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload10 buffer_copy (10 of 30 overloads)]


Copies bytes from a source buffer sequence to a target buffer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const ConstBufferSequence & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer sequence representing the memory regions from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload11 buffer_copy (11 of 30 overloads)]


Copies bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const const_buffer & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload12 buffer_copy (12 of 30 overloads)]


Copies bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const const_buffers_1 & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload13 buffer_copy (13 of 30 overloads)]


Copies bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const mutable_buffer & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload14 buffer_copy (14 of 30 overloads)]


Copies bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const mutable_buffers_1 & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload15 buffer_copy (15 of 30 overloads)]


Copies bytes from a source buffer sequence to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const ConstBufferSequence & source);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A non-modifiable buffer sequence representing the memory regions from which the bytes will be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 




[endsect]



[section:overload16 buffer_copy (16 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const const_buffer & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload17 buffer_copy (17 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const const_buffers_1 & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload18 buffer_copy (18 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const mutable_buffer & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload19 buffer_copy (19 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffer & target,
      const mutable_buffers_1 & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload20 buffer_copy (20 of 30 overloads)]


Copies a limited number of bytes from a source buffer sequence to a target buffer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t buffer_copy(
      const mutable_buffer & target,
      const ConstBufferSequence & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer sequence representing the memory regions from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload21 buffer_copy (21 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const const_buffer & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload22 buffer_copy (22 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const const_buffers_1 & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload23 buffer_copy (23 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const mutable_buffer & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload24 buffer_copy (24 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer. 


  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const mutable_buffers_1 & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload25 buffer_copy (25 of 30 overloads)]


Copies a limited number of bytes from a source buffer sequence to a target buffer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t buffer_copy(
      const mutable_buffers_1 & target,
      const ConstBufferSequence & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer representing the memory region to which the bytes will be copied.]]

[[source][A non-modifiable buffer sequence representing the memory regions from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload26 buffer_copy (26 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const const_buffer & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload27 buffer_copy (27 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const const_buffers_1 & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A non-modifiable buffer representing the memory region from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload28 buffer_copy (28 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const mutable_buffer & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload29 buffer_copy (29 of 30 overloads)]


Copies a limited number of bytes from a source buffer to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const mutable_buffers_1 & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A modifiable buffer representing the memory region from which the bytes will be copied. The contents of the source buffer will not be modified.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]



[section:overload30 buffer_copy (30 of 30 overloads)]


Copies a limited number of bytes from a source buffer sequence to a target buffer sequence. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t buffer_copy(
      const MutableBufferSequence & target,
      const ConstBufferSequence & source,
      std::size_t max_bytes_to_copy);



[heading Parameters]
    

[variablelist
  
[[target][A modifiable buffer sequence representing the memory regions to which the bytes will be copied.]]

[[source][A non-modifiable buffer sequence representing the memory regions from which the bytes will be copied.]]

[[max_bytes_to_copy][The maximum number of bytes to be copied.]]

]


[heading Return Value]
      
The number of bytes copied.


[heading Remarks]
      
The number of bytes copied is the lesser of:


* `buffer_size(target)` 


* `buffer_size(source)` 


* `max_bytes_to_copy` 




[endsect]


[endsect]

[section:buffer_size buffer_size]

[indexterm1 buffer_size] 
The `boost::asio::buffer_size` function determines the total number of bytes in a buffer or buffer sequence. 

      
  std::size_t ``[link boost_asio.reference.buffer_size.overload1 buffer_size]``(
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_size.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_size.overload2 buffer_size]``(
      const mutable_buffers_1 & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_size.overload2 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_size.overload3 buffer_size]``(
      const const_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_size.overload3 more...]]``

  std::size_t ``[link boost_asio.reference.buffer_size.overload4 buffer_size]``(
      const const_buffers_1 & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_size.overload4 more...]]``

  template<
      typename BufferSequence>
  std::size_t ``[link boost_asio.reference.buffer_size.overload5 buffer_size]``(
      const BufferSequence & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffer_size.overload5 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 buffer_size (1 of 5 overloads)]


Get the number of bytes in a modifiable buffer. 


  std::size_t buffer_size(
      const mutable_buffer & b);



[endsect]



[section:overload2 buffer_size (2 of 5 overloads)]


Get the number of bytes in a modifiable buffer. 


  std::size_t buffer_size(
      const mutable_buffers_1 & b);



[endsect]



[section:overload3 buffer_size (3 of 5 overloads)]


Get the number of bytes in a non-modifiable buffer. 


  std::size_t buffer_size(
      const const_buffer & b);



[endsect]



[section:overload4 buffer_size (4 of 5 overloads)]


Get the number of bytes in a non-modifiable buffer. 


  std::size_t buffer_size(
      const const_buffers_1 & b);



[endsect]



[section:overload5 buffer_size (5 of 5 overloads)]


Get the total number of bytes in a buffer sequence. 


  template<
      typename BufferSequence>
  std::size_t buffer_size(
      const BufferSequence & b);


The `BufferSequence` template parameter may meet either of the `ConstBufferSequence` or `MutableBufferSequence` type requirements. 


[endsect]


[endsect]

[section:buffered_read_stream buffered_read_stream]


Adds buffering to the read-related operations of a stream. 


  template<
      typename Stream>
  class buffered_read_stream :
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.buffered_read_stream.lowest_layer_type [*lowest_layer_type]]]
    [The type of the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.buffered_read_stream.next_layer_type [*next_layer_type]]]
    [The type of the next layer. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffered_read_stream.async_fill [*async_fill]]]
    [Start an asynchronous fill. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.async_read_some [*async_read_some]]]
    [Start an asynchronous read. The buffer into which the data will be read must be valid for the lifetime of the asynchronous operation. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.async_write_some [*async_write_some]]]
    [Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.buffered_read_stream [*buffered_read_stream]]]
    [Construct, passing the specified argument to initialise the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.close [*close]]]
    [Close the stream. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.fill [*fill]]]
    [Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation. Throws an exception on failure. 

     Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.in_avail [*in_avail]]]
    [Determine the amount of data that may be read without blocking. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.next_layer [*next_layer]]]
    [Get a reference to the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.peek [*peek]]]
    [Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 

     Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.read_some [*read_some]]]
    [Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 

     Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_read_stream.write_some [*write_some]]]
    [Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 

     Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffered_read_stream.default_buffer_size [*default_buffer_size]]]
    [The default buffer size. ]
  ]

]

The [link boost_asio.reference.buffered_read_stream `buffered_read_stream`] class template can be used to add buffering to the synchronous and asynchronous read operations of a stream.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/buffered_read_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_fill buffered_read_stream::async_fill]

[indexterm2 async_fill..buffered_read_stream] 
Start an asynchronous fill. 


  template<
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_fill(
      ReadHandler handler);



[endsect]



[section:async_read_some buffered_read_stream::async_read_some]

[indexterm2 async_read_some..buffered_read_stream] 
Start an asynchronous read. The buffer into which the data will be read must be valid for the lifetime of the asynchronous operation. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some buffered_read_stream::async_write_some]

[indexterm2 async_write_some..buffered_read_stream] 
Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);



[endsect]


[section:buffered_read_stream buffered_read_stream::buffered_read_stream]

[indexterm2 buffered_read_stream..buffered_read_stream] 
Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  explicit ``[link boost_asio.reference.buffered_read_stream.buffered_read_stream.overload1 buffered_read_stream]``(
      Arg & a);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.buffered_read_stream.overload1 more...]]``

  template<
      typename Arg>
  ``[link boost_asio.reference.buffered_read_stream.buffered_read_stream.overload2 buffered_read_stream]``(
      Arg & a,
      std::size_t buffer_size);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.buffered_read_stream.overload2 more...]]``


[section:overload1 buffered_read_stream::buffered_read_stream (1 of 2 overloads)]


Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  buffered_read_stream(
      Arg & a);



[endsect]



[section:overload2 buffered_read_stream::buffered_read_stream (2 of 2 overloads)]


Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  buffered_read_stream(
      Arg & a,
      std::size_t buffer_size);



[endsect]


[endsect]

[section:close buffered_read_stream::close]

[indexterm2 close..buffered_read_stream] 
Close the stream. 


  void ``[link boost_asio.reference.buffered_read_stream.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.buffered_read_stream.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.close.overload2 more...]]``


[section:overload1 buffered_read_stream::close (1 of 2 overloads)]


Close the stream. 


  void close();



[endsect]



[section:overload2 buffered_read_stream::close (2 of 2 overloads)]


Close the stream. 


  boost::system::error_code close(
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:default_buffer_size buffered_read_stream::default_buffer_size]

[indexterm2 default_buffer_size..buffered_read_stream] 
The default buffer size. 


  static const std::size_t default_buffer_size = implementation_defined;



[endsect]


[section:fill buffered_read_stream::fill]

[indexterm2 fill..buffered_read_stream] 
Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation. Throws an exception on failure. 


  std::size_t ``[link boost_asio.reference.buffered_read_stream.fill.overload1 fill]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.fill.overload1 more...]]``


Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation, or 0 if an error occurred. 


  std::size_t ``[link boost_asio.reference.buffered_read_stream.fill.overload2 fill]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.fill.overload2 more...]]``


[section:overload1 buffered_read_stream::fill (1 of 2 overloads)]


Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation. Throws an exception on failure. 


  std::size_t fill();



[endsect]



[section:overload2 buffered_read_stream::fill (2 of 2 overloads)]


Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation, or 0 if an error occurred. 


  std::size_t fill(
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:get_io_service buffered_read_stream::get_io_service]

[indexterm2 get_io_service..buffered_read_stream] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();



[endsect]


[section:in_avail buffered_read_stream::in_avail]

[indexterm2 in_avail..buffered_read_stream] 
Determine the amount of data that may be read without blocking. 


  std::size_t ``[link boost_asio.reference.buffered_read_stream.in_avail.overload1 in_avail]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.in_avail.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.buffered_read_stream.in_avail.overload2 in_avail]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.in_avail.overload2 more...]]``


[section:overload1 buffered_read_stream::in_avail (1 of 2 overloads)]


Determine the amount of data that may be read without blocking. 


  std::size_t in_avail();



[endsect]



[section:overload2 buffered_read_stream::in_avail (2 of 2 overloads)]


Determine the amount of data that may be read without blocking. 


  std::size_t in_avail(
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:lowest_layer buffered_read_stream::lowest_layer]

[indexterm2 lowest_layer..buffered_read_stream] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.buffered_read_stream.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.buffered_read_stream.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.lowest_layer.overload2 more...]]``


[section:overload1 buffered_read_stream::lowest_layer (1 of 2 overloads)]


Get a reference to the lowest layer. 


  lowest_layer_type & lowest_layer();



[endsect]



[section:overload2 buffered_read_stream::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;



[endsect]


[endsect]


[section:lowest_layer_type buffered_read_stream::lowest_layer_type]

[indexterm2 lowest_layer_type..buffered_read_stream] 
The type of the lowest layer. 


  typedef next_layer_type::lowest_layer_type lowest_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/buffered_read_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:next_layer buffered_read_stream::next_layer]

[indexterm2 next_layer..buffered_read_stream] 
Get a reference to the next layer. 


  next_layer_type & next_layer();



[endsect]



[section:next_layer_type buffered_read_stream::next_layer_type]

[indexterm2 next_layer_type..buffered_read_stream] 
The type of the next layer. 


  typedef boost::remove_reference< Stream >::type next_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/buffered_read_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:peek buffered_read_stream::peek]

[indexterm2 peek..buffered_read_stream] 
Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_read_stream.peek.overload1 peek]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.peek.overload1 more...]]``


Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_read_stream.peek.overload2 peek]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.peek.overload2 more...]]``


[section:overload1 buffered_read_stream::peek (1 of 2 overloads)]


Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t peek(
      const MutableBufferSequence & buffers);



[endsect]



[section:overload2 buffered_read_stream::peek (2 of 2 overloads)]


Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t peek(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:read_some buffered_read_stream::read_some]

[indexterm2 read_some..buffered_read_stream] 
Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_read_stream.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.read_some.overload1 more...]]``


Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_read_stream.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.read_some.overload2 more...]]``


[section:overload1 buffered_read_stream::read_some (1 of 2 overloads)]


Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some(
      const MutableBufferSequence & buffers);



[endsect]



[section:overload2 buffered_read_stream::read_some (2 of 2 overloads)]


Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:write_some buffered_read_stream::write_some]

[indexterm2 write_some..buffered_read_stream] 
Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_read_stream.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.write_some.overload1 more...]]``


Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_read_stream.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_read_stream.write_some.overload2 more...]]``


[section:overload1 buffered_read_stream::write_some (1 of 2 overloads)]


Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);



[endsect]



[section:overload2 buffered_read_stream::write_some (2 of 2 overloads)]


Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]


[endsect]

[section:buffered_stream buffered_stream]


Adds buffering to the read- and write-related operations of a stream. 


  template<
      typename Stream>
  class buffered_stream :
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.buffered_stream.lowest_layer_type [*lowest_layer_type]]]
    [The type of the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.buffered_stream.next_layer_type [*next_layer_type]]]
    [The type of the next layer. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffered_stream.async_fill [*async_fill]]]
    [Start an asynchronous fill. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.async_flush [*async_flush]]]
    [Start an asynchronous flush. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.async_read_some [*async_read_some]]]
    [Start an asynchronous read. The buffer into which the data will be read must be valid for the lifetime of the asynchronous operation. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.async_write_some [*async_write_some]]]
    [Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.buffered_stream [*buffered_stream]]]
    [Construct, passing the specified argument to initialise the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.close [*close]]]
    [Close the stream. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.fill [*fill]]]
    [Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation. Throws an exception on failure. 

     Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.flush [*flush]]]
    [Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation. Throws an exception on failure. 

     Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.in_avail [*in_avail]]]
    [Determine the amount of data that may be read without blocking. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.next_layer [*next_layer]]]
    [Get a reference to the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.peek [*peek]]]
    [Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 

     Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.read_some [*read_some]]]
    [Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 

     Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_stream.write_some [*write_some]]]
    [Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 

     Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred. ]
  ]
  
]

The [link boost_asio.reference.buffered_stream `buffered_stream`] class template can be used to add buffering to the synchronous and asynchronous read and write operations of a stream.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/buffered_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_fill buffered_stream::async_fill]

[indexterm2 async_fill..buffered_stream] 
Start an asynchronous fill. 


  template<
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_fill(
      ReadHandler handler);



[endsect]



[section:async_flush buffered_stream::async_flush]

[indexterm2 async_flush..buffered_stream] 
Start an asynchronous flush. 


  template<
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_flush(
      WriteHandler handler);



[endsect]



[section:async_read_some buffered_stream::async_read_some]

[indexterm2 async_read_some..buffered_stream] 
Start an asynchronous read. The buffer into which the data will be read must be valid for the lifetime of the asynchronous operation. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some buffered_stream::async_write_some]

[indexterm2 async_write_some..buffered_stream] 
Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);



[endsect]


[section:buffered_stream buffered_stream::buffered_stream]

[indexterm2 buffered_stream..buffered_stream] 
Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  explicit ``[link boost_asio.reference.buffered_stream.buffered_stream.overload1 buffered_stream]``(
      Arg & a);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.buffered_stream.overload1 more...]]``

  template<
      typename Arg>
  explicit ``[link boost_asio.reference.buffered_stream.buffered_stream.overload2 buffered_stream]``(
      Arg & a,
      std::size_t read_buffer_size,
      std::size_t write_buffer_size);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.buffered_stream.overload2 more...]]``


[section:overload1 buffered_stream::buffered_stream (1 of 2 overloads)]


Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  buffered_stream(
      Arg & a);



[endsect]



[section:overload2 buffered_stream::buffered_stream (2 of 2 overloads)]


Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  buffered_stream(
      Arg & a,
      std::size_t read_buffer_size,
      std::size_t write_buffer_size);



[endsect]


[endsect]

[section:close buffered_stream::close]

[indexterm2 close..buffered_stream] 
Close the stream. 


  void ``[link boost_asio.reference.buffered_stream.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.buffered_stream.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.close.overload2 more...]]``


[section:overload1 buffered_stream::close (1 of 2 overloads)]


Close the stream. 


  void close();



[endsect]



[section:overload2 buffered_stream::close (2 of 2 overloads)]


Close the stream. 


  boost::system::error_code close(
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:fill buffered_stream::fill]

[indexterm2 fill..buffered_stream] 
Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation. Throws an exception on failure. 


  std::size_t ``[link boost_asio.reference.buffered_stream.fill.overload1 fill]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.fill.overload1 more...]]``


Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation, or 0 if an error occurred. 


  std::size_t ``[link boost_asio.reference.buffered_stream.fill.overload2 fill]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.fill.overload2 more...]]``


[section:overload1 buffered_stream::fill (1 of 2 overloads)]


Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation. Throws an exception on failure. 


  std::size_t fill();



[endsect]



[section:overload2 buffered_stream::fill (2 of 2 overloads)]


Fill the buffer with some data. Returns the number of bytes placed in the buffer as a result of the operation, or 0 if an error occurred. 


  std::size_t fill(
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:flush buffered_stream::flush]

[indexterm2 flush..buffered_stream] 
Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation. Throws an exception on failure. 


  std::size_t ``[link boost_asio.reference.buffered_stream.flush.overload1 flush]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.flush.overload1 more...]]``


Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation, or 0 if an error occurred. 


  std::size_t ``[link boost_asio.reference.buffered_stream.flush.overload2 flush]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.flush.overload2 more...]]``


[section:overload1 buffered_stream::flush (1 of 2 overloads)]


Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation. Throws an exception on failure. 


  std::size_t flush();



[endsect]



[section:overload2 buffered_stream::flush (2 of 2 overloads)]


Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation, or 0 if an error occurred. 


  std::size_t flush(
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:get_io_service buffered_stream::get_io_service]

[indexterm2 get_io_service..buffered_stream] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();



[endsect]


[section:in_avail buffered_stream::in_avail]

[indexterm2 in_avail..buffered_stream] 
Determine the amount of data that may be read without blocking. 


  std::size_t ``[link boost_asio.reference.buffered_stream.in_avail.overload1 in_avail]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.in_avail.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.buffered_stream.in_avail.overload2 in_avail]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.in_avail.overload2 more...]]``


[section:overload1 buffered_stream::in_avail (1 of 2 overloads)]


Determine the amount of data that may be read without blocking. 


  std::size_t in_avail();



[endsect]



[section:overload2 buffered_stream::in_avail (2 of 2 overloads)]


Determine the amount of data that may be read without blocking. 


  std::size_t in_avail(
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:lowest_layer buffered_stream::lowest_layer]

[indexterm2 lowest_layer..buffered_stream] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.buffered_stream.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.buffered_stream.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.lowest_layer.overload2 more...]]``


[section:overload1 buffered_stream::lowest_layer (1 of 2 overloads)]


Get a reference to the lowest layer. 


  lowest_layer_type & lowest_layer();



[endsect]



[section:overload2 buffered_stream::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;



[endsect]


[endsect]


[section:lowest_layer_type buffered_stream::lowest_layer_type]

[indexterm2 lowest_layer_type..buffered_stream] 
The type of the lowest layer. 


  typedef next_layer_type::lowest_layer_type lowest_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/buffered_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:next_layer buffered_stream::next_layer]

[indexterm2 next_layer..buffered_stream] 
Get a reference to the next layer. 


  next_layer_type & next_layer();



[endsect]



[section:next_layer_type buffered_stream::next_layer_type]

[indexterm2 next_layer_type..buffered_stream] 
The type of the next layer. 


  typedef boost::remove_reference< Stream >::type next_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/buffered_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:peek buffered_stream::peek]

[indexterm2 peek..buffered_stream] 
Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_stream.peek.overload1 peek]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.peek.overload1 more...]]``


Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_stream.peek.overload2 peek]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.peek.overload2 more...]]``


[section:overload1 buffered_stream::peek (1 of 2 overloads)]


Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t peek(
      const MutableBufferSequence & buffers);



[endsect]



[section:overload2 buffered_stream::peek (2 of 2 overloads)]


Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t peek(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:read_some buffered_stream::read_some]

[indexterm2 read_some..buffered_stream] 
Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_stream.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.read_some.overload1 more...]]``


Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_stream.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.read_some.overload2 more...]]``


[section:overload1 buffered_stream::read_some (1 of 2 overloads)]


Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some(
      const MutableBufferSequence & buffers);



[endsect]



[section:overload2 buffered_stream::read_some (2 of 2 overloads)]


Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:write_some buffered_stream::write_some]

[indexterm2 write_some..buffered_stream] 
Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_stream.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.write_some.overload1 more...]]``


Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_stream.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_stream.write_some.overload2 more...]]``


[section:overload1 buffered_stream::write_some (1 of 2 overloads)]


Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);



[endsect]



[section:overload2 buffered_stream::write_some (2 of 2 overloads)]


Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]


[endsect]

[section:buffered_write_stream buffered_write_stream]


Adds buffering to the write-related operations of a stream. 


  template<
      typename Stream>
  class buffered_write_stream :
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.buffered_write_stream.lowest_layer_type [*lowest_layer_type]]]
    [The type of the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.buffered_write_stream.next_layer_type [*next_layer_type]]]
    [The type of the next layer. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffered_write_stream.async_flush [*async_flush]]]
    [Start an asynchronous flush. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.async_read_some [*async_read_some]]]
    [Start an asynchronous read. The buffer into which the data will be read must be valid for the lifetime of the asynchronous operation. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.async_write_some [*async_write_some]]]
    [Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.buffered_write_stream [*buffered_write_stream]]]
    [Construct, passing the specified argument to initialise the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.close [*close]]]
    [Close the stream. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.flush [*flush]]]
    [Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation. Throws an exception on failure. 

     Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.in_avail [*in_avail]]]
    [Determine the amount of data that may be read without blocking. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.next_layer [*next_layer]]]
    [Get a reference to the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.peek [*peek]]]
    [Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 

     Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.read_some [*read_some]]]
    [Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 

     Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. ]
  ]
  
  [
    [[link boost_asio.reference.buffered_write_stream.write_some [*write_some]]]
    [Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 

     Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred and the error handler did not throw. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffered_write_stream.default_buffer_size [*default_buffer_size]]]
    [The default buffer size. ]
  ]

]

The [link boost_asio.reference.buffered_write_stream `buffered_write_stream`] class template can be used to add buffering to the synchronous and asynchronous write operations of a stream.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/buffered_write_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_flush buffered_write_stream::async_flush]

[indexterm2 async_flush..buffered_write_stream] 
Start an asynchronous flush. 


  template<
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_flush(
      WriteHandler handler);



[endsect]



[section:async_read_some buffered_write_stream::async_read_some]

[indexterm2 async_read_some..buffered_write_stream] 
Start an asynchronous read. The buffer into which the data will be read must be valid for the lifetime of the asynchronous operation. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some buffered_write_stream::async_write_some]

[indexterm2 async_write_some..buffered_write_stream] 
Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);



[endsect]


[section:buffered_write_stream buffered_write_stream::buffered_write_stream]

[indexterm2 buffered_write_stream..buffered_write_stream] 
Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  explicit ``[link boost_asio.reference.buffered_write_stream.buffered_write_stream.overload1 buffered_write_stream]``(
      Arg & a);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.buffered_write_stream.overload1 more...]]``

  template<
      typename Arg>
  ``[link boost_asio.reference.buffered_write_stream.buffered_write_stream.overload2 buffered_write_stream]``(
      Arg & a,
      std::size_t buffer_size);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.buffered_write_stream.overload2 more...]]``


[section:overload1 buffered_write_stream::buffered_write_stream (1 of 2 overloads)]


Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  buffered_write_stream(
      Arg & a);



[endsect]



[section:overload2 buffered_write_stream::buffered_write_stream (2 of 2 overloads)]


Construct, passing the specified argument to initialise the next layer. 


  template<
      typename Arg>
  buffered_write_stream(
      Arg & a,
      std::size_t buffer_size);



[endsect]


[endsect]

[section:close buffered_write_stream::close]

[indexterm2 close..buffered_write_stream] 
Close the stream. 


  void ``[link boost_asio.reference.buffered_write_stream.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.buffered_write_stream.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.close.overload2 more...]]``


[section:overload1 buffered_write_stream::close (1 of 2 overloads)]


Close the stream. 


  void close();



[endsect]



[section:overload2 buffered_write_stream::close (2 of 2 overloads)]


Close the stream. 


  boost::system::error_code close(
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:default_buffer_size buffered_write_stream::default_buffer_size]

[indexterm2 default_buffer_size..buffered_write_stream] 
The default buffer size. 


  static const std::size_t default_buffer_size = implementation_defined;



[endsect]


[section:flush buffered_write_stream::flush]

[indexterm2 flush..buffered_write_stream] 
Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation. Throws an exception on failure. 


  std::size_t ``[link boost_asio.reference.buffered_write_stream.flush.overload1 flush]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.flush.overload1 more...]]``


Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation, or 0 if an error occurred. 


  std::size_t ``[link boost_asio.reference.buffered_write_stream.flush.overload2 flush]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.flush.overload2 more...]]``


[section:overload1 buffered_write_stream::flush (1 of 2 overloads)]


Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation. Throws an exception on failure. 


  std::size_t flush();



[endsect]



[section:overload2 buffered_write_stream::flush (2 of 2 overloads)]


Flush all data from the buffer to the next layer. Returns the number of bytes written to the next layer on the last write operation, or 0 if an error occurred. 


  std::size_t flush(
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:get_io_service buffered_write_stream::get_io_service]

[indexterm2 get_io_service..buffered_write_stream] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();



[endsect]


[section:in_avail buffered_write_stream::in_avail]

[indexterm2 in_avail..buffered_write_stream] 
Determine the amount of data that may be read without blocking. 


  std::size_t ``[link boost_asio.reference.buffered_write_stream.in_avail.overload1 in_avail]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.in_avail.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.buffered_write_stream.in_avail.overload2 in_avail]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.in_avail.overload2 more...]]``


[section:overload1 buffered_write_stream::in_avail (1 of 2 overloads)]


Determine the amount of data that may be read without blocking. 


  std::size_t in_avail();



[endsect]



[section:overload2 buffered_write_stream::in_avail (2 of 2 overloads)]


Determine the amount of data that may be read without blocking. 


  std::size_t in_avail(
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:lowest_layer buffered_write_stream::lowest_layer]

[indexterm2 lowest_layer..buffered_write_stream] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.buffered_write_stream.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.buffered_write_stream.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.lowest_layer.overload2 more...]]``


[section:overload1 buffered_write_stream::lowest_layer (1 of 2 overloads)]


Get a reference to the lowest layer. 


  lowest_layer_type & lowest_layer();



[endsect]



[section:overload2 buffered_write_stream::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;



[endsect]


[endsect]


[section:lowest_layer_type buffered_write_stream::lowest_layer_type]

[indexterm2 lowest_layer_type..buffered_write_stream] 
The type of the lowest layer. 


  typedef next_layer_type::lowest_layer_type lowest_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/buffered_write_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:next_layer buffered_write_stream::next_layer]

[indexterm2 next_layer..buffered_write_stream] 
Get a reference to the next layer. 


  next_layer_type & next_layer();



[endsect]



[section:next_layer_type buffered_write_stream::next_layer_type]

[indexterm2 next_layer_type..buffered_write_stream] 
The type of the next layer. 


  typedef boost::remove_reference< Stream >::type next_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/buffered_write_stream.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:peek buffered_write_stream::peek]

[indexterm2 peek..buffered_write_stream] 
Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_write_stream.peek.overload1 peek]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.peek.overload1 more...]]``


Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_write_stream.peek.overload2 peek]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.peek.overload2 more...]]``


[section:overload1 buffered_write_stream::peek (1 of 2 overloads)]


Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t peek(
      const MutableBufferSequence & buffers);



[endsect]



[section:overload2 buffered_write_stream::peek (2 of 2 overloads)]


Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t peek(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:read_some buffered_write_stream::read_some]

[indexterm2 read_some..buffered_write_stream] 
Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_write_stream.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.read_some.overload1 more...]]``


Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_write_stream.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.read_some.overload2 more...]]``


[section:overload1 buffered_write_stream::read_some (1 of 2 overloads)]


Read some data from the stream. Returns the number of bytes read. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some(
      const MutableBufferSequence & buffers);



[endsect]



[section:overload2 buffered_write_stream::read_some (2 of 2 overloads)]


Read some data from the stream. Returns the number of bytes read or 0 if an error occurred. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:write_some buffered_write_stream::write_some]

[indexterm2 write_some..buffered_write_stream] 
Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_write_stream.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.write_some.overload1 more...]]``


Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred and the error handler did not throw. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.buffered_write_stream.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.buffered_write_stream.write_some.overload2 more...]]``


[section:overload1 buffered_write_stream::write_some (1 of 2 overloads)]


Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);



[endsect]



[section:overload2 buffered_write_stream::write_some (2 of 2 overloads)]


Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred and the error handler did not throw. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]


[endsect]


[endsect]


[section:buffers_begin buffers_begin]

[indexterm1 buffers_begin] 
Construct an iterator representing the beginning of the buffers' data. 


  template<
      typename BufferSequence>
  buffers_iterator< BufferSequence > buffers_begin(
      const BufferSequence & buffers);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:buffers_end buffers_end]

[indexterm1 buffers_end] 
Construct an iterator representing the end of the buffers' data. 


  template<
      typename BufferSequence>
  buffers_iterator< BufferSequence > buffers_end(
      const BufferSequence & buffers);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:buffers_iterator buffers_iterator]


A random access iterator over the bytes in a buffer sequence. 


  template<
      typename BufferSequence,
      typename ByteType = char>
  class buffers_iterator


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.buffers_iterator.difference_type [*difference_type]]]
    [The type used for the distance between two iterators. ]
  
  ]

  [

    [[link boost_asio.reference.buffers_iterator.iterator_category [*iterator_category]]]
    [The iterator category. ]
  
  ]

  [

    [[link boost_asio.reference.buffers_iterator.pointer [*pointer]]]
    [The type of the result of applying operator->() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.buffers_iterator.reference [*reference]]]
    [The type of the result of applying operator*() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.buffers_iterator.value_type [*value_type]]]
    [The type of the value pointed to by the iterator. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffers_iterator.begin [*begin]]]
    [Construct an iterator representing the beginning of the buffers' data. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.buffers_iterator [*buffers_iterator]]]
    [Default constructor. Creates an iterator in an undefined state. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.end [*end]]]
    [Construct an iterator representing the end of the buffers' data. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator__star_ [*operator *]]]
    [Dereference an iterator. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_plus__plus_ [*operator++]]]
    [Increment operator (prefix). 

     Increment operator (postfix). ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_plus__eq_ [*operator+=]]]
    [Addition operator. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_minus__minus_ [*operator--]]]
    [Decrement operator (prefix). 

     Decrement operator (postfix). ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_minus__eq_ [*operator-=]]]
    [Subtraction operator. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_arrow_ [*operator->]]]
    [Dereference an iterator. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_lb__rb_ [*operator\[\]]]]
    [Access an individual element. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.buffers_iterator.operator_not__eq_ [*operator!=]]]
    [Test two iterators for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_plus_ [*operator+]]]
    [Addition operator. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_minus_ [*operator-]]]
    [Subtraction operator. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_lt_ [*operator<]]]
    [Compare two iterators. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_lt__eq_ [*operator<=]]]
    [Compare two iterators. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_eq__eq_ [*operator==]]]
    [Test two iterators for equality. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_gt_ [*operator>]]]
    [Compare two iterators. ]
  ]
  
  [
    [[link boost_asio.reference.buffers_iterator.operator_gt__eq_ [*operator>=]]]
    [Compare two iterators. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:begin buffers_iterator::begin]

[indexterm2 begin..buffers_iterator] 
Construct an iterator representing the beginning of the buffers' data. 


  static buffers_iterator begin(
      const BufferSequence & buffers);



[endsect]



[section:buffers_iterator buffers_iterator::buffers_iterator]

[indexterm2 buffers_iterator..buffers_iterator] 
Default constructor. Creates an iterator in an undefined state. 


  buffers_iterator();



[endsect]



[section:difference_type buffers_iterator::difference_type]

[indexterm2 difference_type..buffers_iterator] 
The type used for the distance between two iterators. 


  typedef std::ptrdiff_t difference_type;



[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:end buffers_iterator::end]

[indexterm2 end..buffers_iterator] 
Construct an iterator representing the end of the buffers' data. 


  static buffers_iterator end(
      const BufferSequence & buffers);



[endsect]



[section:iterator_category buffers_iterator::iterator_category]

[indexterm2 iterator_category..buffers_iterator] 
The iterator category. 


  typedef std::random_access_iterator_tag iterator_category;



[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator__star_ buffers_iterator::operator *]

[indexterm2 operator *..buffers_iterator] 
Dereference an iterator. 


  reference operator *() const;



[endsect]



[section:operator_not__eq_ buffers_iterator::operator!=]

[indexterm2 operator!=..buffers_iterator] 
Test two iterators for inequality. 


  friend bool operator!=(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:operator_plus_ buffers_iterator::operator+]

[indexterm2 operator+..buffers_iterator] 
Addition operator. 


  friend buffers_iterator ``[link boost_asio.reference.buffers_iterator.operator_plus_.overload1 operator+]``(
      const buffers_iterator & iter,
      std::ptrdiff_t difference);
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_plus_.overload1 more...]]``

  friend buffers_iterator ``[link boost_asio.reference.buffers_iterator.operator_plus_.overload2 operator+]``(
      std::ptrdiff_t difference,
      const buffers_iterator & iter);
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_plus_.overload2 more...]]``


[section:overload1 buffers_iterator::operator+ (1 of 2 overloads)]


Addition operator. 


  friend buffers_iterator operator+(
      const buffers_iterator & iter,
      std::ptrdiff_t difference);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:overload2 buffers_iterator::operator+ (2 of 2 overloads)]


Addition operator. 


  friend buffers_iterator operator+(
      std::ptrdiff_t difference,
      const buffers_iterator & iter);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[endsect]

[section:operator_plus__plus_ buffers_iterator::operator++]

[indexterm2 operator++..buffers_iterator] 
Increment operator (prefix). 


  buffers_iterator & ``[link boost_asio.reference.buffers_iterator.operator_plus__plus_.overload1 operator++]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_plus__plus_.overload1 more...]]``


Increment operator (postfix). 


  buffers_iterator ``[link boost_asio.reference.buffers_iterator.operator_plus__plus_.overload2 operator++]``(
      int );
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_plus__plus_.overload2 more...]]``


[section:overload1 buffers_iterator::operator++ (1 of 2 overloads)]


Increment operator (prefix). 


  buffers_iterator & operator++();



[endsect]



[section:overload2 buffers_iterator::operator++ (2 of 2 overloads)]


Increment operator (postfix). 


  buffers_iterator operator++(
      int );



[endsect]


[endsect]


[section:operator_plus__eq_ buffers_iterator::operator+=]

[indexterm2 operator+=..buffers_iterator] 
Addition operator. 


  buffers_iterator & operator+=(
      std::ptrdiff_t difference);



[endsect]


[section:operator_minus_ buffers_iterator::operator-]

[indexterm2 operator-..buffers_iterator] 
Subtraction operator. 


  friend buffers_iterator ``[link boost_asio.reference.buffers_iterator.operator_minus_.overload1 operator-]``(
      const buffers_iterator & iter,
      std::ptrdiff_t difference);
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_minus_.overload1 more...]]``

  friend std::ptrdiff_t ``[link boost_asio.reference.buffers_iterator.operator_minus_.overload2 operator-]``(
      const buffers_iterator & a,
      const buffers_iterator & b);
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_minus_.overload2 more...]]``


[section:overload1 buffers_iterator::operator- (1 of 2 overloads)]


Subtraction operator. 


  friend buffers_iterator operator-(
      const buffers_iterator & iter,
      std::ptrdiff_t difference);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:overload2 buffers_iterator::operator- (2 of 2 overloads)]


Subtraction operator. 


  friend std::ptrdiff_t operator-(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[endsect]

[section:operator_minus__minus_ buffers_iterator::operator--]

[indexterm2 operator--..buffers_iterator] 
Decrement operator (prefix). 


  buffers_iterator & ``[link boost_asio.reference.buffers_iterator.operator_minus__minus_.overload1 operator--]``();
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_minus__minus_.overload1 more...]]``


Decrement operator (postfix). 


  buffers_iterator ``[link boost_asio.reference.buffers_iterator.operator_minus__minus_.overload2 operator--]``(
      int );
  ``  [''''&raquo;''' [link boost_asio.reference.buffers_iterator.operator_minus__minus_.overload2 more...]]``


[section:overload1 buffers_iterator::operator-- (1 of 2 overloads)]


Decrement operator (prefix). 


  buffers_iterator & operator--();



[endsect]



[section:overload2 buffers_iterator::operator-- (2 of 2 overloads)]


Decrement operator (postfix). 


  buffers_iterator operator--(
      int );



[endsect]


[endsect]


[section:operator_minus__eq_ buffers_iterator::operator-=]

[indexterm2 operator-=..buffers_iterator] 
Subtraction operator. 


  buffers_iterator & operator-=(
      std::ptrdiff_t difference);



[endsect]



[section:operator_arrow_ buffers_iterator::operator->]

[indexterm2 operator->..buffers_iterator] 
Dereference an iterator. 


  pointer operator->() const;



[endsect]



[section:operator_lt_ buffers_iterator::operator<]

[indexterm2 operator<..buffers_iterator] 
Compare two iterators. 


  friend bool operator<(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt__eq_ buffers_iterator::operator<=]

[indexterm2 operator<=..buffers_iterator] 
Compare two iterators. 


  friend bool operator<=(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq__eq_ buffers_iterator::operator==]

[indexterm2 operator==..buffers_iterator] 
Test two iterators for equality. 


  friend bool operator==(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt_ buffers_iterator::operator>]

[indexterm2 operator>..buffers_iterator] 
Compare two iterators. 


  friend bool operator>(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt__eq_ buffers_iterator::operator>=]

[indexterm2 operator>=..buffers_iterator] 
Compare two iterators. 


  friend bool operator>=(
      const buffers_iterator & a,
      const buffers_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lb__rb_ buffers_iterator::operator\[\]]

[indexterm2 operator\[\]..buffers_iterator] 
Access an individual element. 


  reference operator[](
      std::ptrdiff_t difference) const;



[endsect]



[section:pointer buffers_iterator::pointer]

[indexterm2 pointer..buffers_iterator] 
The type of the result of applying `operator->()` to the iterator. 


  typedef const_or_non_const_ByteType * pointer;



If the buffer sequence stores buffer objects that are convertible to [link boost_asio.reference.mutable_buffer `mutable_buffer`], this is a pointer to a non-const ByteType. Otherwise, a pointer to a const ByteType. 

[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:reference buffers_iterator::reference]

[indexterm2 reference..buffers_iterator] 
The type of the result of applying `operator*()` to the iterator. 


  typedef const_or_non_const_ByteType & reference;



If the buffer sequence stores buffer objects that are convertible to [link boost_asio.reference.mutable_buffer `mutable_buffer`], this is a reference to a non-const ByteType. Otherwise, a reference to a const ByteType. 

[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:value_type buffers_iterator::value_type]

[indexterm2 value_type..buffers_iterator] 
The type of the value pointed to by the iterator. 


  typedef ByteType value_type;



[heading Requirements]

[*Header: ][^boost/asio/buffers_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]

[section:connect connect]

[indexterm1 connect] 
Establishes a socket connection by trying each endpoint in a sequence. 

      
  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator ``[link boost_asio.reference.connect.overload1 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator ``[link boost_asio.reference.connect.overload2 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator ``[link boost_asio.reference.connect.overload3 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator ``[link boost_asio.reference.connect.overload4 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator ``[link boost_asio.reference.connect.overload5 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ConnectCondition connect_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload5 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator ``[link boost_asio.reference.connect.overload6 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ConnectCondition connect_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload6 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator ``[link boost_asio.reference.connect.overload7 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ConnectCondition connect_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload7 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator ``[link boost_asio.reference.connect.overload8 connect]``(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ConnectCondition connect_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.connect.overload8 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/connect.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 connect (1 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the sequence is empty, the associated `error_code` is `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Remarks]
      
This overload assumes that a default constructed object of type `Iterator` represents the end of the sequence. This is a valid assumption for iterator types such as `boost::asio::ip::tcp::resolver::iterator`.


[heading Example]
  


   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);
   boost::asio::connect(s, r.resolve(q)); 







[endsect]



[section:overload2 connect (2 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      boost::system::error_code & ec);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[ec][Set to indicate what error occurred, if any. If the sequence is empty, set to `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Remarks]
      
This overload assumes that a default constructed object of type `Iterator` represents the end of the sequence. This is a valid assumption for iterator types such as `boost::asio::ip::tcp::resolver::iterator`.


[heading Example]
  


   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);
   boost::system::error_code ec;
   boost::asio::connect(s, r.resolve(q), ec);
   if (ec)
   {
     // An error occurred.
   } 







[endsect]



[section:overload3 connect (3 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[end][An iterator pointing to the end of a sequence of endpoints.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the sequence is empty, the associated `error_code` is `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Example]
  


   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::resolver::iterator i = r.resolve(q), end;
   tcp::socket s(io_service);
   boost::asio::connect(s, i, end); 







[endsect]



[section:overload4 connect (4 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      boost::system::error_code & ec);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[end][An iterator pointing to the end of a sequence of endpoints.]]

[[ec][Set to indicate what error occurred, if any. If the sequence is empty, set to `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Example]
  


   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::resolver::iterator i = r.resolve(q), end;
   tcp::socket s(io_service);
   boost::system::error_code ec;
   boost::asio::connect(s, i, end, ec);
   if (ec)
   {
     // An error occurred.
   } 







[endsect]



[section:overload5 connect (5 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ConnectCondition connect_condition);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[connect_condition][A function object that is called prior to each connection attempt. The signature of the function object must be: 
``
   Iterator connect_condition(
       const boost::system::error_code& ec,
       Iterator next); 
``
The `ec` parameter contains the result from the most recent connect operation. Before the first connection attempt, `ec` is always set to indicate success. The `next` parameter is an iterator pointing to the next endpoint to be tried. The function object should return the next iterator, but is permitted to return a different iterator so that endpoints may be skipped. The implementation guarantees that the function object will never be called with the end iterator.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the sequence is empty, the associated `error_code` is `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Remarks]
      
This overload assumes that a default constructed object of type `Iterator` represents the end of the sequence. This is a valid assumption for iterator types such as `boost::asio::ip::tcp::resolver::iterator`.


[heading Example]
  
The following connect condition function object can be used to output information about the individual connection attempts: 

   struct my_connect_condition
   {
     template <typename Iterator>
     Iterator operator()(
         const boost::system::error_code& ec,
         Iterator next)
     {
       if (ec) std::cout << "Error: " << ec.message() << std::endl;
       std::cout << "Trying: " << next->endpoint() << std::endl;
       return next;
     }
   }; 


It would be used with the `boost::asio::connect` function as follows: 

   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);
   tcp::resolver::iterator i = boost::asio::connect(
       s, r.resolve(q), my_connect_condition());
   std::cout << "Connected to: " << i->endpoint() << std::endl; 







[endsect]



[section:overload6 connect (6 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      ConnectCondition connect_condition,
      boost::system::error_code & ec);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[connect_condition][A function object that is called prior to each connection attempt. The signature of the function object must be: 
``
   Iterator connect_condition(
       const boost::system::error_code& ec,
       Iterator next); 
``
The `ec` parameter contains the result from the most recent connect operation. Before the first connection attempt, `ec` is always set to indicate success. The `next` parameter is an iterator pointing to the next endpoint to be tried. The function object should return the next iterator, but is permitted to return a different iterator so that endpoints may be skipped. The implementation guarantees that the function object will never be called with the end iterator.]]

[[ec][Set to indicate what error occurred, if any. If the sequence is empty, set to `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Remarks]
      
This overload assumes that a default constructed object of type `Iterator` represents the end of the sequence. This is a valid assumption for iterator types such as `boost::asio::ip::tcp::resolver::iterator`.


[heading Example]
  
The following connect condition function object can be used to output information about the individual connection attempts: 

   struct my_connect_condition
   {
     template <typename Iterator>
     Iterator operator()(
         const boost::system::error_code& ec,
         Iterator next)
     {
       if (ec) std::cout << "Error: " << ec.message() << std::endl;
       std::cout << "Trying: " << next->endpoint() << std::endl;
       return next;
     }
   }; 


It would be used with the `boost::asio::connect` function as follows: 

   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::socket s(io_service);
   boost::system::error_code ec;
   tcp::resolver::iterator i = boost::asio::connect(
       s, r.resolve(q), my_connect_condition(), ec);
   if (ec)
   {
     // An error occurred.
   }
   else
   {
     std::cout << "Connected to: " << i->endpoint() << std::endl;
   } 







[endsect]



[section:overload7 connect (7 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ConnectCondition connect_condition);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[end][An iterator pointing to the end of a sequence of endpoints.]]

[[connect_condition][A function object that is called prior to each connection attempt. The signature of the function object must be: 
``
   Iterator connect_condition(
       const boost::system::error_code& ec,
       Iterator next); 
``
The `ec` parameter contains the result from the most recent connect operation. Before the first connection attempt, `ec` is always set to indicate success. The `next` parameter is an iterator pointing to the next endpoint to be tried. The function object should return the next iterator, but is permitted to return a different iterator so that endpoints may be skipped. The implementation guarantees that the function object will never be called with the end iterator.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the sequence is empty, the associated `error_code` is `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Example]
  
The following connect condition function object can be used to output information about the individual connection attempts: 

   struct my_connect_condition
   {
     template <typename Iterator>
     Iterator operator()(
         const boost::system::error_code& ec,
         Iterator next)
     {
       if (ec) std::cout << "Error: " << ec.message() << std::endl;
       std::cout << "Trying: " << next->endpoint() << std::endl;
       return next;
     }
   }; 


It would be used with the `boost::asio::connect` function as follows: 

   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::resolver::iterator i = r.resolve(q), end;
   tcp::socket s(io_service);
   i = boost::asio::connect(s, i, end, my_connect_condition());
   std::cout << "Connected to: " << i->endpoint() << std::endl; 







[endsect]



[section:overload8 connect (8 of 8 overloads)]


Establishes a socket connection by trying each endpoint in a sequence. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename Iterator,
      typename ConnectCondition>
  Iterator connect(
      basic_socket< Protocol, SocketService > & s,
      Iterator begin,
      Iterator end,
      ConnectCondition connect_condition,
      boost::system::error_code & ec);


This function attempts to connect a socket to one of a sequence of endpoints. It does this by repeated calls to the socket's `connect` member function, once for each endpoint in the sequence, until a connection is successfully established.


[heading Parameters]
    

[variablelist
  
[[s][The socket to be connected. If the socket is already open, it will be closed.]]

[[begin][An iterator pointing to the start of a sequence of endpoints.]]

[[end][An iterator pointing to the end of a sequence of endpoints.]]

[[connect_condition][A function object that is called prior to each connection attempt. The signature of the function object must be: 
``
   Iterator connect_condition(
       const boost::system::error_code& ec,
       Iterator next); 
``
The `ec` parameter contains the result from the most recent connect operation. Before the first connection attempt, `ec` is always set to indicate success. The `next` parameter is an iterator pointing to the next endpoint to be tried. The function object should return the next iterator, but is permitted to return a different iterator so that endpoints may be skipped. The implementation guarantees that the function object will never be called with the end iterator.]]

[[ec][Set to indicate what error occurred, if any. If the sequence is empty, set to `boost::asio::error::not_found`. Otherwise, contains the error from the last connection attempt.]]

]


[heading Return Value]
      
On success, an iterator denoting the successfully connected endpoint. Otherwise, the end iterator.


[heading Example]
  
The following connect condition function object can be used to output information about the individual connection attempts: 

   struct my_connect_condition
   {
     template <typename Iterator>
     Iterator operator()(
         const boost::system::error_code& ec,
         Iterator next)
     {
       if (ec) std::cout << "Error: " << ec.message() << std::endl;
       std::cout << "Trying: " << next->endpoint() << std::endl;
       return next;
     }
   }; 


It would be used with the `boost::asio::connect` function as follows: 

   tcp::resolver r(io_service);
   tcp::resolver::query q("host", "service");
   tcp::resolver::iterator i = r.resolve(q), end;
   tcp::socket s(io_service);
   boost::system::error_code ec;
   i = boost::asio::connect(s, i, end, my_connect_condition(), ec);
   if (ec)
   {
     // An error occurred.
   }
   else
   {
     std::cout << "Connected to: " << i->endpoint() << std::endl;
   } 







[endsect]


[endsect]

[section:const_buffer const_buffer]


Holds a buffer that cannot be modified. 


  class const_buffer


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.const_buffer.const_buffer [*const_buffer]]]
    [Construct an empty buffer. 

     Construct a buffer to represent a given memory range. 

     Construct a non-modifiable buffer from a modifiable one. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.const_buffer.operator_plus_ [*operator+]]]
    [Create a new non-modifiable buffer that is offset from the start of another. ]
  ]
  
]

The [link boost_asio.reference.const_buffer `const_buffer`] class provides a safe representation of a buffer that cannot be modified. It does not own the underlying data, and so is cheap to copy or assign.


[heading Accessing Buffer Contents]
  


The contents of a buffer may be accessed using the [link boost_asio.reference.buffer_size `buffer_size`]  and [link boost_asio.reference.buffer_cast `buffer_cast`]  functions:



   boost::asio::const_buffer b1 = ...;
   std::size_t s1 = boost::asio::buffer_size(b1);
   const unsigned char* p1 = boost::asio::buffer_cast<const unsigned char*>(b1);




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered. 

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:const_buffer const_buffer::const_buffer]

[indexterm2 const_buffer..const_buffer] 
Construct an empty buffer. 


  ``[link boost_asio.reference.const_buffer.const_buffer.overload1 const_buffer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffer.const_buffer.overload1 more...]]``


Construct a buffer to represent a given memory range. 


  ``[link boost_asio.reference.const_buffer.const_buffer.overload2 const_buffer]``(
      const void * data,
      std::size_t size);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffer.const_buffer.overload2 more...]]``


Construct a non-modifiable buffer from a modifiable one. 


  ``[link boost_asio.reference.const_buffer.const_buffer.overload3 const_buffer]``(
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffer.const_buffer.overload3 more...]]``


[section:overload1 const_buffer::const_buffer (1 of 3 overloads)]


Construct an empty buffer. 


  const_buffer();



[endsect]



[section:overload2 const_buffer::const_buffer (2 of 3 overloads)]


Construct a buffer to represent a given memory range. 


  const_buffer(
      const void * data,
      std::size_t size);



[endsect]



[section:overload3 const_buffer::const_buffer (3 of 3 overloads)]


Construct a non-modifiable buffer from a modifiable one. 


  const_buffer(
      const mutable_buffer & b);



[endsect]


[endsect]

[section:operator_plus_ const_buffer::operator+]

[indexterm2 operator+..const_buffer] 
Create a new non-modifiable buffer that is offset from the start of another. 


  const_buffer ``[link boost_asio.reference.const_buffer.operator_plus_.overload1 operator+]``(
      const const_buffer & b,
      std::size_t start);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffer.operator_plus_.overload1 more...]]``

  const_buffer ``[link boost_asio.reference.const_buffer.operator_plus_.overload2 operator+]``(
      std::size_t start,
      const const_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffer.operator_plus_.overload2 more...]]``


[section:overload1 const_buffer::operator+ (1 of 2 overloads)]


Create a new non-modifiable buffer that is offset from the start of another. 


  const_buffer operator+(
      const const_buffer & b,
      std::size_t start);



[endsect]



[section:overload2 const_buffer::operator+ (2 of 2 overloads)]


Create a new non-modifiable buffer that is offset from the start of another. 


  const_buffer operator+(
      std::size_t start,
      const const_buffer & b);



[endsect]


[endsect]


[endsect]

[section:const_buffers_1 const_buffers_1]


Adapts a single non-modifiable buffer so that it meets the requirements of the ConstBufferSequence concept. 


  class const_buffers_1 :
    public const_buffer


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.const_buffers_1.const_iterator [*const_iterator]]]
    [A random-access iterator type that may be used to read elements. ]
  
  ]

  [

    [[link boost_asio.reference.const_buffers_1.value_type [*value_type]]]
    [The type for each element in the list of buffers. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.const_buffers_1.begin [*begin]]]
    [Get a random-access iterator to the first element. ]
  ]
  
  [
    [[link boost_asio.reference.const_buffers_1.const_buffers_1 [*const_buffers_1]]]
    [Construct to represent a given memory range. 

     Construct to represent a single non-modifiable buffer. ]
  ]
  
  [
    [[link boost_asio.reference.const_buffers_1.end [*end]]]
    [Get a random-access iterator for one past the last element. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.const_buffers_1.operator_plus_ [*operator+]]]
    [Create a new non-modifiable buffer that is offset from the start of another. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:begin const_buffers_1::begin]

[indexterm2 begin..const_buffers_1] 
Get a random-access iterator to the first element. 


  const_iterator begin() const;



[endsect]


[section:const_buffers_1 const_buffers_1::const_buffers_1]

[indexterm2 const_buffers_1..const_buffers_1] 
Construct to represent a given memory range. 


  ``[link boost_asio.reference.const_buffers_1.const_buffers_1.overload1 const_buffers_1]``(
      const void * data,
      std::size_t size);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffers_1.const_buffers_1.overload1 more...]]``


Construct to represent a single non-modifiable buffer. 


  explicit ``[link boost_asio.reference.const_buffers_1.const_buffers_1.overload2 const_buffers_1]``(
      const const_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffers_1.const_buffers_1.overload2 more...]]``


[section:overload1 const_buffers_1::const_buffers_1 (1 of 2 overloads)]


Construct to represent a given memory range. 


  const_buffers_1(
      const void * data,
      std::size_t size);



[endsect]



[section:overload2 const_buffers_1::const_buffers_1 (2 of 2 overloads)]


Construct to represent a single non-modifiable buffer. 


  const_buffers_1(
      const const_buffer & b);



[endsect]


[endsect]


[section:const_iterator const_buffers_1::const_iterator]

[indexterm2 const_iterator..const_buffers_1] 
A random-access iterator type that may be used to read elements. 


  typedef const const_buffer * const_iterator;



[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:end const_buffers_1::end]

[indexterm2 end..const_buffers_1] 
Get a random-access iterator for one past the last element. 


  const_iterator end() const;



[endsect]


[section:operator_plus_ const_buffers_1::operator+]

[indexterm2 operator+..const_buffers_1] 
Create a new non-modifiable buffer that is offset from the start of another. 


  const_buffer ``[link boost_asio.reference.const_buffers_1.operator_plus_.overload1 operator+]``(
      const const_buffer & b,
      std::size_t start);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffers_1.operator_plus_.overload1 more...]]``

  const_buffer ``[link boost_asio.reference.const_buffers_1.operator_plus_.overload2 operator+]``(
      std::size_t start,
      const const_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.const_buffers_1.operator_plus_.overload2 more...]]``


[section:overload1 const_buffers_1::operator+ (1 of 2 overloads)]


['Inherited from const_buffer.]


Create a new non-modifiable buffer that is offset from the start of another. 


  const_buffer operator+(
      const const_buffer & b,
      std::size_t start);



[endsect]



[section:overload2 const_buffers_1::operator+ (2 of 2 overloads)]


['Inherited from const_buffer.]


Create a new non-modifiable buffer that is offset from the start of another. 


  const_buffer operator+(
      std::size_t start,
      const const_buffer & b);



[endsect]


[endsect]


[section:value_type const_buffers_1::value_type]

[indexterm2 value_type..const_buffers_1] 
The type for each element in the list of buffers. 


  typedef const_buffer value_type;


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.const_buffer.const_buffer [*const_buffer]]]
    [Construct an empty buffer. 

     Construct a buffer to represent a given memory range. 

     Construct a non-modifiable buffer from a modifiable one. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.const_buffer.operator_plus_ [*operator+]]]
    [Create a new non-modifiable buffer that is offset from the start of another. ]
  ]
  
]

The [link boost_asio.reference.const_buffer `const_buffer`] class provides a safe representation of a buffer that cannot be modified. It does not own the underlying data, and so is cheap to copy or assign.


[heading Accessing Buffer Contents]
  


The contents of a buffer may be accessed using the [link boost_asio.reference.buffer_size `buffer_size`]  and [link boost_asio.reference.buffer_cast `buffer_cast`]  functions:



   boost::asio::const_buffer b1 = ...;
   std::size_t s1 = boost::asio::buffer_size(b1);
   const unsigned char* p1 = boost::asio::buffer_cast<const unsigned char*>(b1);




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered. 


[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]

[section:datagram_socket_service datagram_socket_service]


Default service implementation for a datagram socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``>
  class datagram_socket_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.datagram_socket_service.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.datagram_socket_service.implementation_type [*implementation_type]]]
    [The type of a datagram socket. ]
  
  ]

  [

    [[link boost_asio.reference.datagram_socket_service.native_handle_type [*native_handle_type]]]
    [The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.datagram_socket_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.datagram_socket_service.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.datagram_socket_service.assign [*assign]]]
    [Assign an existing native socket to a datagram socket. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.async_receive_from [*async_receive_from]]]
    [Start an asynchronous receive that will get the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.bind [*bind]]]
    []
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.close [*close]]]
    [Close a datagram socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.connect [*connect]]]
    [Connect the datagram socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.construct [*construct]]]
    [Construct a new datagram socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.datagram_socket_service [*datagram_socket_service]]]
    [Construct a new datagram socket service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.destroy [*destroy]]]
    [Destroy a datagram socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.get_option [*get_option]]]
    [Get a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.local_endpoint [*local_endpoint]]]
    [Get the local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.move_assign [*move_assign]]]
    [Move-assign from another datagram socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.move_construct [*move_construct]]]
    [Move-construct a new datagram socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.native_handle [*native_handle]]]
    [Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.open [*open]]]
    []
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.receive [*receive]]]
    [Receive some data from the peer. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.receive_from [*receive_from]]]
    [Receive a datagram with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.send [*send]]]
    [Send the given data to the peer. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.send_to [*send_to]]]
    [Send a datagram to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.set_option [*set_option]]]
    [Set a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.datagram_socket_service.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.datagram_socket_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/datagram_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign datagram_socket_service::assign]

[indexterm2 assign..datagram_socket_service] 
Assign an existing native socket to a datagram socket. 


  boost::system::error_code assign(
      implementation_type & impl,
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]



[section:async_connect datagram_socket_service::async_connect]

[indexterm2 async_connect..datagram_socket_service] 
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);



[endsect]



[section:async_receive datagram_socket_service::async_receive]

[indexterm2 async_receive..datagram_socket_service] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      ReadHandler handler);



[endsect]



[section:async_receive_from datagram_socket_service::async_receive_from]

[indexterm2 async_receive_from..datagram_socket_service] 
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 datagram_socket_service::async_send]

[indexterm2 async_send..datagram_socket_service] 
Start an asynchronous send. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);



[endsect]



[section:async_send_to datagram_socket_service::async_send_to]

[indexterm2 async_send_to..datagram_socket_service] 
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 datagram_socket_service::at_mark]

[indexterm2 at_mark..datagram_socket_service] 
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 datagram_socket_service::available]

[indexterm2 available..datagram_socket_service] 
Determine the number of bytes available for reading. 


  std::size_t available(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:bind datagram_socket_service::bind]

[indexterm2 bind..datagram_socket_service] 

  boost::system::error_code bind(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);



[endsect]



[section:cancel datagram_socket_service::cancel]

[indexterm2 cancel..datagram_socket_service] 
Cancel all asynchronous operations associated with the socket. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close datagram_socket_service::close]

[indexterm2 close..datagram_socket_service] 
Close a datagram socket implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:connect datagram_socket_service::connect]

[indexterm2 connect..datagram_socket_service] 
Connect the datagram socket to the specified endpoint. 


  boost::system::error_code connect(
      implementation_type & impl,
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);



[endsect]



[section:construct datagram_socket_service::construct]

[indexterm2 construct..datagram_socket_service] 
Construct a new datagram socket implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:datagram_socket_service datagram_socket_service::datagram_socket_service]

[indexterm2 datagram_socket_service..datagram_socket_service] 
Construct a new datagram socket service for the specified [link boost_asio.reference.io_service `io_service`]. 


  datagram_socket_service(
      boost::asio::io_service & io_service);



[endsect]



[section:destroy datagram_socket_service::destroy]

[indexterm2 destroy..datagram_socket_service] 
Destroy a datagram socket implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:endpoint_type datagram_socket_service::endpoint_type]

[indexterm2 endpoint_type..datagram_socket_service] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/datagram_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:get_io_service datagram_socket_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..datagram_socket_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:get_option datagram_socket_service::get_option]

[indexterm2 get_option..datagram_socket_service] 
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 datagram_socket_service::id]

[indexterm2 id..datagram_socket_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type datagram_socket_service::implementation_type]

[indexterm2 implementation_type..datagram_socket_service] 
The type of a datagram socket. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/datagram_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:io_control datagram_socket_service::io_control]

[indexterm2 io_control..datagram_socket_service] 
Perform an IO control command on the socket. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code io_control(
      implementation_type & impl,
      IoControlCommand & command,
      boost::system::error_code & ec);



[endsect]



[section:is_open datagram_socket_service::is_open]

[indexterm2 is_open..datagram_socket_service] 
Determine whether the socket is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:local_endpoint datagram_socket_service::local_endpoint]

[indexterm2 local_endpoint..datagram_socket_service] 
Get the local endpoint. 


  endpoint_type local_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:move_assign datagram_socket_service::move_assign]

[indexterm2 move_assign..datagram_socket_service] 
Move-assign from another datagram socket implementation. 


  void move_assign(
      implementation_type & impl,
      datagram_socket_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct datagram_socket_service::move_construct]

[indexterm2 move_construct..datagram_socket_service] 
Move-construct a new datagram socket implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native datagram_socket_service::native]

[indexterm2 native..datagram_socket_service] 
(Deprecated: Use `native_handle()`.) Get the native socket implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle datagram_socket_service::native_handle]

[indexterm2 native_handle..datagram_socket_service] 
Get the native socket implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type datagram_socket_service::native_handle_type]

[indexterm2 native_handle_type..datagram_socket_service] 
The native socket type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/datagram_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking datagram_socket_service::native_non_blocking]

[indexterm2 native_non_blocking..datagram_socket_service] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.datagram_socket_service.native_non_blocking.overload1 native_non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.datagram_socket_service.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code ``[link boost_asio.reference.datagram_socket_service.native_non_blocking.overload2 native_non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.datagram_socket_service.native_non_blocking.overload2 more...]]``


[section:overload1 datagram_socket_service::native_non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 datagram_socket_service::native_non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:native_type datagram_socket_service::native_type]

[indexterm2 native_type..datagram_socket_service] 
(Deprecated: Use native\_handle\_type.) The native socket type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/datagram_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking datagram_socket_service::non_blocking]

[indexterm2 non_blocking..datagram_socket_service] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.datagram_socket_service.non_blocking.overload1 non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.datagram_socket_service.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  boost::system::error_code ``[link boost_asio.reference.datagram_socket_service.non_blocking.overload2 non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.datagram_socket_service.non_blocking.overload2 more...]]``


[section:overload1 datagram_socket_service::non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the socket. 


  bool non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 datagram_socket_service::non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:open datagram_socket_service::open]

[indexterm2 open..datagram_socket_service] 

  boost::system::error_code open(
      implementation_type & impl,
      const protocol_type & protocol,
      boost::system::error_code & ec);



[endsect]



[section:protocol_type datagram_socket_service::protocol_type]

[indexterm2 protocol_type..datagram_socket_service] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/datagram_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive datagram_socket_service::receive]

[indexterm2 receive..datagram_socket_service] 
Receive some data from the peer. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);



[endsect]



[section:receive_from datagram_socket_service::receive_from]

[indexterm2 receive_from..datagram_socket_service] 
Receive a datagram with the endpoint of the sender. 


  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);



[endsect]



[section:remote_endpoint datagram_socket_service::remote_endpoint]

[indexterm2 remote_endpoint..datagram_socket_service] 
Get the remote endpoint. 


  endpoint_type remote_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:send datagram_socket_service::send]

[indexterm2 send..datagram_socket_service] 
Send the given data to the peer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);



[endsect]



[section:send_to datagram_socket_service::send_to]

[indexterm2 send_to..datagram_socket_service] 
Send a datagram 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 datagram_socket_service::set_option]

[indexterm2 set_option..datagram_socket_service] 
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 datagram_socket_service::shutdown]

[indexterm2 shutdown..datagram_socket_service] 
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);



[endsect]



[endsect]


[section:deadline_timer deadline_timer]

[indexterm1 deadline_timer] 
Typedef for the typical usage of timer. Uses a UTC clock. 


  typedef basic_deadline_timer< boost::posix_time::ptime > deadline_timer;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_deadline_timer.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.time_type [*time_type]]]
    [The time type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_deadline_timer.traits_type [*traits_type]]]
    [The time traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_deadline_timer.async_wait [*async_wait]]]
    [Start an asynchronous wait on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.basic_deadline_timer [*basic_deadline_timer]]]
    [Constructor. 

     Constructor to set a particular expiry time as an absolute time. 

     Constructor to set a particular expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.cancel [*cancel]]]
    [Cancel any asynchronous operations that are waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.cancel_one [*cancel_one]]]
    [Cancels one asynchronous operation that is waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.expires_at [*expires_at]]]
    [Get the timer's expiry time as an absolute time. 

     Set the timer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the timer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.wait [*wait]]]
    [Perform a blocking wait on the timer. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_deadline_timer.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_deadline_timer.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_deadline_timer.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_deadline_timer.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_deadline_timer `basic_deadline_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A deadline timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.

Most applications will use the [link boost_asio.reference.deadline_timer `deadline_timer`] typedef.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Examples]
  
Performing a blocking wait: 

   // Construct a timer without setting an expiry time.
   boost::asio::deadline_timer timer(io_service);

   // Set an expiry time relative to now.
   timer.expires_from_now(boost::posix_time::seconds(5));

   // Wait for the timer to expire.
   timer.wait();





Performing an asynchronous wait: 

   void handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Timer expired.
     }
   }

   ...

   // Construct a timer with an absolute expiry time.
   boost::asio::deadline_timer timer(io_service,
       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));

   // Start an asynchronous wait.
   timer.async_wait(handler);





[heading Changing an active deadline_timer's expiry time]
  


Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:



   void on_some_event()
   {
     if (my_timer.expires_from_now(seconds(5)) > 0)
     {
       // We managed to cancel the timer. Start new asynchronous wait.
       my_timer.async_wait(on_timeout);
     }
     else
     {
       // Too late, timer has already expired!
     }
   }

   void on_timeout(const boost::system::error_code& e)
   {
     if (e != boost::asio::error::operation_aborted)
     {
       // Timer was not cancelled, take necessary action.
     }
   }





* The `boost::asio::basic_deadline_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.


* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`. 




[heading Requirements]

[*Header: ][^boost/asio/deadline_timer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:deadline_timer_service deadline_timer_service]


Default service implementation for a timer. 


  template<
      typename TimeType,
      typename ``[link boost_asio.reference.TimeTraits TimeTraits]`` = boost::asio::time_traits<TimeType>>
  class deadline_timer_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.deadline_timer_service.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.deadline_timer_service.implementation_type [*implementation_type]]]
    [The implementation type of the deadline timer. ]
  
  ]

  [

    [[link boost_asio.reference.deadline_timer_service.time_type [*time_type]]]
    [The time type. ]
  
  ]

  [

    [[link boost_asio.reference.deadline_timer_service.traits_type [*traits_type]]]
    [The time traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.deadline_timer_service.async_wait [*async_wait]]]
    []
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.cancel [*cancel]]]
    [Cancel any asynchronous wait operations associated with the timer. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.cancel_one [*cancel_one]]]
    [Cancels one asynchronous wait operation associated with the timer. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.construct [*construct]]]
    [Construct a new timer implementation. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.deadline_timer_service [*deadline_timer_service]]]
    [Construct a new timer service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.destroy [*destroy]]]
    [Destroy a timer implementation. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.expires_at [*expires_at]]]
    [Get the expiry time for the timer as an absolute time. 

     Set the expiry time for the timer as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.expires_from_now [*expires_from_now]]]
    [Get the expiry time for the timer relative to now. 

     Set the expiry time for the timer relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.deadline_timer_service.wait [*wait]]]
    []
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.deadline_timer_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/deadline_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_wait deadline_timer_service::async_wait]

[indexterm2 async_wait..deadline_timer_service] 

  template<
      typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
  void async_wait(
      implementation_type & impl,
      WaitHandler handler);



[endsect]



[section:cancel deadline_timer_service::cancel]

[indexterm2 cancel..deadline_timer_service] 
Cancel any asynchronous wait operations associated with the timer. 


  std::size_t cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:cancel_one deadline_timer_service::cancel_one]

[indexterm2 cancel_one..deadline_timer_service] 
Cancels one asynchronous wait operation associated with the timer. 


  std::size_t cancel_one(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct deadline_timer_service::construct]

[indexterm2 construct..deadline_timer_service] 
Construct a new timer implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:deadline_timer_service deadline_timer_service::deadline_timer_service]

[indexterm2 deadline_timer_service..deadline_timer_service] 
Construct a new timer service for the specified [link boost_asio.reference.io_service `io_service`]. 


  deadline_timer_service(
      boost::asio::io_service & io_service);



[endsect]



[section:destroy deadline_timer_service::destroy]

[indexterm2 destroy..deadline_timer_service] 
Destroy a timer implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:duration_type deadline_timer_service::duration_type]

[indexterm2 duration_type..deadline_timer_service] 
The duration type. 


  typedef traits_type::duration_type duration_type;



[heading Requirements]

[*Header: ][^boost/asio/deadline_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:expires_at deadline_timer_service::expires_at]

[indexterm2 expires_at..deadline_timer_service] 
Get the expiry time for the timer as an absolute time. 


  time_type ``[link boost_asio.reference.deadline_timer_service.expires_at.overload1 expires_at]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.deadline_timer_service.expires_at.overload1 more...]]``


Set the expiry time for the timer as an absolute time. 


  std::size_t ``[link boost_asio.reference.deadline_timer_service.expires_at.overload2 expires_at]``(
      implementation_type & impl,
      const time_type & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.deadline_timer_service.expires_at.overload2 more...]]``


[section:overload1 deadline_timer_service::expires_at (1 of 2 overloads)]


Get the expiry time for the timer as an absolute time. 


  time_type expires_at(
      const implementation_type & impl) const;



[endsect]



[section:overload2 deadline_timer_service::expires_at (2 of 2 overloads)]


Set the expiry time for the timer as an absolute time. 


  std::size_t expires_at(
      implementation_type & impl,
      const time_type & expiry_time,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:expires_from_now deadline_timer_service::expires_from_now]

[indexterm2 expires_from_now..deadline_timer_service] 
Get the expiry time for the timer relative to now. 


  duration_type ``[link boost_asio.reference.deadline_timer_service.expires_from_now.overload1 expires_from_now]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.deadline_timer_service.expires_from_now.overload1 more...]]``


Set the expiry time for the timer relative to now. 


  std::size_t ``[link boost_asio.reference.deadline_timer_service.expires_from_now.overload2 expires_from_now]``(
      implementation_type & impl,
      const duration_type & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.deadline_timer_service.expires_from_now.overload2 more...]]``


[section:overload1 deadline_timer_service::expires_from_now (1 of 2 overloads)]


Get the expiry time for the timer relative to now. 


  duration_type expires_from_now(
      const implementation_type & impl) const;



[endsect]



[section:overload2 deadline_timer_service::expires_from_now (2 of 2 overloads)]


Set the expiry time for the timer relative to now. 


  std::size_t expires_from_now(
      implementation_type & impl,
      const duration_type & expiry_time,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:get_io_service deadline_timer_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..deadline_timer_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id deadline_timer_service::id]

[indexterm2 id..deadline_timer_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type deadline_timer_service::implementation_type]

[indexterm2 implementation_type..deadline_timer_service] 
The implementation type of the deadline timer. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/deadline_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:time_type deadline_timer_service::time_type]

[indexterm2 time_type..deadline_timer_service] 
The time type. 


  typedef traits_type::time_type time_type;



[heading Requirements]

[*Header: ][^boost/asio/deadline_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:traits_type deadline_timer_service::traits_type]

[indexterm2 traits_type..deadline_timer_service] 
The time traits type. 


  typedef TimeTraits traits_type;



[heading Requirements]

[*Header: ][^boost/asio/deadline_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:wait deadline_timer_service::wait]

[indexterm2 wait..deadline_timer_service] 

  void wait(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[endsect]


[section:error__addrinfo_category error::addrinfo_category]

[indexterm1 error::addrinfo_category] 

  static const boost::system::error_category & addrinfo_category = boost::asio::error::get_addrinfo_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__addrinfo_errors error::addrinfo_errors]

[indexterm1 error::addrinfo_errors] 

  enum addrinfo_errors

[indexterm2 service_not_found..error::addrinfo_errors]
[indexterm2 socket_type_not_supported..error::addrinfo_errors]

[heading Values]
[variablelist

  [
    [service_not_found]
    [The service is not supported for the given socket type. ]
  ]

  [
    [socket_type_not_supported]
    [The socket type is not supported. ]
  ]

]


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__basic_errors error::basic_errors]

[indexterm1 error::basic_errors] 

  enum basic_errors

[indexterm2 access_denied..error::basic_errors]
[indexterm2 address_family_not_supported..error::basic_errors]
[indexterm2 address_in_use..error::basic_errors]
[indexterm2 already_connected..error::basic_errors]
[indexterm2 already_started..error::basic_errors]
[indexterm2 broken_pipe..error::basic_errors]
[indexterm2 connection_aborted..error::basic_errors]
[indexterm2 connection_refused..error::basic_errors]
[indexterm2 connection_reset..error::basic_errors]
[indexterm2 bad_descriptor..error::basic_errors]
[indexterm2 fault..error::basic_errors]
[indexterm2 host_unreachable..error::basic_errors]
[indexterm2 in_progress..error::basic_errors]
[indexterm2 interrupted..error::basic_errors]
[indexterm2 invalid_argument..error::basic_errors]
[indexterm2 message_size..error::basic_errors]
[indexterm2 name_too_long..error::basic_errors]
[indexterm2 network_down..error::basic_errors]
[indexterm2 network_reset..error::basic_errors]
[indexterm2 network_unreachable..error::basic_errors]
[indexterm2 no_descriptors..error::basic_errors]
[indexterm2 no_buffer_space..error::basic_errors]
[indexterm2 no_memory..error::basic_errors]
[indexterm2 no_permission..error::basic_errors]
[indexterm2 no_protocol_option..error::basic_errors]
[indexterm2 not_connected..error::basic_errors]
[indexterm2 not_socket..error::basic_errors]
[indexterm2 operation_aborted..error::basic_errors]
[indexterm2 operation_not_supported..error::basic_errors]
[indexterm2 shut_down..error::basic_errors]
[indexterm2 timed_out..error::basic_errors]
[indexterm2 try_again..error::basic_errors]
[indexterm2 would_block..error::basic_errors]

[heading Values]
[variablelist

  [
    [access_denied]
    [Permission denied. ]
  ]

  [
    [address_family_not_supported]
    [Address family not supported by protocol. ]
  ]

  [
    [address_in_use]
    [Address already in use. ]
  ]

  [
    [already_connected]
    [Transport endpoint is already connected. ]
  ]

  [
    [already_started]
    [Operation already in progress. ]
  ]

  [
    [broken_pipe]
    [Broken pipe. ]
  ]

  [
    [connection_aborted]
    [A connection has been aborted. ]
  ]

  [
    [connection_refused]
    [Connection refused. ]
  ]

  [
    [connection_reset]
    [Connection reset by peer. ]
  ]

  [
    [bad_descriptor]
    [Bad file descriptor. ]
  ]

  [
    [fault]
    [Bad address. ]
  ]

  [
    [host_unreachable]
    [No route to host. ]
  ]

  [
    [in_progress]
    [Operation now in progress. ]
  ]

  [
    [interrupted]
    [Interrupted system call. ]
  ]

  [
    [invalid_argument]
    [Invalid argument. ]
  ]

  [
    [message_size]
    [Message too long. ]
  ]

  [
    [name_too_long]
    [The name was too long. ]
  ]

  [
    [network_down]
    [Network is down. ]
  ]

  [
    [network_reset]
    [Network dropped connection on reset. ]
  ]

  [
    [network_unreachable]
    [Network is unreachable. ]
  ]

  [
    [no_descriptors]
    [Too many open files. ]
  ]

  [
    [no_buffer_space]
    [No buffer space available. ]
  ]

  [
    [no_memory]
    [Cannot allocate memory. ]
  ]

  [
    [no_permission]
    [Operation not permitted. ]
  ]

  [
    [no_protocol_option]
    [Protocol not available. ]
  ]

  [
    [not_connected]
    [Transport endpoint is not connected. ]
  ]

  [
    [not_socket]
    [Socket operation on non-socket. ]
  ]

  [
    [operation_aborted]
    [Operation cancelled. ]
  ]

  [
    [operation_not_supported]
    [Operation not supported. ]
  ]

  [
    [shut_down]
    [Cannot send after transport endpoint shutdown. ]
  ]

  [
    [timed_out]
    [Connection timed out. ]
  ]

  [
    [try_again]
    [Resource temporarily unavailable. ]
  ]

  [
    [would_block]
    [The socket is marked non-blocking and the requested operation would block. ]
  ]

]


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__get_addrinfo_category error::get_addrinfo_category]

[indexterm1 error::get_addrinfo_category] 

  const boost::system::error_category & get_addrinfo_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__get_misc_category error::get_misc_category]

[indexterm1 error::get_misc_category] 

  const boost::system::error_category & get_misc_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__get_netdb_category error::get_netdb_category]

[indexterm1 error::get_netdb_category] 

  const boost::system::error_category & get_netdb_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__get_ssl_category error::get_ssl_category]

[indexterm1 error::get_ssl_category] 

  const boost::system::error_category & get_ssl_category();


[heading Requirements]

[*Header: ][^boost/asio/ssl/error.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:error__get_system_category error::get_system_category]

[indexterm1 error::get_system_category] 

  const boost::system::error_category & get_system_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:error__make_error_code error::make_error_code]

[indexterm1 error::make_error_code] 
    
  boost::system::error_code ``[link boost_asio.reference.error__make_error_code.overload1 make_error_code]``(
      basic_errors e);
  ``  [''''&raquo;''' [link boost_asio.reference.error__make_error_code.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.error__make_error_code.overload2 make_error_code]``(
      netdb_errors e);
  ``  [''''&raquo;''' [link boost_asio.reference.error__make_error_code.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.error__make_error_code.overload3 make_error_code]``(
      addrinfo_errors e);
  ``  [''''&raquo;''' [link boost_asio.reference.error__make_error_code.overload3 more...]]``

  boost::system::error_code ``[link boost_asio.reference.error__make_error_code.overload4 make_error_code]``(
      misc_errors e);
  ``  [''''&raquo;''' [link boost_asio.reference.error__make_error_code.overload4 more...]]``

  boost::system::error_code ``[link boost_asio.reference.error__make_error_code.overload5 make_error_code]``(
      ssl_errors e);
  ``  [''''&raquo;''' [link boost_asio.reference.error__make_error_code.overload5 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 error::make_error_code (1 of 5 overloads)]



  boost::system::error_code make_error_code(
      basic_errors e);



[endsect]



[section:overload2 error::make_error_code (2 of 5 overloads)]



  boost::system::error_code make_error_code(
      netdb_errors e);



[endsect]



[section:overload3 error::make_error_code (3 of 5 overloads)]



  boost::system::error_code make_error_code(
      addrinfo_errors e);



[endsect]



[section:overload4 error::make_error_code (4 of 5 overloads)]



  boost::system::error_code make_error_code(
      misc_errors e);



[endsect]



[section:overload5 error::make_error_code (5 of 5 overloads)]



  boost::system::error_code make_error_code(
      ssl_errors e);



[endsect]


[endsect]


[section:error__misc_category error::misc_category]

[indexterm1 error::misc_category] 

  static const boost::system::error_category & misc_category = boost::asio::error::get_misc_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__misc_errors error::misc_errors]

[indexterm1 error::misc_errors] 

  enum misc_errors

[indexterm2 already_open..error::misc_errors]
[indexterm2 eof..error::misc_errors]
[indexterm2 not_found..error::misc_errors]
[indexterm2 fd_set_failure..error::misc_errors]

[heading Values]
[variablelist

  [
    [already_open]
    [Already open. ]
  ]

  [
    [eof]
    [End of file or stream. ]
  ]

  [
    [not_found]
    [Element not found. ]
  ]

  [
    [fd_set_failure]
    [The descriptor cannot fit into the select system call's fd_set. ]
  ]

]


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__netdb_category error::netdb_category]

[indexterm1 error::netdb_category] 

  static const boost::system::error_category & netdb_category = boost::asio::error::get_netdb_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__netdb_errors error::netdb_errors]

[indexterm1 error::netdb_errors] 

  enum netdb_errors

[indexterm2 host_not_found..error::netdb_errors]
[indexterm2 host_not_found_try_again..error::netdb_errors]
[indexterm2 no_data..error::netdb_errors]
[indexterm2 no_recovery..error::netdb_errors]

[heading Values]
[variablelist

  [
    [host_not_found]
    [Host not found (authoritative). ]
  ]

  [
    [host_not_found_try_again]
    [Host not found (non-authoritative). ]
  ]

  [
    [no_data]
    [The query is valid but does not have associated address data. ]
  ]

  [
    [no_recovery]
    [A non-recoverable error occurred. ]
  ]

]


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:error__ssl_category error::ssl_category]

[indexterm1 error::ssl_category] 

  static const boost::system::error_category & ssl_category = boost::asio::error::get_ssl_category();


[heading Requirements]

[*Header: ][^boost/asio/ssl/error.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:error__ssl_errors error::ssl_errors]

[indexterm1 error::ssl_errors] 

  enum ssl_errors


[heading Requirements]

[*Header: ][^boost/asio/ssl/error.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:error__system_category error::system_category]

[indexterm1 error::system_category] 

  static const boost::system::error_category & system_category = boost::asio::error::get_system_category();


[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:has_service has_service]

[indexterm1 has_service] 

  template<
      typename ``[link boost_asio.reference.Service Service]``>
  bool has_service(
      io_service & ios);


This function is used to determine whether the [link boost_asio.reference.io_service `io_service`] contains a service object corresponding to the given service type.


[heading Parameters]
    

[variablelist
  
[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]

]


[heading Return Value]
      
A boolean indicating whether the [link boost_asio.reference.io_service `io_service`] contains the service. 



[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:high_resolution_timer high_resolution_timer]

[indexterm1 high_resolution_timer] 
Typedef for a timer based on the high resolution clock. 


  typedef basic_waitable_timer< chrono::high_resolution_clock > high_resolution_timer;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_waitable_timer.clock_type [*clock_type]]]
    [The clock type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.duration [*duration]]]
    [The duration type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.time_point [*time_point]]]
    [The time point type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.traits_type [*traits_type]]]
    [The wait traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.async_wait [*async_wait]]]
    [Start an asynchronous wait on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer [*basic_waitable_timer]]]
    [Constructor. 

     Constructor to set a particular expiry time as an absolute time. 

     Constructor to set a particular expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel [*cancel]]]
    [Cancel any asynchronous operations that are waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel_one [*cancel_one]]]
    [Cancels one asynchronous operation that is waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_at [*expires_at]]]
    [Get the timer's expiry time as an absolute time. 

     Set the timer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the timer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.wait [*wait]]]
    [Perform a blocking wait on the timer. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_waitable_timer.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.

Most applications will use the boost::asio::waitable\_timer typedef.


[heading Remarks]
      
This waitable timer functionality is for use with the C++11 standard library's `<chrono>` facility, or with the Boost.Chrono library.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Examples]
  
Performing a blocking wait: 

   // Construct a timer without setting an expiry time.
   boost::asio::waitable_timer timer(io_service);

   // Set an expiry time relative to now.
   timer.expires_from_now(boost::posix_time::seconds(5));

   // Wait for the timer to expire.
   timer.wait();





Performing an asynchronous wait: 

   void handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Timer expired.
     }
   }

   ...

   // Construct a timer with an absolute expiry time.
   boost::asio::waitable_timer timer(io_service,
       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));

   // Start an asynchronous wait.
   timer.async_wait(handler);





[heading Changing an active waitable_timer's expiry time]
  


Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:



   void on_some_event()
   {
     if (my_timer.expires_from_now(seconds(5)) > 0)
     {
       // We managed to cancel the timer. Start new asynchronous wait.
       my_timer.async_wait(on_timeout);
     }
     else
     {
       // Too late, timer has already expired!
     }
   }

   void on_timeout(const boost::system::error_code& e)
   {
     if (e != boost::asio::error::operation_aborted)
     {
       // Timer was not cancelled, take necessary action.
     }
   }





* The `boost::asio::basic_waitable_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.


* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`. 




This typedef uses the C++11 `<chrono>` standard library facility, if available. Otherwise, it may use the Boost.Chrono library. To explicitly utilise Boost.Chrono, use the [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] template directly: 

   typedef basic_waitable_timer<boost::chrono::high_resolution_clock> timer;




[heading Requirements]

[*Header: ][^boost/asio/high_resolution_timer.hpp]

[*Convenience header: ]None


[endsect]


[section:invalid_service_owner invalid_service_owner]


Exception thrown when trying to add a service object to an [link boost_asio.reference.io_service `io_service`] where the service has a different owner. 


  class invalid_service_owner


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.invalid_service_owner.invalid_service_owner [*invalid_service_owner]]]
    []
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:invalid_service_owner invalid_service_owner::invalid_service_owner]

[indexterm2 invalid_service_owner..invalid_service_owner] 

  invalid_service_owner();



[endsect]



[endsect]

[section:io_service io_service]


Provides core I/O functionality. 


  class io_service :
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.io_service__id [*id]]]
    [Class used to uniquely identify a service. ]
  
  ]

  [

    [[link boost_asio.reference.io_service__service [*service]]]
    [Base class for all io_service services. ]
  
  ]

  [

    [[link boost_asio.reference.io_service__strand [*strand]]]
    [Provides serialised handler execution. ]
  
  ]

  [

    [[link boost_asio.reference.io_service__work [*work]]]
    [Class to inform the io_service when it has work to do. ]
  
  ]

  [

    [[link boost_asio.reference.io_service.fork_event [*fork_event]]]
    [Fork-related event notifications. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service.dispatch [*dispatch]]]
    [Request the io_service to invoke the given handler. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.io_service [*io_service]]]
    [Constructor. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.notify_fork [*notify_fork]]]
    [Notify the io_service of a fork-related event. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.poll [*poll]]]
    [Run the io_service object's event processing loop to execute ready handlers. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.poll_one [*poll_one]]]
    [Run the io_service object's event processing loop to execute one ready handler. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.post [*post]]]
    [Request the io_service to invoke the given handler and return immediately. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.reset [*reset]]]
    [Reset the io_service in preparation for a subsequent run() invocation. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.run [*run]]]
    [Run the io_service object's event processing loop. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.run_one [*run_one]]]
    [Run the io_service object's event processing loop to execute at most one handler. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.stop [*stop]]]
    [Stop the io_service object's event processing loop. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.stopped [*stopped]]]
    [Determine whether the io_service object has been stopped. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.wrap [*wrap]]]
    [Create a new handler that automatically dispatches the wrapped handler on the io_service. ]
  ]
  
  [
    [[link boost_asio.reference.io_service._io_service [*~io_service]]]
    [Destructor. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service.add_service [*add_service]]]
    [Add a service object to the io_service. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.has_service [*has_service]]]
    [Determine if an io_service contains a specified service type. ]
  ]
  
  [
    [[link boost_asio.reference.io_service.use_service [*use_service]]]
    [Obtain the service object corresponding to the given type. ]
  ]
  
]

The [link boost_asio.reference.io_service `io_service`] class provides the core I/O functionality for users of the asynchronous I/O objects, including:


* `boost::asio::ip::tcp::socket` 

* `boost::asio::ip::tcp::acceptor` 

* `boost::asio::ip::udp::socket` 

* [link boost_asio.reference.deadline_timer `deadline_timer`].

The [link boost_asio.reference.io_service `io_service`] class also includes facilities intended for developers of custom asynchronous services.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe, with the specific exceptions of the `reset()` and `notify_fork()` functions. Calling `reset()` while there are unfinished `run()`, `run_one()`, `poll()` or `poll_one()` calls results in undefined behaviour. The `notify_fork()` function should not be called while any [link boost_asio.reference.io_service `io_service`] function, or any function on an I/O object that is associated with the [link boost_asio.reference.io_service `io_service`], is being called in another thread.



[heading Synchronous and asynchronous operations]
  


Synchronous operations on I/O objects implicitly run the [link boost_asio.reference.io_service `io_service`] object for an individual operation. The [link boost_asio.reference.io_service `io_service`] functions `run()`, `run_one()`, `poll()` or `poll_one()` must be called for the [link boost_asio.reference.io_service `io_service`] to perform asynchronous operations on behalf of a C++ program. Notification that an asynchronous operation has completed is delivered by invocation of the associated handler. Handlers are invoked only by a thread that is currently calling any overload of `run()`, `run_one()`, `poll()` or `poll_one()` for the [link boost_asio.reference.io_service `io_service`].


[heading Effect of exceptions thrown from handlers]
  


If an exception is thrown from a handler, the exception is allowed to propagate through the throwing thread's invocation of `run()`, `run_one()`, `poll()` or `poll_one()`. No other threads that are calling any of these functions are affected. It is then the responsibility of the application to catch the exception.

After the exception has been caught, the `run()`, `run_one()`, `poll()` or `poll_one()` call may be restarted [*without] the need for an intervening call to `reset()`. This allows the thread to rejoin the [link boost_asio.reference.io_service `io_service`] object's thread pool without impacting any other threads in the pool.

For example:



   boost::asio::io_service io_service;
   ...
   for (;;)
   {
     try
     {
       io_service.run();
       break; // run() exited normally
     }
     catch (my_exception& e)
     {
       // Deal with exception as appropriate.
     }
   }





[heading Stopping the io_service from running out of work]
  


Some applications may need to prevent an [link boost_asio.reference.io_service `io_service`] object's `run()` call from returning when there is no more work to do. For example, the [link boost_asio.reference.io_service `io_service`] may be being run in a background thread that is launched prior to the application's asynchronous operations. The `run()` call may be kept running by creating an object of type [link boost_asio.reference.io_service__work `io_service::work`]:



   boost::asio::io_service io_service;
   boost::asio::io_service::work work(io_service);
   ... 




To effect a shutdown, the application will then need to call the [link boost_asio.reference.io_service `io_service`] object's `stop()` member function. This will cause the [link boost_asio.reference.io_service `io_service`] `run()` call to return as soon as possible, abandoning unfinished operations and without permitting ready handlers to be dispatched.

Alternatively, if the application requires that all operations and handlers be allowed to finish normally, the work object may be explicitly destroyed.



   boost::asio::io_service io_service;
   auto_ptr<boost::asio::io_service::work> work(
       new boost::asio::io_service::work(io_service));
   ...
   work.reset(); // Allow run() to exit. 





[heading The io_service class and I/O services]
  


Class [link boost_asio.reference.io_service `io_service`] implements an extensible, type-safe, polymorphic set of I/O services, indexed by service type. An object of class [link boost_asio.reference.io_service `io_service`] must be initialised before I/O objects such as sockets, resolvers and timers can be used. These I/O objects are distinguished by having constructors that accept an `io_service&` parameter.

I/O services exist to manage the logical interface to the operating system on behalf of the I/O objects. In particular, there are resources that are shared across a class of I/O objects. For example, timers may be implemented in terms of a single timer queue. The I/O services manage these shared resources.

Access to the services of an [link boost_asio.reference.io_service `io_service`] is via three function templates, `use_service()`, `add_service()` and `has_service()`.

In a call to `use_service<Service>()`, the type argument chooses a service, making available all members of the named type. If `Service` is not present in an [link boost_asio.reference.io_service `io_service`], an object of type `Service` is created and added to the [link boost_asio.reference.io_service `io_service`]. A C++ program can check if an [link boost_asio.reference.io_service `io_service`] implements a particular service with the function template `has_service<Service>()`.

Service objects may be explicitly added to an [link boost_asio.reference.io_service `io_service`] using the function template `add_service<Service>()`. If the `Service` is already present, the [link boost_asio.reference.service_already_exists `service_already_exists`] exception is thrown. If the owner of the service is not the same object as the [link boost_asio.reference.io_service `io_service`] parameter, the [link boost_asio.reference.invalid_service_owner `invalid_service_owner`] exception is thrown.

Once a service reference is obtained from an [link boost_asio.reference.io_service `io_service`] object by calling `use_service()`, that reference remains usable as long as the owning [link boost_asio.reference.io_service `io_service`] object exists.

All I/O service implementations have [link boost_asio.reference.io_service__service `io_service::service`] as a public base class. Custom I/O services may be implemented by deriving from this class and then added to an [link boost_asio.reference.io_service `io_service`] using the facilities described above. 

[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:add_service io_service::add_service]

[indexterm2 add_service..io_service] 
Add a service object to the [link boost_asio.reference.io_service `io_service`]. 


  template<
      typename ``[link boost_asio.reference.Service Service]``>
  friend void add_service(
      io_service & ios,
      Service * svc);


This function is used to add a service to the [link boost_asio.reference.io_service `io_service`].


[heading Parameters]
    

[variablelist
  
[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]

[[svc][The service object. On success, ownership of the service object is transferred to the [link boost_asio.reference.io_service `io_service`]. When the [link boost_asio.reference.io_service `io_service`] object is destroyed, it will destroy the service object by performing: 
``
   delete static_cast<io_service::service*>(svc) 
``
]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::asio::service_already_exists][Thrown if a service of the given type is already present in the [link boost_asio.reference.io_service `io_service`].]]

[[boost::asio::invalid_service_owner][Thrown if the service's owning [link boost_asio.reference.io_service `io_service`] is not the [link boost_asio.reference.io_service `io_service`] object specified by the ios parameter. ]]

]



[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:dispatch io_service::dispatch]

[indexterm2 dispatch..io_service] 
Request the [link boost_asio.reference.io_service `io_service`] to invoke the given handler. 


  template<
      typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
  void dispatch(
      CompletionHandler handler);


This function is used to ask the [link boost_asio.reference.io_service `io_service`] to execute the given handler.

The [link boost_asio.reference.io_service `io_service`] guarantees that the handler will only be called in a thread in which the `run()`, `run_one()`, `poll()` or `poll_one()` member functions is currently being invoked. The handler may be executed inside this function if the guarantee can be met.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called. The [link boost_asio.reference.io_service `io_service`] will make a copy of the handler object as required. The function signature of the handler must be:
``
   void handler(); 
``
]]

]


[heading Remarks]
      
This function throws an exception only if:


* the handler's `asio_handler_allocate` function; or


* the handler's copy constructor

throws an exception. 


[endsect]



[section:fork_event io_service::fork_event]

[indexterm2 fork_event..io_service] 
Fork-related event notifications. 


  enum fork_event

[indexterm2 fork_prepare..io_service]
[indexterm2 fork_parent..io_service]
[indexterm2 fork_child..io_service]

[heading Values]
[variablelist

  [
    [fork_prepare]
    [Notify the io_service that the process is about to fork. ]
  ]

  [
    [fork_parent]
    [Notify the io_service that the process has forked and is the parent. ]
  ]

  [
    [fork_child]
    [Notify the io_service that the process has forked and is the child. ]
  ]

]



[endsect]



[section:has_service io_service::has_service]

[indexterm2 has_service..io_service] 
Determine if an [link boost_asio.reference.io_service `io_service`] contains a specified service type. 


  template<
      typename ``[link boost_asio.reference.Service Service]``>
  friend bool has_service(
      io_service & ios);


This function is used to determine whether the [link boost_asio.reference.io_service `io_service`] contains a service object corresponding to the given service type.


[heading Parameters]
    

[variablelist
  
[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]

]


[heading Return Value]
      
A boolean indicating whether the [link boost_asio.reference.io_service `io_service`] contains the service. 



[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_service io_service::io_service]

[indexterm2 io_service..io_service] 
Constructor. 


  ``[link boost_asio.reference.io_service.io_service.overload1 io_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.io_service.overload1 more...]]``

  explicit ``[link boost_asio.reference.io_service.io_service.overload2 io_service]``(
      std::size_t concurrency_hint);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.io_service.overload2 more...]]``


[section:overload1 io_service::io_service (1 of 2 overloads)]


Constructor. 


  io_service();



[endsect]



[section:overload2 io_service::io_service (2 of 2 overloads)]


Constructor. 


  io_service(
      std::size_t concurrency_hint);


Construct with a hint about the required level of concurrency.


[heading Parameters]
    

[variablelist
  
[[concurrency_hint][A suggestion to the implementation on how many threads it should allow to run simultaneously. ]]

]




[endsect]


[endsect]


[section:notify_fork io_service::notify_fork]

[indexterm2 notify_fork..io_service] 
Notify the [link boost_asio.reference.io_service `io_service`] of a fork-related event. 


  void notify_fork(
      boost::asio::io_service::fork_event event);


This function is used to inform the [link boost_asio.reference.io_service `io_service`] that the process is about to fork, or has just forked. This allows the [link boost_asio.reference.io_service `io_service`], and the services it contains, to perform any necessary housekeeping to ensure correct operation following a fork.

This function must not be called while any other [link boost_asio.reference.io_service `io_service`] function, or any function on an I/O object associated with the [link boost_asio.reference.io_service `io_service`], is being called in another thread. It is, however, safe to call this function from within a completion handler, provided no other thread is accessing the [link boost_asio.reference.io_service `io_service`].


[heading Parameters]
    

[variablelist
  
[[event][A fork-related event.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the notification fails the [link boost_asio.reference.io_service `io_service`] object should no longer be used and should be destroyed.]]

]


[heading Example]
  
The following code illustrates how to incorporate the `notify_fork()` function: 

   my_io_service.notify_fork(boost::asio::io_service::fork_prepare);
   if (fork() == 0)
   {
     // This is the child process.
     my_io_service.notify_fork(boost::asio::io_service::fork_child);
   }
   else
   {
     // This is the parent process.
     my_io_service.notify_fork(boost::asio::io_service::fork_parent);
   } 





[heading Remarks]
      
For each service object `svc` in the [link boost_asio.reference.io_service `io_service`] set, performs `svc->fork_service();`. When processing the fork\_prepare event, services are visited in reverse order of the beginning of service object lifetime. Otherwise, services are visited in order of the beginning of service object lifetime. 




[endsect]


[section:poll io_service::poll]

[indexterm2 poll..io_service] 
Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute ready handlers. 


  std::size_t ``[link boost_asio.reference.io_service.poll.overload1 poll]``();
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.poll.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.io_service.poll.overload2 poll]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.poll.overload2 more...]]``


[section:overload1 io_service::poll (1 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute ready handlers. 


  std::size_t poll();


The `poll()` function runs handlers that are ready to run, without blocking, until the [link boost_asio.reference.io_service `io_service`] has been stopped or there are no more ready handlers.


[heading Return Value]
      
The number of handlers that were executed.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 io_service::poll (2 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute ready handlers. 


  std::size_t poll(
      boost::system::error_code & ec);


The `poll()` function runs handlers that are ready to run, without blocking, until the [link boost_asio.reference.io_service `io_service`] has been stopped or there are no more ready handlers.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of handlers that were executed. 




[endsect]


[endsect]

[section:poll_one io_service::poll_one]

[indexterm2 poll_one..io_service] 
Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute one ready handler. 


  std::size_t ``[link boost_asio.reference.io_service.poll_one.overload1 poll_one]``();
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.poll_one.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.io_service.poll_one.overload2 poll_one]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.poll_one.overload2 more...]]``


[section:overload1 io_service::poll_one (1 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute one ready handler. 


  std::size_t poll_one();


The `poll_one()` function runs at most one handler that is ready to run, without blocking.


[heading Return Value]
      
The number of handlers that were executed.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 io_service::poll_one (2 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute one ready handler. 


  std::size_t poll_one(
      boost::system::error_code & ec);


The `poll_one()` function runs at most one handler that is ready to run, without blocking.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of handlers that were executed. 




[endsect]


[endsect]


[section:post io_service::post]

[indexterm2 post..io_service] 
Request the [link boost_asio.reference.io_service `io_service`] to invoke the given handler and return immediately. 


  template<
      typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
  void post(
      CompletionHandler handler);


This function is used to ask the [link boost_asio.reference.io_service `io_service`] to execute the given handler, but without allowing the [link boost_asio.reference.io_service `io_service`] to call the handler from inside this function.

The [link boost_asio.reference.io_service `io_service`] guarantees that the handler will only be called in a thread in which the `run()`, `run_one()`, `poll()` or `poll_one()` member functions is currently being invoked.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called. The [link boost_asio.reference.io_service `io_service`] will make a copy of the handler object as required. The function signature of the handler must be:
``
   void handler(); 
``
]]

]


[heading Remarks]
      
This function throws an exception only if:


* the handler's `asio_handler_allocate` function; or


* the handler's copy constructor

throws an exception. 


[endsect]



[section:reset io_service::reset]

[indexterm2 reset..io_service] 
Reset the [link boost_asio.reference.io_service `io_service`] in preparation for a subsequent `run()` invocation. 


  void reset();


This function must be called prior to any second or later set of invocations of the `run()`, `run_one()`, `poll()` or `poll_one()` functions when a previous invocation of these functions returned due to the [link boost_asio.reference.io_service `io_service`] being stopped or running out of work. After a call to `reset()`, the [link boost_asio.reference.io_service `io_service`] object's `stopped()` function will return `false`.

This function must not be called while there are any unfinished calls to the `run()`, `run_one()`, `poll()` or `poll_one()` functions. 


[endsect]


[section:run io_service::run]

[indexterm2 run..io_service] 
Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop. 


  std::size_t ``[link boost_asio.reference.io_service.run.overload1 run]``();
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.run.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.io_service.run.overload2 run]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.run.overload2 more...]]``


[section:overload1 io_service::run (1 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop. 


  std::size_t run();


The `run()` function blocks until all work has finished and there are no more handlers to be dispatched, or until the [link boost_asio.reference.io_service `io_service`] has been stopped.

Multiple threads may call the `run()` function to set up a pool of threads from which the [link boost_asio.reference.io_service `io_service`] may execute handlers. All threads that are waiting in the pool are equivalent and the [link boost_asio.reference.io_service `io_service`] may choose any one of them to invoke a handler.

A normal exit from the `run()` function implies that the [link boost_asio.reference.io_service `io_service`] object is stopped (the `stopped()` function returns `true`). Subsequent calls to `run()`, `run_one()`, `poll()` or `poll_one()` will return immediately unless there is a prior call to `reset()`.


[heading Return Value]
      
The number of handlers that were executed.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The `run()` function must not be called from a thread that is currently calling one of `run()`, `run_one()`, `poll()` or `poll_one()` on the same [link boost_asio.reference.io_service `io_service`] object.

The `poll()` function may also be used to dispatch ready handlers, but without blocking. 


[endsect]



[section:overload2 io_service::run (2 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop. 


  std::size_t run(
      boost::system::error_code & ec);


The `run()` function blocks until all work has finished and there are no more handlers to be dispatched, or until the [link boost_asio.reference.io_service `io_service`] has been stopped.

Multiple threads may call the `run()` function to set up a pool of threads from which the [link boost_asio.reference.io_service `io_service`] may execute handlers. All threads that are waiting in the pool are equivalent and the [link boost_asio.reference.io_service `io_service`] may choose any one of them to invoke a handler.

A normal exit from the `run()` function implies that the [link boost_asio.reference.io_service `io_service`] object is stopped (the `stopped()` function returns `true`). Subsequent calls to `run()`, `run_one()`, `poll()` or `poll_one()` will return immediately unless there is a prior call to `reset()`.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of handlers that were executed.


[heading Remarks]
      
The `run()` function must not be called from a thread that is currently calling one of `run()`, `run_one()`, `poll()` or `poll_one()` on the same [link boost_asio.reference.io_service `io_service`] object.

The `poll()` function may also be used to dispatch ready handlers, but without blocking. 


[endsect]


[endsect]

[section:run_one io_service::run_one]

[indexterm2 run_one..io_service] 
Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute at most one handler. 


  std::size_t ``[link boost_asio.reference.io_service.run_one.overload1 run_one]``();
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.run_one.overload1 more...]]``

  std::size_t ``[link boost_asio.reference.io_service.run_one.overload2 run_one]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service.run_one.overload2 more...]]``


[section:overload1 io_service::run_one (1 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute at most one handler. 


  std::size_t run_one();


The `run_one()` function blocks until one handler has been dispatched, or until the [link boost_asio.reference.io_service `io_service`] has been stopped.


[heading Return Value]
      
The number of handlers that were executed. A zero return value implies that the [link boost_asio.reference.io_service `io_service`] object is stopped (the `stopped()` function returns `true`). Subsequent calls to `run()`, `run_one()`, `poll()` or `poll_one()` will return immediately unless there is a prior call to `reset()`.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 io_service::run_one (2 of 2 overloads)]


Run the [link boost_asio.reference.io_service `io_service`] object's event processing loop to execute at most one handler. 


  std::size_t run_one(
      boost::system::error_code & ec);


The `run_one()` function blocks until one handler has been dispatched, or until the [link boost_asio.reference.io_service `io_service`] has been stopped.


[heading Return Value]
      
The number of handlers that were executed. A zero return value implies that the [link boost_asio.reference.io_service `io_service`] object is stopped (the `stopped()` function returns `true`). Subsequent calls to `run()`, `run_one()`, `poll()` or `poll_one()` will return immediately unless there is a prior call to `reset()`.

The number of handlers that were executed. 




[endsect]


[endsect]


[section:stop io_service::stop]

[indexterm2 stop..io_service] 
Stop the [link boost_asio.reference.io_service `io_service`] object's event processing loop. 


  void stop();


This function does not block, but instead simply signals the [link boost_asio.reference.io_service `io_service`] to stop. All invocations of its `run()` or `run_one()` member functions should return as soon as possible. Subsequent calls to `run()`, `run_one()`, `poll()` or `poll_one()` will return immediately until `reset()` is called. 


[endsect]



[section:stopped io_service::stopped]

[indexterm2 stopped..io_service] 
Determine whether the [link boost_asio.reference.io_service `io_service`] object has been stopped. 


  bool stopped() const;


This function is used to determine whether an [link boost_asio.reference.io_service `io_service`] object has been stopped, either through an explicit call to `stop()`, or due to running out of work. When an [link boost_asio.reference.io_service `io_service`] object is stopped, calls to `run()`, `run_one()`, `poll()` or `poll_one()` will return immediately without invoking any handlers.


[heading Return Value]
      
`true` if the [link boost_asio.reference.io_service `io_service`] object is stopped, otherwise `false`. 




[endsect]



[section:use_service io_service::use_service]

[indexterm2 use_service..io_service] 
Obtain the service object corresponding to the given type. 


  template<
      typename ``[link boost_asio.reference.Service Service]``>
  friend Service & use_service(
      io_service & ios);


This function is used to locate a service object that corresponds to the given service type. If there is no existing implementation of the service, then the [link boost_asio.reference.io_service `io_service`] will create a new instance of the service.


[heading Parameters]
    

[variablelist
  
[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]

]


[heading Return Value]
      
The service interface implementing the specified service type. Ownership of the service interface is not transferred to the caller. 



[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:wrap io_service::wrap]

[indexterm2 wrap..io_service] 
Create a new handler that automatically dispatches the wrapped handler on the [link boost_asio.reference.io_service `io_service`]. 


  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 [link boost_asio.reference.io_service `io_service`] object's dispatch function.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be wrapped. The [link boost_asio.reference.io_service `io_service`] 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 [link boost_asio.reference.io_service `io_service`] object'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: 

   io_service.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: 

   io_service.dispatch(boost::bind(f, a1, ... an)); 







[endsect]



[section:_io_service io_service::~io_service]

[indexterm2 ~io_service..io_service] 
Destructor. 


  ~io_service();


On destruction, the [link boost_asio.reference.io_service `io_service`] performs the following sequence of operations:


* For each service object `svc` in the [link boost_asio.reference.io_service `io_service`] set, in reverse order of the beginning of service object lifetime, performs `svc->shutdown_service()`.


* Uninvoked handler objects that were scheduled for deferred invocation on the [link boost_asio.reference.io_service `io_service`], or any associated strand, are destroyed.


* For each service object `svc` in the [link boost_asio.reference.io_service `io_service`] set, in reverse order of the beginning of service object lifetime, performs `delete static_cast<io_service::service*>(svc)`.


[heading Remarks]
      
The destruction sequence described above permits programs to simplify their resource management by using `shared_ptr<>`. Where an object's lifetime is tied to the lifetime of a connection (or some other sequence of asynchronous operations), a `shared_ptr` to the object would be bound into the handlers for all asynchronous operations associated with it. This works as follows:


* When a single connection ends, all associated asynchronous operations complete. The corresponding handler objects are destroyed, and all `shared_ptr` references to the objects are destroyed.


* To shut down the whole program, the [link boost_asio.reference.io_service `io_service`] function `stop()` is called to terminate any `run()` calls as soon as possible. The [link boost_asio.reference.io_service `io_service`] destructor defined above destroys all handlers, causing all `shared_ptr` references to all connection objects to be destroyed. 




[endsect]



[endsect]

[section:io_service__id io_service::id]


Class used to uniquely identify a service. 


  class id :
    noncopyable


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service__id.id [*id]]]
    [Constructor. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:id io_service::id::id]

[indexterm2 id..io_service::id] 
Constructor. 


  id();



[endsect]



[endsect]

[section:io_service__service io_service::service]


Base class for all [link boost_asio.reference.io_service `io_service`] services. 


  class service :
    noncopyable


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service__service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service__service.service [*service]]]
    [Constructor. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__service._service [*~service]]]
    [Destructor. ]
  ]
  
]

[heading Private Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service__service.fork_service [*fork_service]]]
    [Handle notification of a fork-related event to perform any necessary housekeeping. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__service.shutdown_service [*shutdown_service]]]
    [Destroy all user-defined handler objects owned by the service. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:get_io_service io_service::service::get_io_service]

[indexterm2 get_io_service..io_service::service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:service io_service::service::service]

[indexterm2 service..io_service::service] 
Constructor. 


  service(
      boost::asio::io_service & owner);



[heading Parameters]
    

[variablelist
  
[[owner][The [link boost_asio.reference.io_service `io_service`] object that owns the service. ]]

]




[endsect]



[section:_service io_service::service::~service]

[indexterm2 ~service..io_service::service] 
Destructor. 


  virtual ~service();



[endsect]



[section:fork_service io_service::service::fork_service]

[indexterm2 fork_service..io_service::service] 
Handle notification of a fork-related event to perform any necessary housekeeping. 


  virtual void fork_service(
      boost::asio::io_service::fork_event event);


This function is not a pure virtual so that services only have to implement it if necessary. The default implementation does nothing. 


[endsect]



[section:shutdown_service io_service::service::shutdown_service]

[indexterm2 shutdown_service..io_service::service] 
Destroy all user-defined handler objects owned by the service. 


  void shutdown_service();



[endsect]



[endsect]

[section:io_service__strand io_service::strand]


Provides serialised handler execution. 


  class strand


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service__strand.dispatch [*dispatch]]]
    [Request the strand to invoke the given handler. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.get_io_service [*get_io_service]]]
    [Get the io_service associated with the strand. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.post [*post]]]
    [Request the strand to invoke the given handler and return immediately. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.strand [*strand]]]
    [Constructor. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.wrap [*wrap]]]
    [Create a new handler that automatically dispatches the wrapped handler on the strand. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand._strand [*~strand]]]
    [Destructor. ]
  ]
  
]

The [link boost_asio.reference.io_service__strand `io_service::strand`] class provides the ability to post and dispatch handlers with the guarantee that none of those handlers will execute concurrently.


[heading Order of handler invocation]
  
Given:


* a strand object `s` 


* an object `a` meeting completion handler requirements


* an object `a1` which is an arbitrary copy of `a` made by the implementation


* an object `b` meeting completion handler requirements


* an object `b1` which is an arbitrary copy of `b` made by the implementation

if any of the following conditions are true:


* `s.post(a)` happens-before `s.post(b)` 


* `s.post(a)` happens-before `s.dispatch(b)`, where the latter is performed outside the strand


* `s.dispatch(a)` happens-before `s.post(b)`, where the former is performed outside the strand


* `s.dispatch(a)` happens-before `s.dispatch(b)`, where both are performed outside the strand

then `asio_handler_invoke(a1, &a1)` happens-before `asio_handler_invoke(b1, &b1)`.

Note that in the following case: 

   async_op_1(..., s.wrap(a));
   async_op_2(..., s.wrap(b)); 


the completion of the first async operation will perform `s.dispatch(a)`, and the second will perform `s.dispatch(b)`, but the order in which those are performed is unspecified. That is, you cannot state whether one happens-before the other. Therefore none of the above conditions are met and no ordering guarantee is made.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.




[heading Requirements]

[*Header: ][^boost/asio/strand.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:dispatch io_service::strand::dispatch]

[indexterm2 dispatch..io_service::strand] 
Request the strand to invoke the given handler. 


  template<
      typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
  void dispatch(
      CompletionHandler handler);


This function is used to ask the strand to execute the given handler.

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 [link boost_asio.reference.io_service `io_service`]. The [link boost_asio.reference.io_service `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]

[indexterm2 get_io_service..io_service::strand] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the strand. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the strand uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `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]

[indexterm2 post..io_service::strand] 
Request the strand to invoke the given handler and return immediately. 


  template<
      typename ``[link boost_asio.reference.CompletionHandler CompletionHandler]``>
  void post(
      CompletionHandler 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 [link boost_asio.reference.io_service `io_service`]. The [link boost_asio.reference.io_service `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]

[indexterm2 strand..io_service::strand] 
Constructor. 


  strand(
      boost::asio::io_service & io_service);


Constructs the strand.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the strand will use to dispatch handlers that are ready to be run. ]]

]




[endsect]



[section:wrap io_service::strand::wrap]

[indexterm2 wrap..io_service::strand] 
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]

[indexterm2 ~strand..io_service::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 [link boost_asio.reference.io_service `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.work [*work]]]
    [Constructor notifies the io_service that work is starting. 

     Copy 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 [link boost_asio.reference.io_service `io_service`] when work starts and finishes. This ensures that the [link boost_asio.reference.io_service `io_service`] object'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. 

[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:get_io_service io_service::work::get_io_service]

[indexterm2 get_io_service..io_service::work] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the work. 


  boost::asio::io_service & get_io_service();



[endsect]


[section:work io_service::work::work]

[indexterm2 work..io_service::work] 
Constructor notifies the [link boost_asio.reference.io_service `io_service`] that work is starting. 


  explicit ``[link boost_asio.reference.io_service__work.work.overload1 work]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service__work.work.overload1 more...]]``


Copy constructor notifies the [link boost_asio.reference.io_service `io_service`] that work is starting. 


  ``[link boost_asio.reference.io_service__work.work.overload2 work]``(
      const work & other);
  ``  [''''&raquo;''' [link boost_asio.reference.io_service__work.work.overload2 more...]]``


[section:overload1 io_service::work::work (1 of 2 overloads)]


Constructor notifies the [link boost_asio.reference.io_service `io_service`] that work is starting. 


  work(
      boost::asio::io_service & io_service);


The constructor is used to inform the [link boost_asio.reference.io_service `io_service`] that some work has begun. This ensures that the [link boost_asio.reference.io_service `io_service`] object'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 [link boost_asio.reference.io_service `io_service`] that work is starting. 


  work(
      const work & other);


The constructor is used to inform the [link boost_asio.reference.io_service `io_service`] that some work has begun. This ensures that the [link boost_asio.reference.io_service `io_service`] object's `run()` function will not exit while the work is underway. 


[endsect]


[endsect]


[section:_work io_service::work::~work]

[indexterm2 ~work..io_service::work] 
Destructor notifies the [link boost_asio.reference.io_service `io_service`] that the work is complete. 


  ~work();


The destructor is used to inform the [link boost_asio.reference.io_service `io_service`] that some work has finished. Once the count of unfinished work reaches zero, the [link boost_asio.reference.io_service `io_service`] object'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. 

     Construct an address from an IPv4 address. 

     Construct an address from an IPv6 address. 

     Copy 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_loopback [*is_loopback]]]
    [Determine whether the address is a loopback address. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address.is_multicast [*is_multicast]]]
    [Determine whether the address is a multicast address. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address.is_unspecified [*is_unspecified]]]
    [Determine whether the address is unspecified. ]
  ]
  
  [
    [[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. 

     Assign from an IPv4 address. 

     Assign from an IPv6 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_lt__eq_ [*operator<=]]]
    [Compare addresses for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address.operator_eq__eq_ [*operator==]]]
    [Compare two addresses for equality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address.operator_gt_ [*operator>]]]
    [Compare addresses for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address.operator_gt__eq_ [*operator>=]]]
    [Compare addresses for ordering. ]
  ]
  
]

[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. 



[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:address ip::address::address]

[indexterm2 address..ip::address] 
Default constructor. 


  ``[link boost_asio.reference.ip__address.address.overload1 address]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.address.overload1 more...]]``


Construct an address from an IPv4 address. 


  ``[link boost_asio.reference.ip__address.address.overload2 address]``(
      const boost::asio::ip::address_v4 & ipv4_address);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.address.overload2 more...]]``


Construct an address from an IPv6 address. 


  ``[link boost_asio.reference.ip__address.address.overload3 address]``(
      const boost::asio::ip::address_v6 & ipv6_address);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.address.overload3 more...]]``


Copy constructor. 


  ``[link boost_asio.reference.ip__address.address.overload4 address]``(
      const address & other);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.address.overload4 more...]]``


[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]

[indexterm2 from_string..ip::address] 
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);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.from_string.overload1 more...]]``

  static address ``[link boost_asio.reference.ip__address.from_string.overload2 from_string]``(
      const char * str,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.from_string.overload2 more...]]``

  static address ``[link boost_asio.reference.ip__address.from_string.overload3 from_string]``(
      const std::string & str);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.from_string.overload3 more...]]``

  static address ``[link boost_asio.reference.ip__address.from_string.overload4 from_string]``(
      const std::string & str,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.from_string.overload4 more...]]``


[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);



[endsect]



[section:overload2 ip::address::from_string (2 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,
      boost::system::error_code & ec);



[endsect]



[section:overload3 ip::address::from_string (3 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 std::string & str);



[endsect]



[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. 


  static address from_string(
      const std::string & str,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:is_loopback ip::address::is_loopback]

[indexterm2 is_loopback..ip::address] 
Determine whether the address is a loopback address. 


  bool is_loopback() const;



[endsect]



[section:is_multicast ip::address::is_multicast]

[indexterm2 is_multicast..ip::address] 
Determine whether the address is a multicast address. 


  bool is_multicast() const;



[endsect]



[section:is_unspecified ip::address::is_unspecified]

[indexterm2 is_unspecified..ip::address] 
Determine whether the address is unspecified. 


  bool is_unspecified() const;



[endsect]



[section:is_v4 ip::address::is_v4]

[indexterm2 is_v4..ip::address] 
Get whether the address is an IP version 4 address. 


  bool is_v4() const;



[endsect]



[section:is_v6 ip::address::is_v6]

[indexterm2 is_v6..ip::address] 
Get whether the address is an IP version 6 address. 


  bool is_v6() const;



[endsect]



[section:operator_not__eq_ ip::address::operator!=]

[indexterm2 operator!=..ip::address] 
Compare two addresses for inequality. 


  friend bool operator!=(
      const address & a1,
      const address & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt_ ip::address::operator<]

[indexterm2 operator<..ip::address] 
Compare addresses for ordering. 


  friend bool operator<(
      const address & a1,
      const address & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt__lt_ ip::address::operator<<]

[indexterm2 operator<<..ip::address] 
Output an address as a string. 


  template<
      typename Elem,
      typename Traits>
  std::basic_ostream< Elem, Traits > & operator<<(
      std::basic_ostream< Elem, Traits > & os,
      const address & addr);


Used to output a human-readable string for a specified address.


[heading Parameters]
    

[variablelist
  
[[os][The output stream to which the string will be written.]]

[[addr][The address to be written.]]

]


[heading Return Value]
      
The output stream. 




[endsect]



[section:operator_lt__eq_ ip::address::operator<=]

[indexterm2 operator<=..ip::address] 
Compare addresses for ordering. 


  friend bool operator<=(
      const address & a1,
      const address & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:operator_eq_ ip::address::operator=]

[indexterm2 operator=..ip::address] 
Assign from another address. 


  address & ``[link boost_asio.reference.ip__address.operator_eq_.overload1 operator=]``(
      const address & other);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.operator_eq_.overload1 more...]]``


Assign from an IPv4 address. 


  address & ``[link boost_asio.reference.ip__address.operator_eq_.overload2 operator=]``(
      const boost::asio::ip::address_v4 & ipv4_address);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.operator_eq_.overload2 more...]]``


Assign from an IPv6 address. 


  address & ``[link boost_asio.reference.ip__address.operator_eq_.overload3 operator=]``(
      const boost::asio::ip::address_v6 & ipv6_address);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.operator_eq_.overload3 more...]]``


[section:overload1 ip::address::operator= (1 of 3 overloads)]


Assign from another address. 


  address & operator=(
      const address & other);



[endsect]



[section:overload2 ip::address::operator= (2 of 3 overloads)]


Assign from an IPv4 address. 


  address & operator=(
      const boost::asio::ip::address_v4 & ipv4_address);



[endsect]



[section:overload3 ip::address::operator= (3 of 3 overloads)]


Assign from an IPv6 address. 


  address & operator=(
      const boost::asio::ip::address_v6 & ipv6_address);



[endsect]


[endsect]


[section:operator_eq__eq_ ip::address::operator==]

[indexterm2 operator==..ip::address] 
Compare two addresses for equality. 


  friend bool operator==(
      const address & a1,
      const address & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt_ ip::address::operator>]

[indexterm2 operator>..ip::address] 
Compare addresses for ordering. 


  friend bool operator>(
      const address & a1,
      const address & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt__eq_ ip::address::operator>=]

[indexterm2 operator>=..ip::address] 
Compare addresses for ordering. 


  friend bool operator>=(
      const address & a1,
      const address & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:to_string ip::address::to_string]

[indexterm2 to_string..ip::address] 
Get the address as a string in dotted decimal format. 


  std::string ``[link boost_asio.reference.ip__address.to_string.overload1 to_string]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.to_string.overload1 more...]]``

  std::string ``[link boost_asio.reference.ip__address.to_string.overload2 to_string]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address.to_string.overload2 more...]]``


[section:overload1 ip::address::to_string (1 of 2 overloads)]


Get the address as a string in dotted decimal format. 


  std::string to_string() const;



[endsect]



[section:overload2 ip::address::to_string (2 of 2 overloads)]


Get the address as a string in dotted decimal format. 


  std::string to_string(
      boost::system::error_code & ec) const;



[endsect]


[endsect]


[section:to_v4 ip::address::to_v4]

[indexterm2 to_v4..ip::address] 
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]

[indexterm2 to_v6..ip::address] 
Get the address as an IP version 6 address. 


  boost::asio::ip::address_v6 to_v6() const;



[endsect]



[endsect]

[section:ip__address_v4 ip::address_v4]


Implements IP version 4 style addresses. 


  class address_v4


[heading Types]
[table
  [[Name][Description]]

  [

    [[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_v4.address_v4 [*address_v4]]]
    [Default constructor. 

     Construct an address from raw bytes. 

     Construct an address from a unsigned long in host byte order. 

     Copy constructor. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address_v4.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. 

     Obtain an address object that represents the broadcast address that corresponds to the specified address and netmask. ]
  ]
  
  [
    [[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_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_loopback [*is_loopback]]]
    [Determine whether the address is a loopback 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.is_unspecified [*is_unspecified]]]
    [Determine whether the address is unspecified. ]
  ]
  
  [
    [[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_v4.to_bytes [*to_bytes]]]
    [Get the address in bytes, in network byte order. ]
  ]
  
  [
    [[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_v4.to_ulong [*to_ulong]]]
    [Get the address as an unsigned long in host byte order. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__address_v4.operator_not__eq_ [*operator!=]]]
    [Compare two addresses for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address_v4.operator_lt_ [*operator<]]]
    [Compare addresses for ordering. ]
  ]
  
  [
    [[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]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__address_v4.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.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:address_v4 ip::address_v4::address_v4]

[indexterm2 address_v4..ip::address_v4] 
Default constructor. 


  ``[link boost_asio.reference.ip__address_v4.address_v4.overload1 address_v4]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.address_v4.overload1 more...]]``


Construct an address from raw bytes. 


  explicit ``[link boost_asio.reference.ip__address_v4.address_v4.overload2 address_v4]``(
      const bytes_type & bytes);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.address_v4.overload2 more...]]``


Construct an address from a unsigned long in host byte order. 


  explicit ``[link boost_asio.reference.ip__address_v4.address_v4.overload3 address_v4]``(
      unsigned long addr);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.address_v4.overload3 more...]]``


Copy constructor. 


  ``[link boost_asio.reference.ip__address_v4.address_v4.overload4 address_v4]``(
      const address_v4 & other);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.address_v4.overload4 more...]]``


[section:overload1 ip::address_v4::address_v4 (1 of 4 overloads)]


Default constructor. 


  address_v4();



[endsect]



[section:overload2 ip::address_v4::address_v4 (2 of 4 overloads)]


Construct an address from raw bytes. 


  address_v4(
      const bytes_type & bytes);



[endsect]



[section:overload3 ip::address_v4::address_v4 (3 of 4 overloads)]


Construct an address from a unsigned long in host byte order. 


  address_v4(
      unsigned long addr);



[endsect]



[section:overload4 ip::address_v4::address_v4 (4 of 4 overloads)]


Copy constructor. 


  address_v4(
      const address_v4 & other);



[endsect]


[endsect]


[section:any ip::address_v4::any]

[indexterm2 any..ip::address_v4] 
Obtain an address object that represents any address. 


  static address_v4 any();



[endsect]


[section:broadcast ip::address_v4::broadcast]

[indexterm2 broadcast..ip::address_v4] 
Obtain an address object that represents the broadcast address. 


  static address_v4 ``[link boost_asio.reference.ip__address_v4.broadcast.overload1 broadcast]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.broadcast.overload1 more...]]``


Obtain an address object that represents the broadcast address that corresponds to the specified address and netmask. 


  static address_v4 ``[link boost_asio.reference.ip__address_v4.broadcast.overload2 broadcast]``(
      const address_v4 & addr,
      const address_v4 & mask);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.broadcast.overload2 more...]]``


[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]

[indexterm2 bytes_type..ip::address_v4] 
The type used to represent an address as an array of bytes. 


  typedef array< unsigned char, 4 > bytes_type;




[heading Remarks]
      
This type is defined in terms of the C++0x template `std::array` when it is available. Otherwise, it uses `boost:array`. 



[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:from_string ip::address_v4::from_string]

[indexterm2 from_string..ip::address_v4] 
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);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.from_string.overload1 more...]]``

  static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload2 from_string]``(
      const char * str,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.from_string.overload2 more...]]``

  static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload3 from_string]``(
      const std::string & str);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.from_string.overload3 more...]]``

  static address_v4 ``[link boost_asio.reference.ip__address_v4.from_string.overload4 from_string]``(
      const std::string & str,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.from_string.overload4 more...]]``


[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);



[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);



[endsect]


[endsect]


[section:is_class_a ip::address_v4::is_class_a]

[indexterm2 is_class_a..ip::address_v4] 
Determine whether the address is a class A address. 


  bool is_class_a() const;



[endsect]



[section:is_class_b ip::address_v4::is_class_b]

[indexterm2 is_class_b..ip::address_v4] 
Determine whether the address is a class B address. 


  bool is_class_b() const;



[endsect]



[section:is_class_c ip::address_v4::is_class_c]

[indexterm2 is_class_c..ip::address_v4] 
Determine whether the address is a class C address. 


  bool is_class_c() const;



[endsect]



[section:is_loopback ip::address_v4::is_loopback]

[indexterm2 is_loopback..ip::address_v4] 
Determine whether the address is a loopback address. 


  bool is_loopback() const;



[endsect]



[section:is_multicast ip::address_v4::is_multicast]

[indexterm2 is_multicast..ip::address_v4] 
Determine whether the address is a multicast address. 


  bool is_multicast() const;



[endsect]



[section:is_unspecified ip::address_v4::is_unspecified]

[indexterm2 is_unspecified..ip::address_v4] 
Determine whether the address is unspecified. 


  bool is_unspecified() const;



[endsect]



[section:loopback ip::address_v4::loopback]

[indexterm2 loopback..ip::address_v4] 
Obtain an address object that represents the loopback address. 


  static address_v4 loopback();



[endsect]



[section:netmask ip::address_v4::netmask]

[indexterm2 netmask..ip::address_v4] 
Obtain the netmask that corresponds to the address, based on its address class. 


  static address_v4 netmask(
      const address_v4 & addr);



[endsect]



[section:operator_not__eq_ ip::address_v4::operator!=]

[indexterm2 operator!=..ip::address_v4] 
Compare two addresses for inequality. 


  friend bool operator!=(
      const address_v4 & a1,
      const address_v4 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt_ ip::address_v4::operator<]

[indexterm2 operator<..ip::address_v4] 
Compare addresses for ordering. 


  friend bool operator<(
      const address_v4 & a1,
      const address_v4 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt__lt_ ip::address_v4::operator<<]

[indexterm2 operator<<..ip::address_v4] 
Output an address as a string. 


  template<
      typename Elem,
      typename Traits>
  std::basic_ostream< Elem, Traits > & operator<<(
      std::basic_ostream< Elem, Traits > & os,
      const address_v4 & addr);


Used to output a human-readable string for a specified address.


[heading Parameters]
    

[variablelist
  
[[os][The output stream to which the string will be written.]]

[[addr][The address to be written.]]

]


[heading Return Value]
      
The output stream. 




[endsect]



[section:operator_lt__eq_ ip::address_v4::operator<=]

[indexterm2 operator<=..ip::address_v4] 
Compare addresses for ordering. 


  friend bool operator<=(
      const address_v4 & a1,
      const address_v4 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ ip::address_v4::operator=]

[indexterm2 operator=..ip::address_v4] 
Assign from another address. 


  address_v4 & operator=(
      const address_v4 & other);



[endsect]



[section:operator_eq__eq_ ip::address_v4::operator==]

[indexterm2 operator==..ip::address_v4] 
Compare two addresses for equality. 


  friend bool operator==(
      const address_v4 & a1,
      const address_v4 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt_ ip::address_v4::operator>]

[indexterm2 operator>..ip::address_v4] 
Compare addresses for ordering. 


  friend bool operator>(
      const address_v4 & a1,
      const address_v4 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt__eq_ ip::address_v4::operator>=]

[indexterm2 operator>=..ip::address_v4] 
Compare addresses for ordering. 


  friend bool operator>=(
      const address_v4 & a1,
      const address_v4 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v4.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:to_bytes ip::address_v4::to_bytes]

[indexterm2 to_bytes..ip::address_v4] 
Get the address in bytes, in network byte order. 


  bytes_type to_bytes() const;



[endsect]


[section:to_string ip::address_v4::to_string]

[indexterm2 to_string..ip::address_v4] 
Get the address as a string in dotted decimal format. 


  std::string ``[link boost_asio.reference.ip__address_v4.to_string.overload1 to_string]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.to_string.overload1 more...]]``

  std::string ``[link boost_asio.reference.ip__address_v4.to_string.overload2 to_string]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v4.to_string.overload2 more...]]``


[section:overload1 ip::address_v4::to_string (1 of 2 overloads)]


Get the address as a string in dotted decimal format. 


  std::string to_string() const;



[endsect]



[section:overload2 ip::address_v4::to_string (2 of 2 overloads)]


Get the address as a string in dotted decimal format. 


  std::string to_string(
      boost::system::error_code & ec) const;



[endsect]


[endsect]


[section:to_ulong ip::address_v4::to_ulong]

[indexterm2 to_ulong..ip::address_v4] 
Get the address as an unsigned long in host byte order. 


  unsigned long to_ulong() const;



[endsect]



[endsect]

[section:ip__address_v6 ip::address_v6]


Implements IP version 6 style addresses. 


  class address_v6


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__address_v6.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_v6.address_v6 [*address_v6]]]
    [Default constructor. 

     Construct an address from raw bytes and scope ID. 

     Copy 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__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_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, in network byte order. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address_v6.to_string [*to_string]]]
    [Get the address as a string. ]
  ]
  
  [
    [[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. ]
  ]
  
]

[heading Friends]
[table
  [[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__address_v6.operator_gt_ [*operator>]]]
    [Compare addresses for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__address_v6.operator_gt__eq_ [*operator>=]]]
    [Compare addresses for ordering. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__address_v6.operator_lt__lt_ [*operator<<]]]
    [Output an address 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.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:address_v6 ip::address_v6::address_v6]

[indexterm2 address_v6..ip::address_v6] 
Default constructor. 


  ``[link boost_asio.reference.ip__address_v6.address_v6.overload1 address_v6]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.address_v6.overload1 more...]]``


Construct an address from raw bytes and scope ID. 


  explicit ``[link boost_asio.reference.ip__address_v6.address_v6.overload2 address_v6]``(
      const bytes_type & bytes,
      unsigned long scope_id = 0);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.address_v6.overload2 more...]]``


Copy constructor. 


  ``[link boost_asio.reference.ip__address_v6.address_v6.overload3 address_v6]``(
      const address_v6 & other);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.address_v6.overload3 more...]]``


[section:overload1 ip::address_v6::address_v6 (1 of 3 overloads)]


Default constructor. 


  address_v6();



[endsect]



[section:overload2 ip::address_v6::address_v6 (2 of 3 overloads)]


Construct an address from raw bytes and scope ID. 


  address_v6(
      const bytes_type & bytes,
      unsigned long scope_id = 0);



[endsect]



[section:overload3 ip::address_v6::address_v6 (3 of 3 overloads)]


Copy constructor. 


  address_v6(
      const address_v6 & other);



[endsect]


[endsect]


[section:any ip::address_v6::any]

[indexterm2 any..ip::address_v6] 
Obtain an address object that represents any address. 


  static address_v6 any();



[endsect]



[section:bytes_type ip::address_v6::bytes_type]

[indexterm2 bytes_type..ip::address_v6] 
The type used to represent an address as an array of bytes. 


  typedef array< unsigned char, 16 > bytes_type;




[heading Remarks]
      
This type is defined in terms of the C++0x template `std::array` when it is available. Otherwise, it uses `boost:array`. 



[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:from_string ip::address_v6::from_string]

[indexterm2 from_string..ip::address_v6] 
Create an address from an IP address string. 


  static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload1 from_string]``(
      const char * str);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.from_string.overload1 more...]]``

  static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload2 from_string]``(
      const char * str,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.from_string.overload2 more...]]``

  static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload3 from_string]``(
      const std::string & str);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.from_string.overload3 more...]]``

  static address_v6 ``[link boost_asio.reference.ip__address_v6.from_string.overload4 from_string]``(
      const std::string & str,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.from_string.overload4 more...]]``


[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);



[endsect]



[section:overload2 ip::address_v6::from_string (2 of 4 overloads)]


Create an address from an IP address string. 


  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: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);



[endsect]


[endsect]


[section:is_link_local ip::address_v6::is_link_local]

[indexterm2 is_link_local..ip::address_v6] 
Determine whether the address is link local. 


  bool is_link_local() const;



[endsect]



[section:is_loopback ip::address_v6::is_loopback]

[indexterm2 is_loopback..ip::address_v6] 
Determine whether the address is a loopback address. 


  bool is_loopback() const;



[endsect]



[section:is_multicast ip::address_v6::is_multicast]

[indexterm2 is_multicast..ip::address_v6] 
Determine whether the address is a multicast address. 


  bool is_multicast() const;



[endsect]



[section:is_multicast_global ip::address_v6::is_multicast_global]

[indexterm2 is_multicast_global..ip::address_v6] 
Determine whether the address is a global multicast address. 


  bool is_multicast_global() const;



[endsect]



[section:is_multicast_link_local ip::address_v6::is_multicast_link_local]

[indexterm2 is_multicast_link_local..ip::address_v6] 
Determine whether the address is a link-local multicast address. 


  bool is_multicast_link_local() const;



[endsect]



[section:is_multicast_node_local ip::address_v6::is_multicast_node_local]

[indexterm2 is_multicast_node_local..ip::address_v6] 
Determine whether the address is a node-local multicast address. 


  bool is_multicast_node_local() const;



[endsect]



[section:is_multicast_org_local ip::address_v6::is_multicast_org_local]

[indexterm2 is_multicast_org_local..ip::address_v6] 
Determine whether the address is a org-local multicast address. 


  bool is_multicast_org_local() const;



[endsect]



[section:is_multicast_site_local ip::address_v6::is_multicast_site_local]

[indexterm2 is_multicast_site_local..ip::address_v6] 
Determine whether the address is a site-local multicast address. 


  bool is_multicast_site_local() const;



[endsect]



[section:is_site_local ip::address_v6::is_site_local]

[indexterm2 is_site_local..ip::address_v6] 
Determine whether the address is site local. 


  bool is_site_local() const;



[endsect]



[section:is_unspecified ip::address_v6::is_unspecified]

[indexterm2 is_unspecified..ip::address_v6] 
Determine whether the address is unspecified. 


  bool is_unspecified() const;



[endsect]



[section:is_v4_compatible ip::address_v6::is_v4_compatible]

[indexterm2 is_v4_compatible..ip::address_v6] 
Determine whether the address is an IPv4-compatible address. 


  bool is_v4_compatible() const;



[endsect]



[section:is_v4_mapped ip::address_v6::is_v4_mapped]

[indexterm2 is_v4_mapped..ip::address_v6] 
Determine whether the address is a mapped IPv4 address. 


  bool is_v4_mapped() const;



[endsect]



[section:loopback ip::address_v6::loopback]

[indexterm2 loopback..ip::address_v6] 
Obtain an address object that represents the loopback address. 


  static address_v6 loopback();



[endsect]



[section:operator_not__eq_ ip::address_v6::operator!=]

[indexterm2 operator!=..ip::address_v6] 
Compare two addresses for inequality. 


  friend bool operator!=(
      const address_v6 & a1,
      const address_v6 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt_ ip::address_v6::operator<]

[indexterm2 operator<..ip::address_v6] 
Compare addresses for ordering. 


  friend bool operator<(
      const address_v6 & a1,
      const address_v6 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt__lt_ ip::address_v6::operator<<]

[indexterm2 operator<<..ip::address_v6] 
Output an address as a string. 


  template<
      typename Elem,
      typename Traits>
  std::basic_ostream< Elem, Traits > & operator<<(
      std::basic_ostream< Elem, Traits > & os,
      const address_v6 & addr);


Used to output a human-readable string for a specified address.


[heading Parameters]
    

[variablelist
  
[[os][The output stream to which the string will be written.]]

[[addr][The address to be written.]]

]


[heading Return Value]
      
The output stream. 




[endsect]



[section:operator_lt__eq_ ip::address_v6::operator<=]

[indexterm2 operator<=..ip::address_v6] 
Compare addresses for ordering. 


  friend bool operator<=(
      const address_v6 & a1,
      const address_v6 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ ip::address_v6::operator=]

[indexterm2 operator=..ip::address_v6] 
Assign from another address. 


  address_v6 & operator=(
      const address_v6 & other);



[endsect]



[section:operator_eq__eq_ ip::address_v6::operator==]

[indexterm2 operator==..ip::address_v6] 
Compare two addresses for equality. 


  friend bool operator==(
      const address_v6 & a1,
      const address_v6 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt_ ip::address_v6::operator>]

[indexterm2 operator>..ip::address_v6] 
Compare addresses for ordering. 


  friend bool operator>(
      const address_v6 & a1,
      const address_v6 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt__eq_ ip::address_v6::operator>=]

[indexterm2 operator>=..ip::address_v6] 
Compare addresses for ordering. 


  friend bool operator>=(
      const address_v6 & a1,
      const address_v6 & a2);


[heading Requirements]

[*Header: ][^boost/asio/ip/address_v6.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:scope_id ip::address_v6::scope_id]

[indexterm2 scope_id..ip::address_v6] 
The scope ID of the address. 


  unsigned long ``[link boost_asio.reference.ip__address_v6.scope_id.overload1 scope_id]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.scope_id.overload1 more...]]``

  void ``[link boost_asio.reference.ip__address_v6.scope_id.overload2 scope_id]``(
      unsigned long id);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.scope_id.overload2 more...]]``


[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. 


[endsect]


[endsect]


[section:to_bytes ip::address_v6::to_bytes]

[indexterm2 to_bytes..ip::address_v6] 
Get the address in bytes, in network byte order. 


  bytes_type to_bytes() const;



[endsect]


[section:to_string ip::address_v6::to_string]

[indexterm2 to_string..ip::address_v6] 
Get the address as a string. 


  std::string ``[link boost_asio.reference.ip__address_v6.to_string.overload1 to_string]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.to_string.overload1 more...]]``

  std::string ``[link boost_asio.reference.ip__address_v6.to_string.overload2 to_string]``(
      boost::system::error_code & ec) const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__address_v6.to_string.overload2 more...]]``


[section:overload1 ip::address_v6::to_string (1 of 2 overloads)]


Get the address as a string. 


  std::string to_string() const;



[endsect]



[section:overload2 ip::address_v6::to_string (2 of 2 overloads)]


Get the address as a string. 


  std::string to_string(
      boost::system::error_code & ec) const;



[endsect]


[endsect]


[section:to_v4 ip::address_v6::to_v4]

[indexterm2 to_v4..ip::address_v6] 
Converts an IPv4-mapped or IPv4-compatible address to an IPv4 address. 


  address_v4 to_v4() const;



[endsect]



[section:v4_compatible ip::address_v6::v4_compatible]

[indexterm2 v4_compatible..ip::address_v6] 
Create an IPv4-compatible IPv6 address. 


  static address_v6 v4_compatible(
      const address_v4 & addr);



[endsect]



[section:v4_mapped ip::address_v6::v4_mapped]

[indexterm2 v4_mapped..ip::address_v6] 
Create an IPv4-mapped IPv6 address. 


  static address_v6 v4_mapped(
      const address_v4 & addr);



[endsect]



[endsect]

[section:ip__basic_endpoint ip::basic_endpoint]


Describes an endpoint for a version-independent IP socket. 


  template<
      typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
  class basic_endpoint


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
    [Get the IP address associated with the endpoint. 

     Set the IP address associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     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. 

     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. 

     Copy 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. 

     Set 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_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[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.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:address ip::basic_endpoint::address]

[indexterm2 address..ip::basic_endpoint] 
Get the IP address associated with the endpoint. 


  boost::asio::ip::address ``[link boost_asio.reference.ip__basic_endpoint.address.overload1 address]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.address.overload1 more...]]``


Set the IP address associated with the endpoint. 


  void ``[link boost_asio.reference.ip__basic_endpoint.address.overload2 address]``(
      const boost::asio::ip::address & addr);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.address.overload2 more...]]``


[section:overload1 ip::basic_endpoint::address (1 of 2 overloads)]


Get the IP address associated with the endpoint. 


  boost::asio::ip::address address() const;



[endsect]



[section:overload2 ip::basic_endpoint::address (2 of 2 overloads)]


Set the IP address associated with the endpoint. 


  void address(
      const boost::asio::ip::address & addr);



[endsect]


[endsect]

[section:basic_endpoint ip::basic_endpoint::basic_endpoint]

[indexterm2 basic_endpoint..ip::basic_endpoint] 
Default constructor. 


  ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload1 more...]]``


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. 


  ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
      const InternetProtocol & internet_protocol,
      unsigned short port_num);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload2 more...]]``


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. 


  ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
      const boost::asio::ip::address & addr,
      unsigned short port_num);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload3 more...]]``


Copy constructor. 


  ``[link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
      const basic_endpoint & other);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.basic_endpoint.overload4 more...]]``


[section:overload1 ip::basic_endpoint::basic_endpoint (1 of 4 overloads)]


Default constructor. 


  basic_endpoint();



[endsect]



[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. 


  basic_endpoint(
      const InternetProtocol & internet_protocol,
      unsigned short port_num);



[heading Examples]
  
To initialise an IPv4 TCP endpoint for port 1234, use: 

   boost::asio::ip::tcp::endpoint ep(boost::asio::ip::tcp::v4(), 1234);




To specify an IPv6 UDP endpoint for port 9876, use: 

   boost::asio::ip::udp::endpoint ep(boost::asio::ip::udp::v6(), 9876);





[endsect]



[section:overload3 ip::basic_endpoint::basic_endpoint (3 of 4 overloads)]


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);



[endsect]



[section:overload4 ip::basic_endpoint::basic_endpoint (4 of 4 overloads)]


Copy constructor. 


  basic_endpoint(
      const basic_endpoint & other);



[endsect]


[endsect]


[section:capacity ip::basic_endpoint::capacity]

[indexterm2 capacity..ip::basic_endpoint] 
Get the capacity of the endpoint in the native type. 


  std::size_t capacity() const;



[endsect]


[section:data ip::basic_endpoint::data]

[indexterm2 data..ip::basic_endpoint] 
Get the underlying endpoint in the native type. 


  data_type * ``[link boost_asio.reference.ip__basic_endpoint.data.overload1 data]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.data.overload1 more...]]``

  const data_type * ``[link boost_asio.reference.ip__basic_endpoint.data.overload2 data]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.data.overload2 more...]]``


[section:overload1 ip::basic_endpoint::data (1 of 2 overloads)]


Get the underlying endpoint in the native type. 


  data_type * data();



[endsect]



[section:overload2 ip::basic_endpoint::data (2 of 2 overloads)]


Get the underlying endpoint in the native type. 


  const data_type * data() const;



[endsect]


[endsect]


[section:data_type ip::basic_endpoint::data_type]

[indexterm2 data_type..ip::basic_endpoint] 
The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. 


  typedef implementation_defined data_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_not__eq_ ip::basic_endpoint::operator!=]

[indexterm2 operator!=..ip::basic_endpoint] 
Compare two endpoints for inequality. 


  friend bool operator!=(
      const basic_endpoint< InternetProtocol > & e1,
      const basic_endpoint< InternetProtocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt_ ip::basic_endpoint::operator<]

[indexterm2 operator<..ip::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator<(
      const basic_endpoint< InternetProtocol > & e1,
      const basic_endpoint< InternetProtocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt__lt_ ip::basic_endpoint::operator<<]

[indexterm2 operator<<..ip::basic_endpoint] 
Output an endpoint as a string. 


  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.


[heading Parameters]
    

[variablelist
  
[[os][The output stream to which the string will be written.]]

[[endpoint][The endpoint to be written.]]

]


[heading Return Value]
      
The output stream. 




[endsect]



[section:operator_lt__eq_ ip::basic_endpoint::operator<=]

[indexterm2 operator<=..ip::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator<=(
      const basic_endpoint< InternetProtocol > & e1,
      const basic_endpoint< InternetProtocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ ip::basic_endpoint::operator=]

[indexterm2 operator=..ip::basic_endpoint] 
Assign from another endpoint. 


  basic_endpoint & operator=(
      const basic_endpoint & other);



[endsect]



[section:operator_eq__eq_ ip::basic_endpoint::operator==]

[indexterm2 operator==..ip::basic_endpoint] 
Compare two endpoints for equality. 


  friend bool operator==(
      const basic_endpoint< InternetProtocol > & e1,
      const basic_endpoint< InternetProtocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt_ ip::basic_endpoint::operator>]

[indexterm2 operator>..ip::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator>(
      const basic_endpoint< InternetProtocol > & e1,
      const basic_endpoint< InternetProtocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt__eq_ ip::basic_endpoint::operator>=]

[indexterm2 operator>=..ip::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator>=(
      const basic_endpoint< InternetProtocol > & e1,
      const basic_endpoint< InternetProtocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:port ip::basic_endpoint::port]

[indexterm2 port..ip::basic_endpoint] 
Get the port associated with the endpoint. The port number is always in the host's byte order. 


  unsigned short ``[link boost_asio.reference.ip__basic_endpoint.port.overload1 port]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.port.overload1 more...]]``


Set the port associated with the endpoint. The port number is always in the host's byte order. 


  void ``[link boost_asio.reference.ip__basic_endpoint.port.overload2 port]``(
      unsigned short port_num);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_endpoint.port.overload2 more...]]``


[section:overload1 ip::basic_endpoint::port (1 of 2 overloads)]


Get the port associated with the endpoint. The port number is always in the host's byte order. 


  unsigned short port() const;



[endsect]



[section:overload2 ip::basic_endpoint::port (2 of 2 overloads)]


Set the port associated with the endpoint. The port number is always in the host's byte order. 


  void port(
      unsigned short port_num);



[endsect]


[endsect]


[section:protocol ip::basic_endpoint::protocol]

[indexterm2 protocol..ip::basic_endpoint] 
The protocol associated with the endpoint. 


  protocol_type protocol() const;



[endsect]



[section:protocol_type ip::basic_endpoint::protocol_type]

[indexterm2 protocol_type..ip::basic_endpoint] 
The protocol type associated with the endpoint. 


  typedef InternetProtocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:resize ip::basic_endpoint::resize]

[indexterm2 resize..ip::basic_endpoint] 
Set the underlying size of the endpoint in the native type. 


  void resize(
      std::size_t new_size);



[endsect]



[section:size ip::basic_endpoint::size]

[indexterm2 size..ip::basic_endpoint] 
Get the underlying size of the endpoint in the native type. 


  std::size_t size() const;



[endsect]



[endsect]

[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 >


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
    [The iterator type. ]
  
  ]

  [

    [[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.async_resolve [*async_resolve]]]
    [Asynchronously perform forward resolution of a query to a list of entries. 

     Asynchronously perform reverse resolution of an endpoint 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.resolve [*resolve]]]
    [Perform forward resolution of a query to a list of entries. 

     Perform reverse resolution of an endpoint to a list of entries. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.ip__basic_resolver `ip::basic_resolver`] class template provides the ability to resolve a query to a list of endpoints.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:async_resolve ip::basic_resolver::async_resolve]

[indexterm2 async_resolve..ip::basic_resolver] 
Asynchronously perform forward resolution of 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);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.async_resolve.overload1 more...]]``


Asynchronously perform reverse resolution of an endpoint to a list of entries. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.async_resolve.overload2 more...]]``


[section:overload1 ip::basic_resolver::async_resolve (1 of 2 overloads)]


Asynchronously perform forward resolution of a query to a list of entries. 


  template<
      typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
  void async_resolve(
      const query & q,
      ResolveHandler handler);


This function is used to asynchronously resolve a query into a list of endpoint entries.


[heading Parameters]
    

[variablelist
  
[[q][A query object that determines what endpoints will be returned.]]

[[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()`.]]

]


[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. 


[endsect]



[section:overload2 ip::basic_resolver::async_resolve (2 of 2 overloads)]


Asynchronously perform reverse resolution of an endpoint to a list of entries. 


  template<
      typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
  void async_resolve(
      const endpoint_type & e,
      ResolveHandler handler);


This function is used to asynchronously resolve an endpoint into a list of endpoint entries.


[heading Parameters]
    

[variablelist
  
[[e][An endpoint object that determines what endpoints will be returned.]]

[[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()`.]]

]


[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. 


[endsect]


[endsect]


[section:basic_resolver ip::basic_resolver::basic_resolver]

[indexterm2 basic_resolver..ip::basic_resolver] 
Constructor. 


  basic_resolver(
      boost::asio::io_service & io_service);


This constructor creates a [link boost_asio.reference.ip__basic_resolver `ip::basic_resolver`].


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the resolver will use to dispatch handlers for any asynchronous operations performed on the timer. ]]

]




[endsect]



[section:cancel ip::basic_resolver::cancel]

[indexterm2 cancel..ip::basic_resolver] 
Cancel any asynchronous operations that are waiting on the resolver. 


  void cancel();


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]

[indexterm2 endpoint_type..ip::basic_resolver] 
The endpoint type. 


  typedef InternetProtocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:get_implementation ip::basic_resolver::get_implementation]

[indexterm2 get_implementation..ip::basic_resolver] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.ip__basic_resolver.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.ip__basic_resolver.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.get_implementation.overload2 more...]]``


[section:overload1 ip::basic_resolver::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 ip::basic_resolver::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service ip::basic_resolver::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..ip::basic_resolver] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service ip::basic_resolver::get_service]

[indexterm2 get_service..ip::basic_resolver] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.ip__basic_resolver.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.ip__basic_resolver.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.get_service.overload2 more...]]``


[section:overload1 ip::basic_resolver::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 ip::basic_resolver::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation ip::basic_resolver::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..ip::basic_resolver] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type ip::basic_resolver::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..ip::basic_resolver] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:iterator ip::basic_resolver::iterator]

[indexterm2 iterator..ip::basic_resolver] 
The iterator type. 


  typedef basic_resolver_iterator< InternetProtocol > iterator;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.difference_type [*difference_type]]]
    [The type used for the distance between two iterators. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.iterator_category [*iterator_category]]]
    [The iterator category. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.pointer [*pointer]]]
    [The type of the result of applying operator->() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.reference [*reference]]]
    [The type of the result of applying operator*() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.value_type [*value_type]]]
    [The type of the value pointed to by the iterator. ]
  
  ]

]

[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_iterator.create [*create]]]
    [Create an iterator from an addrinfo list returned by getaddrinfo. 

     Create an iterator from an endpoint, host name and service name. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]]
    [Dereference an iterator. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]]
    [Increment operator (prefix). 

     Increment operator (postfix). ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]]
    [Dereference an iterator. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]]
    [Test two iterators for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]]
    [Test two iterators for equality. ]
  ]
  
]

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: 

   const basic_resolver_entry<InternetProtocol> 





[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:protocol_type ip::basic_resolver::protocol_type]

[indexterm2 protocol_type..ip::basic_resolver] 
The protocol type. 


  typedef InternetProtocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:query ip::basic_resolver::query]

[indexterm2 query..ip::basic_resolver] 
The query type. 


  typedef basic_resolver_query< InternetProtocol > query;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__basic_resolver_query.flags [*flags]]]
    [A bitmask type (C++ Std \[lib.bitmask.types\]). ]
  
  ]

  [

    [[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. 

     Construct with specified service name for a given protocol. 

     Construct with specified host name and service name for any protocol. 

     Construct with specified host name and service name for a given 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. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]]
    [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]]
    [Determine the canonical name of the host specified in the query. ]
  ]

  [
    [[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. ]
  ]

  [
    [[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. ]
  ]

]

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. 




[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:resolve ip::basic_resolver::resolve]

[indexterm2 resolve..ip::basic_resolver] 
Perform forward resolution of a query to a list of entries. 


  iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload1 resolve]``(
      const query & q);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.resolve.overload1 more...]]``

  iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload2 resolve]``(
      const query & q,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.resolve.overload2 more...]]``


Perform reverse resolution of an endpoint to a list of entries. 


  iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload3 resolve]``(
      const endpoint_type & e);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.resolve.overload3 more...]]``

  iterator ``[link boost_asio.reference.ip__basic_resolver.resolve.overload4 resolve]``(
      const endpoint_type & e,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver.resolve.overload4 more...]]``


[section:overload1 ip::basic_resolver::resolve (1 of 4 overloads)]


Perform forward resolution of a query to a list of entries. 


  iterator resolve(
      const query & q);


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.]]

]


[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.]]

]


[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:overload2 ip::basic_resolver::resolve (2 of 4 overloads)]


Perform forward resolution of 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.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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.

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)]


Perform reverse resolution of an endpoint to a list of entries. 


  iterator resolve(
      const endpoint_type & e);


This function is used to resolve an endpoint into a list of endpoint entries.


[heading Parameters]
    

[variablelist
  
[[e][An endpoint 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.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[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_resolver::resolve (4 of 4 overloads)]


Perform reverse resolution of 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.


[heading Parameters]
    

[variablelist
  
[[e][An endpoint object that determines what endpoints will be returned.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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.

A successful call to this function is guaranteed to return at least one entry. 


[endsect]


[endsect]


[section:service ip::basic_resolver::service]


['Inherited from basic_io_object.]

[indexterm2 service..ip::basic_resolver] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type ip::basic_resolver::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..ip::basic_resolver] 
The type of the service that will be used to provide I/O operations. 


  typedef ResolverService service_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]

[section:ip__basic_resolver_entry ip::basic_resolver_entry]


An entry produced by a resolver. 


  template<
      typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
  class basic_resolver_entry


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_entry.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint entry. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry [*basic_resolver_entry]]]
    [Default constructor. 

     Construct with specified endpoint, host name and service name. ]
  ]
  
  [
    [[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. ]
  ]
  
]

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.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_entry.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:basic_resolver_entry ip::basic_resolver_entry::basic_resolver_entry]

[indexterm2 basic_resolver_entry..ip::basic_resolver_entry] 
Default constructor. 


  ``[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload1 basic_resolver_entry]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload1 more...]]``


Construct with specified endpoint, host name and service name. 


  ``[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload2 basic_resolver_entry]``(
      const endpoint_type & ep,
      const std::string & host,
      const std::string & service);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry.overload2 more...]]``


[section:overload1 ip::basic_resolver_entry::basic_resolver_entry (1 of 2 overloads)]


Default constructor. 


  basic_resolver_entry();



[endsect]



[section:overload2 ip::basic_resolver_entry::basic_resolver_entry (2 of 2 overloads)]


Construct with specified endpoint, host name and service name. 


  basic_resolver_entry(
      const endpoint_type & ep,
      const std::string & host,
      const std::string & service);



[endsect]


[endsect]


[section:endpoint ip::basic_resolver_entry::endpoint]

[indexterm2 endpoint..ip::basic_resolver_entry] 
Get the endpoint associated with the entry. 


  endpoint_type endpoint() const;



[endsect]



[section:endpoint_type ip::basic_resolver_entry::endpoint_type]

[indexterm2 endpoint_type..ip::basic_resolver_entry] 
The endpoint type associated with the endpoint entry. 


  typedef InternetProtocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_entry.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:host_name ip::basic_resolver_entry::host_name]

[indexterm2 host_name..ip::basic_resolver_entry] 
Get the host name associated with the entry. 


  std::string host_name() const;



[endsect]



[section:operator_endpoint_type ip::basic_resolver_entry::operator endpoint_type]

[indexterm2 operator endpoint_type..ip::basic_resolver_entry] 
Convert to the endpoint associated with the entry. 


  operator endpoint_type() const;



[endsect]



[section:protocol_type ip::basic_resolver_entry::protocol_type]

[indexterm2 protocol_type..ip::basic_resolver_entry] 
The protocol type associated with the endpoint entry. 


  typedef InternetProtocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_entry.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service_name ip::basic_resolver_entry::service_name]

[indexterm2 service_name..ip::basic_resolver_entry] 
Get the service name associated with the entry. 


  std::string service_name() const;



[endsect]



[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 Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.difference_type [*difference_type]]]
    [The type used for the distance between two iterators. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.iterator_category [*iterator_category]]]
    [The iterator category. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.pointer [*pointer]]]
    [The type of the result of applying operator->() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.reference [*reference]]]
    [The type of the result of applying operator*() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.value_type [*value_type]]]
    [The type of the value pointed to by the iterator. ]
  
  ]

]

[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_iterator.create [*create]]]
    [Create an iterator from an addrinfo list returned by getaddrinfo. 

     Create an iterator from an endpoint, host name and service name. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]]
    [Dereference an iterator. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]]
    [Increment operator (prefix). 

     Increment operator (postfix). ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]]
    [Dereference an iterator. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]]
    [Test two iterators for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]]
    [Test two iterators for equality. ]
  ]
  
]

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: 

   const basic_resolver_entry<InternetProtocol> 





[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:basic_resolver_iterator ip::basic_resolver_iterator::basic_resolver_iterator]

[indexterm2 basic_resolver_iterator..ip::basic_resolver_iterator] 
Default constructor creates an end iterator. 


  basic_resolver_iterator();



[endsect]


[section:create ip::basic_resolver_iterator::create]

[indexterm2 create..ip::basic_resolver_iterator] 
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);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_iterator.create.overload1 more...]]``


Create an iterator from an endpoint, host name and service name. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_iterator.create.overload2 more...]]``


[section:overload1 ip::basic_resolver_iterator::create (1 of 2 overloads)]


Create an iterator from an addrinfo list returned by getaddrinfo. 


  static basic_resolver_iterator create(
      boost::asio::detail::addrinfo_type * address_info,
      const std::string & host_name,
      const std::string & service_name);



[endsect]



[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);



[endsect]


[endsect]


[section:difference_type ip::basic_resolver_iterator::difference_type]

[indexterm2 difference_type..ip::basic_resolver_iterator] 
The type used for the distance between two iterators. 


  typedef std::ptrdiff_t difference_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:iterator_category ip::basic_resolver_iterator::iterator_category]

[indexterm2 iterator_category..ip::basic_resolver_iterator] 
The iterator category. 


  typedef std::forward_iterator_tag iterator_category;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator__star_ ip::basic_resolver_iterator::operator *]

[indexterm2 operator *..ip::basic_resolver_iterator] 
Dereference an iterator. 


  const basic_resolver_entry< InternetProtocol > & operator *() const;



[endsect]



[section:operator_not__eq_ ip::basic_resolver_iterator::operator!=]

[indexterm2 operator!=..ip::basic_resolver_iterator] 
Test two iterators for inequality. 


  friend bool operator!=(
      const basic_resolver_iterator & a,
      const basic_resolver_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:operator_plus__plus_ ip::basic_resolver_iterator::operator++]

[indexterm2 operator++..ip::basic_resolver_iterator] 
Increment operator (prefix). 


  basic_resolver_iterator & ``[link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_.overload1 operator++]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_.overload1 more...]]``


Increment operator (postfix). 


  basic_resolver_iterator ``[link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_.overload2 operator++]``(
      int );
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_.overload2 more...]]``


[section:overload1 ip::basic_resolver_iterator::operator++ (1 of 2 overloads)]


Increment operator (prefix). 


  basic_resolver_iterator & operator++();



[endsect]



[section:overload2 ip::basic_resolver_iterator::operator++ (2 of 2 overloads)]


Increment operator (postfix). 


  basic_resolver_iterator operator++(
      int );



[endsect]


[endsect]


[section:operator_arrow_ ip::basic_resolver_iterator::operator->]

[indexterm2 operator->..ip::basic_resolver_iterator] 
Dereference an iterator. 


  const basic_resolver_entry< InternetProtocol > * operator->() const;



[endsect]



[section:operator_eq__eq_ ip::basic_resolver_iterator::operator==]

[indexterm2 operator==..ip::basic_resolver_iterator] 
Test two iterators for equality. 


  friend bool operator==(
      const basic_resolver_iterator & a,
      const basic_resolver_iterator & b);


[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:pointer ip::basic_resolver_iterator::pointer]

[indexterm2 pointer..ip::basic_resolver_iterator] 
The type of the result of applying `operator->()` to the iterator. 


  typedef const basic_resolver_entry< InternetProtocol > * pointer;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:reference ip::basic_resolver_iterator::reference]

[indexterm2 reference..ip::basic_resolver_iterator] 
The type of the result of applying `operator*()` to the iterator. 


  typedef const basic_resolver_entry< InternetProtocol > & reference;


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_entry.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint entry. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry [*basic_resolver_entry]]]
    [Default constructor. 

     Construct with specified endpoint, host name and service name. ]
  ]
  
  [
    [[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. ]
  ]
  
]

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.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:value_type ip::basic_resolver_iterator::value_type]

[indexterm2 value_type..ip::basic_resolver_iterator] 
The type of the value pointed to by the iterator. 


  typedef basic_resolver_entry< InternetProtocol > value_type;


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_entry.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint entry. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver_entry.basic_resolver_entry [*basic_resolver_entry]]]
    [Default constructor. 

     Construct with specified endpoint, host name and service name. ]
  ]
  
  [
    [[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. ]
  ]
  
]

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.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_iterator.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]

[section:ip__basic_resolver_query ip::basic_resolver_query]


An query to be passed to a resolver. 


  template<
      typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
  class basic_resolver_query :
    public ip::resolver_query_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__basic_resolver_query.flags [*flags]]]
    [A bitmask type (C++ Std \[lib.bitmask.types\]). ]
  
  ]

  [

    [[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. 

     Construct with specified service name for a given protocol. 

     Construct with specified host name and service name for any protocol. 

     Construct with specified host name and service name for a given 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. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]]
    [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]]
    [Determine the canonical name of the host specified in the query. ]
  ]

  [
    [[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. ]
  ]

  [
    [[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. ]
  ]

]

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. 



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_query.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:address_configured ip::basic_resolver_query::address_configured]


['Inherited from ip::resolver_query_base.]

[indexterm2 address_configured..ip::basic_resolver_query] 
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 flags address_configured = implementation_defined;



[endsect]



[section:all_matching ip::basic_resolver_query::all_matching]


['Inherited from ip::resolver_query_base.]

[indexterm2 all_matching..ip::basic_resolver_query] 
If used with v4\_mapped, return all matching IPv6 and IPv4 addresses. 


  static const flags all_matching = implementation_defined;



[endsect]


[section:basic_resolver_query ip::basic_resolver_query::basic_resolver_query]

[indexterm2 basic_resolver_query..ip::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,
      resolver_query_base::flags resolve_flags = passive|address_configured);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload1 more...]]``


Construct with specified service name for a given protocol. 


  ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload2 basic_resolver_query]``(
      const protocol_type & protocol,
      const std::string & service,
      resolver_query_base::flags resolve_flags = passive|address_configured);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload2 more...]]``


Construct with specified host name and service name for any protocol. 


  ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload3 basic_resolver_query]``(
      const std::string & host,
      const std::string & service,
      resolver_query_base::flags resolve_flags = address_configured);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload3 more...]]``


Construct with specified host name and service name for a given protocol. 


  ``[link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload4 basic_resolver_query]``(
      const protocol_type & protocol,
      const std::string & host,
      const std::string & service,
      resolver_query_base::flags resolve_flags = address_configured);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__basic_resolver_query.basic_resolver_query.overload4 more...]]``


[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,
      resolver_query_base::flags resolve_flags = passive|address_configured);


This constructor is typically used to perform name resolution for local service binding.


[heading Parameters]
    

[variablelist
  
[[service][A string identifying the requested service. This may be a descriptive name or a numeric string corresponding to a port number.]]

[[resolve_flags][A set of flags that determine how name resolution should be performed. The default flags are suitable for local service binding.]]

]


[heading Remarks]
      
On POSIX systems, service names are typically defined in the file `/etc/services`. On Windows, service names may be found in the file `c:\windows\system32\drivers\etc\services`. Operating systems may use additional locations when resolving service names. 




[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,
      resolver_query_base::flags resolve_flags = passive|address_configured);


This constructor is typically used to perform name resolution for local service binding with a specific protocol version.


[heading Parameters]
    

[variablelist
  
[[protocol][A protocol object, normally representing either the IPv4 or IPv6 version of an internet protocol.]]

[[service][A string identifying the requested service. This may be a descriptive name or a numeric string corresponding to a port number.]]

[[resolve_flags][A set of flags that determine how name resolution should be performed. The default flags are suitable for local service binding.]]

]


[heading Remarks]
      
On POSIX systems, service names are typically defined in the file `/etc/services`. On Windows, service names may be found in the file `c:\windows\system32\drivers\etc\services`. Operating systems may use additional locations when resolving service names. 




[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,
      const std::string & service,
      resolver_query_base::flags resolve_flags = address_configured);


This constructor is typically used to perform name resolution for communication with remote hosts.


[heading Parameters]
    

[variablelist
  
[[host][A string identifying a location. May be a descriptive name or a numeric address string. If an empty string and the passive flag has been specified, the resolved endpoints are suitable for local service binding. If an empty string and passive is not specified, the resolved endpoints will use the loopback address.]]

[[service][A string identifying the requested service. This may be a descriptive name or a numeric string corresponding to a port number. May be an empty string, in which case all resolved endpoints will have a port number of 0.]]

[[resolve_flags][A set of flags that determine how name resolution should be performed. The default flags are suitable for communication with remote hosts.]]

]


[heading Remarks]
      
On POSIX systems, host names may be locally defined in the file `/etc/hosts`. On Windows, host names may be defined in the file `c:\windows\system32\drivers\etc\hosts`. Remote host name resolution is performed using DNS. Operating systems may use additional locations when resolving host names (such as NETBIOS names on Windows).

On POSIX systems, service names are typically defined in the file `/etc/services`. On Windows, service names may be found in the file `c:\windows\system32\drivers\etc\services`. Operating systems may use additional locations when resolving service names. 


[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,
      const std::string & service,
      resolver_query_base::flags resolve_flags = address_configured);


This constructor is typically used to perform name resolution for communication with remote hosts.


[heading Parameters]
    

[variablelist
  
[[protocol][A protocol object, normally representing either the IPv4 or IPv6 version of an internet protocol.]]

[[host][A string identifying a location. May be a descriptive name or a numeric address string. If an empty string and the passive flag has been specified, the resolved endpoints are suitable for local service binding. If an empty string and passive is not specified, the resolved endpoints will use the loopback address.]]

[[service][A string identifying the requested service. This may be a descriptive name or a numeric string corresponding to a port number. May be an empty string, in which case all resolved endpoints will have a port number of 0.]]

[[resolve_flags][A set of flags that determine how name resolution should be performed. The default flags are suitable for communication with remote hosts.]]

]


[heading Remarks]
      
On POSIX systems, host names may be locally defined in the file `/etc/hosts`. On Windows, host names may be defined in the file `c:\windows\system32\drivers\etc\hosts`. Remote host name resolution is performed using DNS. Operating systems may use additional locations when resolving host names (such as NETBIOS names on Windows).

On POSIX systems, service names are typically defined in the file `/etc/services`. On Windows, service names may be found in the file `c:\windows\system32\drivers\etc\services`. Operating systems may use additional locations when resolving service names. 


[endsect]


[endsect]


[section:canonical_name ip::basic_resolver_query::canonical_name]


['Inherited from ip::resolver_query_base.]

[indexterm2 canonical_name..ip::basic_resolver_query] 
Determine the canonical name of the host specified in the query. 


  static const flags canonical_name = implementation_defined;



[endsect]



[section:flags ip::basic_resolver_query::flags]


['Inherited from ip::resolver_query_base.]

[indexterm2 flags..ip::basic_resolver_query] 
A bitmask type (C++ Std [lib.bitmask.types]). 


  typedef unspecified flags;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_query.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:hints ip::basic_resolver_query::hints]

[indexterm2 hints..ip::basic_resolver_query] 
Get the hints associated with the query. 


  const boost::asio::detail::addrinfo_type & hints() const;



[endsect]



[section:host_name ip::basic_resolver_query::host_name]

[indexterm2 host_name..ip::basic_resolver_query] 
Get the host name associated with the query. 


  std::string host_name() const;



[endsect]



[section:numeric_host ip::basic_resolver_query::numeric_host]


['Inherited from ip::resolver_query_base.]

[indexterm2 numeric_host..ip::basic_resolver_query] 
Host name should be treated as a numeric string defining an IPv4 or IPv6 address and no name resolution should be attempted. 


  static const flags numeric_host = implementation_defined;



[endsect]



[section:numeric_service ip::basic_resolver_query::numeric_service]


['Inherited from ip::resolver_query_base.]

[indexterm2 numeric_service..ip::basic_resolver_query] 
Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. 


  static const flags numeric_service = implementation_defined;



[endsect]



[section:passive ip::basic_resolver_query::passive]


['Inherited from ip::resolver_query_base.]

[indexterm2 passive..ip::basic_resolver_query] 
Indicate that returned endpoint is intended for use as a locally bound socket endpoint. 


  static const flags passive = implementation_defined;



[endsect]



[section:protocol_type ip::basic_resolver_query::protocol_type]

[indexterm2 protocol_type..ip::basic_resolver_query] 
The protocol type associated with the endpoint query. 


  typedef InternetProtocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/basic_resolver_query.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:service_name ip::basic_resolver_query::service_name]

[indexterm2 service_name..ip::basic_resolver_query] 
Get the service name associated with the query. 


  std::string service_name() const;



[endsect]



[section:v4_mapped ip::basic_resolver_query::v4_mapped]


['Inherited from ip::resolver_query_base.]

[indexterm2 v4_mapped..ip::basic_resolver_query] 
If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. 


  static const flags v4_mapped = implementation_defined;



[endsect]



[endsect]

[section:ip__host_name ip::host_name]

[indexterm1 ip::host_name] 
Get the current host name. 

    
  std::string ``[link boost_asio.reference.ip__host_name.overload1 host_name]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ip__host_name.overload1 more...]]``

  std::string ``[link boost_asio.reference.ip__host_name.overload2 host_name]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__host_name.overload2 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/ip/host_name.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 ip::host_name (1 of 2 overloads)]


Get the current host name. 


  std::string host_name();



[endsect]



[section:overload2 ip::host_name (2 of 2 overloads)]


Get the current host name. 


  std::string host_name(
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:ip__icmp ip::icmp]


Encapsulates the flags needed for ICMP. 


  class icmp


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__icmp.endpoint [*endpoint]]]
    [The type of a ICMP endpoint. ]
  
  ]

  [

    [[link boost_asio.reference.ip__icmp.resolver [*resolver]]]
    [The ICMP resolver type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__icmp.socket [*socket]]]
    [The ICMP socket type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__icmp.family [*family]]]
    [Obtain an identifier for the protocol family. ]
  ]
  
  [
    [[link boost_asio.reference.ip__icmp.protocol [*protocol]]]
    [Obtain an identifier for the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__icmp.type [*type]]]
    [Obtain an identifier for the type of the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__icmp.v4 [*v4]]]
    [Construct to represent the IPv4 ICMP protocol. ]
  ]
  
  [
    [[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__icmp `ip::icmp`] class contains flags necessary for ICMP sockets.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.




[heading Requirements]

[*Header: ][^boost/asio/ip/icmp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:endpoint ip::icmp::endpoint]

[indexterm2 endpoint..ip::icmp] 
The type of a ICMP endpoint. 


  typedef basic_endpoint< icmp > endpoint;


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
    [Get the IP address associated with the endpoint. 

     Set the IP address associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     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. 

     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. 

     Copy 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. 

     Set 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_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[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.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/ip/icmp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:family ip::icmp::family]

[indexterm2 family..ip::icmp] 
Obtain an identifier for the protocol family. 


  int family() const;



[endsect]



[section:operator_not__eq_ ip::icmp::operator!=]

[indexterm2 operator!=..ip::icmp] 
Compare two protocols for inequality. 


  friend bool operator!=(
      const icmp & p1,
      const icmp & p2);


[heading Requirements]

[*Header: ][^boost/asio/ip/icmp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq__eq_ ip::icmp::operator==]

[indexterm2 operator==..ip::icmp] 
Compare two protocols for equality. 


  friend bool operator==(
      const icmp & p1,
      const icmp & p2);


[heading Requirements]

[*Header: ][^boost/asio/ip/icmp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:protocol ip::icmp::protocol]

[indexterm2 protocol..ip::icmp] 
Obtain an identifier for the protocol. 


  int protocol() const;



[endsect]



[section:resolver ip::icmp::resolver]

[indexterm2 resolver..ip::icmp] 
The ICMP resolver type. 


  typedef basic_resolver< icmp > resolver;


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
    [The iterator type. ]
  
  ]

  [

    [[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.async_resolve [*async_resolve]]]
    [Asynchronously perform forward resolution of a query to a list of entries. 

     Asynchronously perform reverse resolution of an endpoint 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.resolve [*resolve]]]
    [Perform forward resolution of a query to a list of entries. 

     Perform reverse resolution of an endpoint to a list of entries. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.ip__basic_resolver `ip::basic_resolver`] class template provides the ability to resolve a query to a list of endpoints.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/icmp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:socket ip::icmp::socket]

[indexterm2 socket..ip::icmp] 
The ICMP socket type. 


  typedef basic_raw_socket< icmp > socket;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_raw_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_raw_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_receive_from [*async_receive_from]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_send [*async_send]]]
    [Start an asynchronous send on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.basic_raw_socket [*basic_raw_socket]]]
    [Construct a basic_raw_socket without opening it. 

     Construct and open a basic_raw_socket. 

     Construct a basic_raw_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_raw_socket on an existing native socket. 

     Move-construct a basic_raw_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_raw_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.receive [*receive]]]
    [Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.receive_from [*receive_from]]]
    [Receive raw data with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.send [*send]]]
    [Send some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.send_to [*send_to]]]
    [Send raw data to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_raw_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_raw_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_raw_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_raw_socket `basic_raw_socket`] class template provides asynchronous and blocking raw-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/icmp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:type ip::icmp::type]

[indexterm2 type..ip::icmp] 
Obtain an identifier for the type of the protocol. 


  int type() const;



[endsect]



[section:v4 ip::icmp::v4]

[indexterm2 v4..ip::icmp] 
Construct to represent the IPv4 ICMP protocol. 


  static icmp v4();



[endsect]



[section:v6 ip::icmp::v6]

[indexterm2 v6..ip::icmp] 
Construct to represent the IPv6 ICMP protocol. 


  static icmp v6();



[endsect]



[endsect]


[section:ip__multicast__enable_loopback ip::multicast::enable_loopback]

[indexterm1 ip::multicast::enable_loopback] 
Socket option determining whether outgoing multicast packets will be received on the same socket if it is a member of the multicast group. 


  typedef implementation_defined enable_loopback;



Implements the IPPROTO\_IP/IP\_MULTICAST\_LOOP socket option.


[heading Examples]
  
Setting the option: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::multicast::enable_loopback option(true);
   socket.set_option(option);





Getting the current option value: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::multicast::enable_loopback option;
   socket.get_option(option);
   bool is_set = option.value();







[heading Requirements]

[*Header: ][^boost/asio/ip/multicast.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:ip__multicast__hops ip::multicast::hops]

[indexterm1 ip::multicast::hops] 
Socket option for time-to-live associated with outgoing multicast packets. 


  typedef implementation_defined hops;



Implements the IPPROTO\_IP/IP\_MULTICAST\_TTL socket option.


[heading Examples]
  
Setting the option: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::multicast::hops option(4);
   socket.set_option(option);





Getting the current option value: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::multicast::hops option;
   socket.get_option(option);
   int ttl = option.value();







[heading Requirements]

[*Header: ][^boost/asio/ip/multicast.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:ip__multicast__join_group ip::multicast::join_group]

[indexterm1 ip::multicast::join_group] 
Socket option to join a multicast group on a specified interface. 


  typedef implementation_defined join_group;



Implements the IPPROTO\_IP/IP\_ADD\_MEMBERSHIP socket option.


[heading Examples]
  
Setting the option to join a multicast group: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::address multicast_address =
     boost::asio::ip::address::from_string("225.0.0.1");
   boost::asio::ip::multicast::join_group option(multicast_address);
   socket.set_option(option);







[heading Requirements]

[*Header: ][^boost/asio/ip/multicast.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:ip__multicast__leave_group ip::multicast::leave_group]

[indexterm1 ip::multicast::leave_group] 
Socket option to leave a multicast group on a specified interface. 


  typedef implementation_defined leave_group;



Implements the IPPROTO\_IP/IP\_DROP\_MEMBERSHIP socket option.


[heading Examples]
  
Setting the option to leave a multicast group: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::address multicast_address =
     boost::asio::ip::address::from_string("225.0.0.1");
   boost::asio::ip::multicast::leave_group option(multicast_address);
   socket.set_option(option);







[heading Requirements]

[*Header: ][^boost/asio/ip/multicast.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:ip__multicast__outbound_interface ip::multicast::outbound_interface]

[indexterm1 ip::multicast::outbound_interface] 
Socket option for local interface to use for outgoing multicast packets. 


  typedef implementation_defined outbound_interface;



Implements the IPPROTO\_IP/IP\_MULTICAST\_IF socket option.


[heading Examples]
  
Setting the option: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::address_v4 local_interface =
     boost::asio::ip::address_v4::from_string("1.2.3.4");
   boost::asio::ip::multicast::outbound_interface option(local_interface);
   socket.set_option(option);







[heading Requirements]

[*Header: ][^boost/asio/ip/multicast.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:ip__resolver_query_base ip::resolver_query_base]


The [link boost_asio.reference.ip__resolver_query_base `ip::resolver_query_base`] class is used as a base for the [link boost_asio.reference.ip__basic_resolver_query `ip::basic_resolver_query`] class templates to provide a common place to define the flag constants. 


  class resolver_query_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__resolver_query_base.flags [*flags]]]
    [A bitmask type (C++ Std \[lib.bitmask.types\]). ]
  
  ]

]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__resolver_query_base._resolver_query_base [*~resolver_query_base]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__resolver_query_base.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. ]
  ]

  [
    [[link boost_asio.reference.ip__resolver_query_base.all_matching [*all_matching]]]
    [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
  ]

  [
    [[link boost_asio.reference.ip__resolver_query_base.canonical_name [*canonical_name]]]
    [Determine the canonical name of the host specified in the query. ]
  ]

  [
    [[link boost_asio.reference.ip__resolver_query_base.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__resolver_query_base.numeric_service [*numeric_service]]]
    [Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. ]
  ]

  [
    [[link boost_asio.reference.ip__resolver_query_base.passive [*passive]]]
    [Indicate that returned endpoint is intended for use as a locally bound socket endpoint. ]
  ]

  [
    [[link boost_asio.reference.ip__resolver_query_base.v4_mapped [*v4_mapped]]]
    [If the query protocol family is specified as IPv6, return IPv4-mapped IPv6 addresses on finding no IPv6 addresses. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_query_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:address_configured ip::resolver_query_base::address_configured]

[indexterm2 address_configured..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 flags address_configured = implementation_defined;



[endsect]



[section:all_matching ip::resolver_query_base::all_matching]

[indexterm2 all_matching..ip::resolver_query_base] 
If used with v4\_mapped, return all matching IPv6 and IPv4 addresses. 


  static const flags all_matching = implementation_defined;



[endsect]



[section:canonical_name ip::resolver_query_base::canonical_name]

[indexterm2 canonical_name..ip::resolver_query_base] 
Determine the canonical name of the host specified in the query. 


  static const flags canonical_name = implementation_defined;



[endsect]



[section:flags ip::resolver_query_base::flags]

[indexterm2 flags..ip::resolver_query_base] 
A bitmask type (C++ Std [lib.bitmask.types]). 


  typedef unspecified flags;



[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_query_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:numeric_host ip::resolver_query_base::numeric_host]

[indexterm2 numeric_host..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. 


  static const flags numeric_host = implementation_defined;



[endsect]



[section:numeric_service ip::resolver_query_base::numeric_service]

[indexterm2 numeric_service..ip::resolver_query_base] 
Service name should be treated as a numeric string defining a port number and no name resolution should be attempted. 


  static const flags numeric_service = implementation_defined;



[endsect]



[section:passive ip::resolver_query_base::passive]

[indexterm2 passive..ip::resolver_query_base] 
Indicate that returned endpoint is intended for use as a locally bound socket endpoint. 


  static const flags passive = implementation_defined;



[endsect]



[section:v4_mapped ip::resolver_query_base::v4_mapped]

[indexterm2 v4_mapped..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 flags v4_mapped = implementation_defined;



[endsect]



[section:_resolver_query_base ip::resolver_query_base::~resolver_query_base]

[indexterm2 ~resolver_query_base..ip::resolver_query_base] 
Protected destructor to prevent deletion through this type. 


  ~resolver_query_base();



[endsect]



[endsect]

[section:ip__resolver_service ip::resolver_service]


Default service implementation for a resolver. 


  template<
      typename ``[link boost_asio.reference.InternetProtocol InternetProtocol]``>
  class resolver_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__resolver_service.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__resolver_service.implementation_type [*implementation_type]]]
    [The type of a resolver implementation. ]
  
  ]

  [

    [[link boost_asio.reference.ip__resolver_service.iterator_type [*iterator_type]]]
    [The iterator type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__resolver_service.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__resolver_service.query_type [*query_type]]]
    [The query type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__resolver_service.async_resolve [*async_resolve]]]
    [Asynchronously resolve a query to a list of entries. 

     Asynchronously resolve an endpoint to a list of entries. ]
  ]
  
  [
    [[link boost_asio.reference.ip__resolver_service.cancel [*cancel]]]
    [Cancel pending asynchronous operations. ]
  ]
  
  [
    [[link boost_asio.reference.ip__resolver_service.construct [*construct]]]
    [Construct a new resolver implementation. ]
  ]
  
  [
    [[link boost_asio.reference.ip__resolver_service.destroy [*destroy]]]
    [Destroy a resolver implementation. ]
  ]
  
  [
    [[link boost_asio.reference.ip__resolver_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.ip__resolver_service.resolve [*resolve]]]
    [Resolve a query to a list of entries. 

     Resolve an endpoint to a list of entries. ]
  ]
  
  [
    [[link boost_asio.reference.ip__resolver_service.resolver_service [*resolver_service]]]
    [Construct a new resolver service for the specified io_service. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__resolver_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_service.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:async_resolve ip::resolver_service::async_resolve]

[indexterm2 async_resolve..ip::resolver_service] 
Asynchronously resolve a query to a list of entries. 


  template<
      typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
  void ``[link boost_asio.reference.ip__resolver_service.async_resolve.overload1 async_resolve]``(
      implementation_type & impl,
      const query_type & query,
      ResolveHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__resolver_service.async_resolve.overload1 more...]]``


Asynchronously resolve an endpoint to a list of entries. 


  template<
      typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
  void ``[link boost_asio.reference.ip__resolver_service.async_resolve.overload2 async_resolve]``(
      implementation_type & impl,
      const endpoint_type & endpoint,
      ResolveHandler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__resolver_service.async_resolve.overload2 more...]]``


[section:overload1 ip::resolver_service::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(
      implementation_type & impl,
      const query_type & query,
      ResolveHandler handler);



[endsect]



[section:overload2 ip::resolver_service::async_resolve (2 of 2 overloads)]


Asynchronously resolve an endpoint to a list of entries. 


  template<
      typename ``[link boost_asio.reference.ResolveHandler ResolveHandler]``>
  void async_resolve(
      implementation_type & impl,
      const endpoint_type & endpoint,
      ResolveHandler handler);



[endsect]


[endsect]


[section:cancel ip::resolver_service::cancel]

[indexterm2 cancel..ip::resolver_service] 
Cancel pending asynchronous operations. 


  void cancel(
      implementation_type & impl);



[endsect]



[section:construct ip::resolver_service::construct]

[indexterm2 construct..ip::resolver_service] 
Construct a new resolver implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy ip::resolver_service::destroy]

[indexterm2 destroy..ip::resolver_service] 
Destroy a resolver implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:endpoint_type ip::resolver_service::endpoint_type]

[indexterm2 endpoint_type..ip::resolver_service] 
The endpoint type. 


  typedef InternetProtocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:get_io_service ip::resolver_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..ip::resolver_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id ip::resolver_service::id]

[indexterm2 id..ip::resolver_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type ip::resolver_service::implementation_type]

[indexterm2 implementation_type..ip::resolver_service] 
The type of a resolver implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:iterator_type ip::resolver_service::iterator_type]

[indexterm2 iterator_type..ip::resolver_service] 
The iterator type. 


  typedef basic_resolver_iterator< InternetProtocol > iterator_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.difference_type [*difference_type]]]
    [The type used for the distance between two iterators. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.iterator_category [*iterator_category]]]
    [The iterator category. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.pointer [*pointer]]]
    [The type of the result of applying operator->() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.reference [*reference]]]
    [The type of the result of applying operator*() to the iterator. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver_iterator.value_type [*value_type]]]
    [The type of the value pointed to by the iterator. ]
  
  ]

]

[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_iterator.create [*create]]]
    [Create an iterator from an addrinfo list returned by getaddrinfo. 

     Create an iterator from an endpoint, host name and service name. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator__star_ [*operator *]]]
    [Dereference an iterator. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_plus__plus_ [*operator++]]]
    [Increment operator (prefix). 

     Increment operator (postfix). ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_arrow_ [*operator->]]]
    [Dereference an iterator. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_not__eq_ [*operator!=]]]
    [Test two iterators for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver_iterator.operator_eq__eq_ [*operator==]]]
    [Test two iterators for equality. ]
  ]
  
]

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: 

   const basic_resolver_entry<InternetProtocol> 





[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:protocol_type ip::resolver_service::protocol_type]

[indexterm2 protocol_type..ip::resolver_service] 
The protocol type. 


  typedef InternetProtocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:query_type ip::resolver_service::query_type]

[indexterm2 query_type..ip::resolver_service] 
The query type. 


  typedef basic_resolver_query< InternetProtocol > query_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__basic_resolver_query.flags [*flags]]]
    [A bitmask type (C++ Std \[lib.bitmask.types\]). ]
  
  ]

  [

    [[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. 

     Construct with specified service name for a given protocol. 

     Construct with specified host name and service name for any protocol. 

     Construct with specified host name and service name for a given 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. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver_query.all_matching [*all_matching]]]
    [If used with v4_mapped, return all matching IPv6 and IPv4 addresses. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver_query.canonical_name [*canonical_name]]]
    [Determine the canonical name of the host specified in the query. ]
  ]

  [
    [[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. ]
  ]

  [
    [[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. ]
  ]

]

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. 




[heading Requirements]

[*Header: ][^boost/asio/ip/resolver_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:resolve ip::resolver_service::resolve]

[indexterm2 resolve..ip::resolver_service] 
Resolve a query to a list of entries. 


  iterator_type ``[link boost_asio.reference.ip__resolver_service.resolve.overload1 resolve]``(
      implementation_type & impl,
      const query_type & query,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__resolver_service.resolve.overload1 more...]]``


Resolve an endpoint to a list of entries. 


  iterator_type ``[link boost_asio.reference.ip__resolver_service.resolve.overload2 resolve]``(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ip__resolver_service.resolve.overload2 more...]]``


[section:overload1 ip::resolver_service::resolve (1 of 2 overloads)]


Resolve a query to a list of entries. 


  iterator_type resolve(
      implementation_type & impl,
      const query_type & query,
      boost::system::error_code & ec);



[endsect]



[section:overload2 ip::resolver_service::resolve (2 of 2 overloads)]


Resolve an endpoint to a list of entries. 


  iterator_type resolve(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:resolver_service ip::resolver_service::resolver_service]

[indexterm2 resolver_service..ip::resolver_service] 
Construct a new resolver service for the specified [link boost_asio.reference.io_service `io_service`]. 


  resolver_service(
      boost::asio::io_service & io_service);



[endsect]



[endsect]

[section:ip__tcp ip::tcp]


Encapsulates the flags needed for TCP. 


  class tcp


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__tcp.acceptor [*acceptor]]]
    [The TCP acceptor type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__tcp.endpoint [*endpoint]]]
    [The type of a TCP endpoint. ]
  
  ]

  [

    [[link boost_asio.reference.ip__tcp.iostream [*iostream]]]
    [The TCP iostream type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__tcp.no_delay [*no_delay]]]
    [Socket option for disabling the Nagle algorithm. ]
  
  ]

  [

    [[link boost_asio.reference.ip__tcp.resolver [*resolver]]]
    [The TCP resolver type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__tcp.socket [*socket]]]
    [The TCP socket type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__tcp.family [*family]]]
    [Obtain an identifier for the protocol family. ]
  ]
  
  [
    [[link boost_asio.reference.ip__tcp.protocol [*protocol]]]
    [Obtain an identifier for the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__tcp.type [*type]]]
    [Obtain an identifier for the type of the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__tcp.v4 [*v4]]]
    [Construct to represent the IPv4 TCP protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__tcp.v6 [*v6]]]
    [Construct to represent the IPv6 TCP protocol. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__tcp.operator_not__eq_ [*operator!=]]]
    [Compare two protocols for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__tcp.operator_eq__eq_ [*operator==]]]
    [Compare two protocols for equality. ]
  ]
  
]

The [link boost_asio.reference.ip__tcp `ip::tcp`] class contains flags necessary for TCP sockets.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.




[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:acceptor ip::tcp::acceptor]

[indexterm2 acceptor..ip::tcp] 
The TCP acceptor type. 


  typedef basic_socket_acceptor< tcp > acceptor;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_socket_acceptor.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.native_handle_type [*native_handle_type]]]
    [The native representation of an acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of an acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.accept [*accept]]]
    [Accept a new connection. 

     Accept a new connection and obtain the endpoint of the peer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.assign [*assign]]]
    [Assigns an existing native acceptor to the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.async_accept [*async_accept]]]
    [Start an asynchronous accept. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor [*basic_socket_acceptor]]]
    [Construct an acceptor without opening it. 

     Construct an open acceptor. 

     Construct an acceptor opened on the given endpoint. 

     Construct a basic_socket_acceptor on an existing native acceptor. 

     Move-construct a basic_socket_acceptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.bind [*bind]]]
    [Bind the acceptor to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.close [*close]]]
    [Close the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_option [*get_option]]]
    [Get an option from the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.io_control [*io_control]]]
    [Perform an IO control command on the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.is_open [*is_open]]]
    [Determine whether the acceptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.listen [*listen]]]
    [Place the acceptor into the state where it will listen for new connections. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native acceptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native_handle [*native_handle]]]
    [Get the native acceptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native acceptor implementation. 

     Sets the non-blocking mode of the native acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the acceptor. 

     Sets the non-blocking mode of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.open [*open]]]
    [Open the acceptor using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket_acceptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.set_option [*set_option]]]
    [Set an option on the acceptor. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] class template is used for accepting new socket connections.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Example]
  
Opening a socket acceptor with the SO\_REUSEADDR option enabled: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
   acceptor.open(endpoint.protocol());
   acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
   acceptor.bind(endpoint);
   acceptor.listen();







[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint ip::tcp::endpoint]

[indexterm2 endpoint..ip::tcp] 
The type of a TCP endpoint. 


  typedef basic_endpoint< tcp > endpoint;


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
    [Get the IP address associated with the endpoint. 

     Set the IP address associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     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. 

     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. 

     Copy 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. 

     Set 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_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[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.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:family ip::tcp::family]

[indexterm2 family..ip::tcp] 
Obtain an identifier for the protocol family. 


  int family() const;



[endsect]



[section:iostream ip::tcp::iostream]

[indexterm2 iostream..ip::tcp] 
The TCP iostream type. 


  typedef basic_socket_iostream< tcp > iostream;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_socket_iostream.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_iostream.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_iostream.time_type [*time_type]]]
    [The time type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream [*basic_socket_iostream]]]
    [Construct a basic_socket_iostream without establishing a connection. 

     Establish a connection to an endpoint corresponding to a resolver query. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.close [*close]]]
    [Close the connection. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.connect [*connect]]]
    [Establish a connection to an endpoint corresponding to a resolver query. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.error [*error]]]
    [Get the last error associated with the stream. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.expires_at [*expires_at]]]
    [Get the stream's expiry time as an absolute time. 

     Set the stream's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the stream's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.rdbuf [*rdbuf]]]
    [Return a pointer to the underlying streambuf. ]
  ]
  
]


[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:no_delay ip::tcp::no_delay]

[indexterm2 no_delay..ip::tcp] 
Socket option for disabling the Nagle algorithm. 


  typedef implementation_defined no_delay;



Implements the IPPROTO\_TCP/TCP\_NODELAY socket option.


[heading Examples]
  
Setting the option: 

   boost::asio::ip::tcp::socket socket(io_service); 
   ...
   boost::asio::ip::tcp::no_delay option(true);
   socket.set_option(option);





Getting the current option value: 

   boost::asio::ip::tcp::socket socket(io_service); 
   ...
   boost::asio::ip::tcp::no_delay option;
   socket.get_option(option);
   bool is_set = option.value();







[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_not__eq_ ip::tcp::operator!=]

[indexterm2 operator!=..ip::tcp] 
Compare two protocols for inequality. 


  friend bool operator!=(
      const tcp & p1,
      const tcp & p2);


[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq__eq_ ip::tcp::operator==]

[indexterm2 operator==..ip::tcp] 
Compare two protocols for equality. 


  friend bool operator==(
      const tcp & p1,
      const tcp & p2);


[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:protocol ip::tcp::protocol]

[indexterm2 protocol..ip::tcp] 
Obtain an identifier for the protocol. 


  int protocol() const;



[endsect]



[section:resolver ip::tcp::resolver]

[indexterm2 resolver..ip::tcp] 
The TCP resolver type. 


  typedef basic_resolver< tcp > resolver;


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
    [The iterator type. ]
  
  ]

  [

    [[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.async_resolve [*async_resolve]]]
    [Asynchronously perform forward resolution of a query to a list of entries. 

     Asynchronously perform reverse resolution of an endpoint 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.resolve [*resolve]]]
    [Perform forward resolution of a query to a list of entries. 

     Perform reverse resolution of an endpoint to a list of entries. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.ip__basic_resolver `ip::basic_resolver`] class template provides the ability to resolve a query to a list of endpoints.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:socket ip::tcp::socket]

[indexterm2 socket..ip::tcp] 
The TCP socket type. 


  typedef basic_stream_socket< tcp > socket;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_stream_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.basic_stream_socket [*basic_stream_socket]]]
    [Construct a basic_stream_socket without opening it. 

     Construct and open a basic_stream_socket. 

     Construct a basic_stream_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_stream_socket on an existing native socket. 

     Move-construct a basic_stream_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.read_some [*read_some]]]
    [Read some data from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.receive [*receive]]]
    [Receive some data on the socket. 

     Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.send [*send]]]
    [Send some data on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.write_some [*write_some]]]
    [Write some data to the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] class template provides asynchronous and blocking stream-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/ip/tcp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:type ip::tcp::type]

[indexterm2 type..ip::tcp] 
Obtain an identifier for the type of the protocol. 


  int type() const;



[endsect]



[section:v4 ip::tcp::v4]

[indexterm2 v4..ip::tcp] 
Construct to represent the IPv4 TCP protocol. 


  static tcp v4();



[endsect]



[section:v6 ip::tcp::v6]

[indexterm2 v6..ip::tcp] 
Construct to represent the IPv6 TCP protocol. 


  static tcp v6();



[endsect]



[endsect]

[section:ip__udp ip::udp]


Encapsulates the flags needed for UDP. 


  class udp


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ip__udp.endpoint [*endpoint]]]
    [The type of a UDP endpoint. ]
  
  ]

  [

    [[link boost_asio.reference.ip__udp.resolver [*resolver]]]
    [The UDP resolver type. ]
  
  ]

  [

    [[link boost_asio.reference.ip__udp.socket [*socket]]]
    [The UDP socket type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__udp.family [*family]]]
    [Obtain an identifier for the protocol family. ]
  ]
  
  [
    [[link boost_asio.reference.ip__udp.protocol [*protocol]]]
    [Obtain an identifier for the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__udp.type [*type]]]
    [Obtain an identifier for the type of the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__udp.v4 [*v4]]]
    [Construct to represent the IPv4 UDP protocol. ]
  ]
  
  [
    [[link boost_asio.reference.ip__udp.v6 [*v6]]]
    [Construct to represent the IPv6 UDP protocol. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__udp.operator_not__eq_ [*operator!=]]]
    [Compare two protocols for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__udp.operator_eq__eq_ [*operator==]]]
    [Compare two protocols for equality. ]
  ]
  
]

The [link boost_asio.reference.ip__udp `ip::udp`] class contains flags necessary for UDP sockets.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.




[heading Requirements]

[*Header: ][^boost/asio/ip/udp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:endpoint ip::udp::endpoint]

[indexterm2 endpoint..ip::udp] 
The type of a UDP endpoint. 


  typedef basic_endpoint< udp > endpoint;


[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_endpoint.address [*address]]]
    [Get the IP address associated with the endpoint. 

     Set the IP address associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     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. 

     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. 

     Copy 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. 

     Set 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_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[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.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/ip/udp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:family ip::udp::family]

[indexterm2 family..ip::udp] 
Obtain an identifier for the protocol family. 


  int family() const;



[endsect]



[section:operator_not__eq_ ip::udp::operator!=]

[indexterm2 operator!=..ip::udp] 
Compare two protocols for inequality. 


  friend bool operator!=(
      const udp & p1,
      const udp & p2);


[heading Requirements]

[*Header: ][^boost/asio/ip/udp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq__eq_ ip::udp::operator==]

[indexterm2 operator==..ip::udp] 
Compare two protocols for equality. 


  friend bool operator==(
      const udp & p1,
      const udp & p2);


[heading Requirements]

[*Header: ][^boost/asio/ip/udp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:protocol ip::udp::protocol]

[indexterm2 protocol..ip::udp] 
Obtain an identifier for the protocol. 


  int protocol() const;



[endsect]



[section:resolver ip::udp::resolver]

[indexterm2 resolver..ip::udp] 
The UDP resolver type. 


  typedef basic_resolver< udp > resolver;


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.ip__basic_resolver.iterator [*iterator]]]
    [The iterator type. ]
  
  ]

  [

    [[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.async_resolve [*async_resolve]]]
    [Asynchronously perform forward resolution of a query to a list of entries. 

     Asynchronously perform reverse resolution of an endpoint 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.resolve [*resolve]]]
    [Perform forward resolution of a query to a list of entries. 

     Perform reverse resolution of an endpoint to a list of entries. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.ip__basic_resolver.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ip__basic_resolver.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.ip__basic_resolver.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.ip__basic_resolver `ip::basic_resolver`] class template provides the ability to resolve a query to a list of endpoints.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/udp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:socket ip::udp::socket]

[indexterm2 socket..ip::udp] 
The UDP socket type. 


  typedef basic_datagram_socket< udp > socket;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_datagram_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_receive_from [*async_receive_from]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_send [*async_send]]]
    [Start an asynchronous send on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket [*basic_datagram_socket]]]
    [Construct a basic_datagram_socket without opening it. 

     Construct and open a basic_datagram_socket. 

     Construct a basic_datagram_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_datagram_socket on an existing native socket. 

     Move-construct a basic_datagram_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_datagram_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.receive [*receive]]]
    [Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.receive_from [*receive_from]]]
    [Receive a datagram with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.send [*send]]]
    [Send some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.send_to [*send_to]]]
    [Send a datagram to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] class template provides asynchronous and blocking datagram-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/ip/udp.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:type ip::udp::type]

[indexterm2 type..ip::udp] 
Obtain an identifier for the type of the protocol. 


  int type() const;



[endsect]



[section:v4 ip::udp::v4]

[indexterm2 v4..ip::udp] 
Construct to represent the IPv4 UDP protocol. 


  static udp v4();



[endsect]



[section:v6 ip::udp::v6]

[indexterm2 v6..ip::udp] 
Construct to represent the IPv6 UDP protocol. 


  static udp v6();



[endsect]



[endsect]


[section:ip__unicast__hops ip::unicast::hops]

[indexterm1 ip::unicast::hops] 
Socket option for time-to-live associated with outgoing unicast packets. 


  typedef implementation_defined hops;



Implements the IPPROTO\_IP/IP\_UNICAST\_TTL socket option.


[heading Examples]
  
Setting the option: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::unicast::hops option(4);
   socket.set_option(option);





Getting the current option value: 

   boost::asio::ip::udp::socket socket(io_service); 
   ...
   boost::asio::ip::unicast::hops option;
   socket.get_option(option);
   int ttl = option.value();







[heading Requirements]

[*Header: ][^boost/asio/ip/unicast.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:ip__v6_only ip::v6_only]

[indexterm1 ip::v6_only] 
Socket option for determining whether an IPv6 socket supports IPv6 communication only. 


  typedef implementation_defined v6_only;



Implements the IPPROTO\_IPV6/IP\_V6ONLY socket option.


[heading Examples]
  
Setting the option: 

   boost::asio::ip::tcp::socket socket(io_service); 
   ...
   boost::asio::ip::v6_only option(true);
   socket.set_option(option);





Getting the current option value: 

   boost::asio::ip::tcp::socket socket(io_service); 
   ...
   boost::asio::ip::v6_only option;
   socket.get_option(option);
   bool v6_only = option.value();







[heading Requirements]

[*Header: ][^boost/asio/ip/v6_only.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:is_match_condition is_match_condition]


Type trait used to determine whether a type can be used as a match condition function with read\_until and async\_read\_until. 


  template<
      typename T>
  struct is_match_condition


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_match_condition.value [*value]]]
    [The value member is true if the type may be used as a match condition. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/read_until.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value is_match_condition::value]

[indexterm2 value..is_match_condition] 
The value member is true if the type may be used as a match condition. 


  static const bool value;



[endsect]



[endsect]

[section:is_read_buffered is_read_buffered]


The [link boost_asio.reference.is_read_buffered `is_read_buffered`] class is a traits class that may be used to determine whether a stream type supports buffering of read data. 


  template<
      typename Stream>
  class is_read_buffered


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_read_buffered.value [*value]]]
    [The value member is true only if the Stream type supports buffering of read data. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/is_read_buffered.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value is_read_buffered::value]

[indexterm2 value..is_read_buffered] 
The value member is true only if the Stream type supports buffering of read data. 


  static const bool value;



[endsect]



[endsect]

[section:is_write_buffered is_write_buffered]


The [link boost_asio.reference.is_write_buffered `is_write_buffered`] class is a traits class that may be used to determine whether a stream type supports buffering of written data. 


  template<
      typename Stream>
  class is_write_buffered


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_write_buffered.value [*value]]]
    [The value member is true only if the Stream type supports buffering of written data. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/is_write_buffered.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value is_write_buffered::value]

[indexterm2 value..is_write_buffered] 
The value member is true only if the Stream type supports buffering of written data. 


  static const bool value;



[endsect]



[endsect]

[section:local__basic_endpoint local::basic_endpoint]


Describes an endpoint for a UNIX socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``>
  class basic_endpoint


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.local__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.local__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     Construct an endpoint using the specified path name. 

     Copy constructor. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.capacity [*capacity]]]
    [Get the capacity of the endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.data [*data]]]
    [Get the underlying endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_eq_ [*operator=]]]
    [Assign from another endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.path [*path]]]
    [Get the path associated with the endpoint. 

     Set the path associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.protocol [*protocol]]]
    [The protocol associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.resize [*resize]]]
    [Set the underlying size of the endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.size [*size]]]
    [Get the underlying size of the endpoint in the native type. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.operator_not__eq_ [*operator!=]]]
    [Compare two endpoints for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt_ [*operator<]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt__lt_ [*operator<<]]]
    [Output an endpoint as a string. ]
  ]
  
]

The [link boost_asio.reference.local__basic_endpoint `local::basic_endpoint`] class template describes an endpoint that may be associated with a particular UNIX socket.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:basic_endpoint local::basic_endpoint::basic_endpoint]

[indexterm2 basic_endpoint..local::basic_endpoint] 
Default constructor. 


  ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload1 more...]]``


Construct an endpoint using the specified path name. 


  ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
      const char * path_name);
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload2 more...]]``

  ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
      const std::string & path_name);
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload3 more...]]``


Copy constructor. 


  ``[link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
      const basic_endpoint & other);
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.basic_endpoint.overload4 more...]]``


[section:overload1 local::basic_endpoint::basic_endpoint (1 of 4 overloads)]


Default constructor. 


  basic_endpoint();



[endsect]



[section:overload2 local::basic_endpoint::basic_endpoint (2 of 4 overloads)]


Construct an endpoint using the specified path name. 


  basic_endpoint(
      const char * path_name);



[endsect]



[section:overload3 local::basic_endpoint::basic_endpoint (3 of 4 overloads)]


Construct an endpoint using the specified path name. 


  basic_endpoint(
      const std::string & path_name);



[endsect]



[section:overload4 local::basic_endpoint::basic_endpoint (4 of 4 overloads)]


Copy constructor. 


  basic_endpoint(
      const basic_endpoint & other);



[endsect]


[endsect]


[section:capacity local::basic_endpoint::capacity]

[indexterm2 capacity..local::basic_endpoint] 
Get the capacity of the endpoint in the native type. 


  std::size_t capacity() const;



[endsect]


[section:data local::basic_endpoint::data]

[indexterm2 data..local::basic_endpoint] 
Get the underlying endpoint in the native type. 


  data_type * ``[link boost_asio.reference.local__basic_endpoint.data.overload1 data]``();
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.data.overload1 more...]]``

  const data_type * ``[link boost_asio.reference.local__basic_endpoint.data.overload2 data]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.data.overload2 more...]]``


[section:overload1 local::basic_endpoint::data (1 of 2 overloads)]


Get the underlying endpoint in the native type. 


  data_type * data();



[endsect]



[section:overload2 local::basic_endpoint::data (2 of 2 overloads)]


Get the underlying endpoint in the native type. 


  const data_type * data() const;



[endsect]


[endsect]


[section:data_type local::basic_endpoint::data_type]

[indexterm2 data_type..local::basic_endpoint] 
The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. 


  typedef implementation_defined data_type;



[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_not__eq_ local::basic_endpoint::operator!=]

[indexterm2 operator!=..local::basic_endpoint] 
Compare two endpoints for inequality. 


  friend bool operator!=(
      const basic_endpoint< Protocol > & e1,
      const basic_endpoint< Protocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt_ local::basic_endpoint::operator<]

[indexterm2 operator<..local::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator<(
      const basic_endpoint< Protocol > & e1,
      const basic_endpoint< Protocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_lt__lt_ local::basic_endpoint::operator<<]

[indexterm2 operator<<..local::basic_endpoint] 
Output an endpoint as a string. 


  std::basic_ostream< Elem, Traits > & operator<<(
      std::basic_ostream< Elem, Traits > & os,
      const basic_endpoint< Protocol > & endpoint);


Used to output a human-readable string for a specified endpoint.


[heading Parameters]
    

[variablelist
  
[[os][The output stream to which the string will be written.]]

[[endpoint][The endpoint to be written.]]

]


[heading Return Value]
      
The output stream. 




[endsect]



[section:operator_lt__eq_ local::basic_endpoint::operator<=]

[indexterm2 operator<=..local::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator<=(
      const basic_endpoint< Protocol > & e1,
      const basic_endpoint< Protocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ local::basic_endpoint::operator=]

[indexterm2 operator=..local::basic_endpoint] 
Assign from another endpoint. 


  basic_endpoint & operator=(
      const basic_endpoint & other);



[endsect]



[section:operator_eq__eq_ local::basic_endpoint::operator==]

[indexterm2 operator==..local::basic_endpoint] 
Compare two endpoints for equality. 


  friend bool operator==(
      const basic_endpoint< Protocol > & e1,
      const basic_endpoint< Protocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt_ local::basic_endpoint::operator>]

[indexterm2 operator>..local::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator>(
      const basic_endpoint< Protocol > & e1,
      const basic_endpoint< Protocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_gt__eq_ local::basic_endpoint::operator>=]

[indexterm2 operator>=..local::basic_endpoint] 
Compare endpoints for ordering. 


  friend bool operator>=(
      const basic_endpoint< Protocol > & e1,
      const basic_endpoint< Protocol > & e2);


[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:path local::basic_endpoint::path]

[indexterm2 path..local::basic_endpoint] 
Get the path associated with the endpoint. 


  std::string ``[link boost_asio.reference.local__basic_endpoint.path.overload1 path]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.path.overload1 more...]]``


Set the path associated with the endpoint. 


  void ``[link boost_asio.reference.local__basic_endpoint.path.overload2 path]``(
      const char * p);
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.path.overload2 more...]]``

  void ``[link boost_asio.reference.local__basic_endpoint.path.overload3 path]``(
      const std::string & p);
  ``  [''''&raquo;''' [link boost_asio.reference.local__basic_endpoint.path.overload3 more...]]``


[section:overload1 local::basic_endpoint::path (1 of 3 overloads)]


Get the path associated with the endpoint. 


  std::string path() const;



[endsect]



[section:overload2 local::basic_endpoint::path (2 of 3 overloads)]


Set the path associated with the endpoint. 


  void path(
      const char * p);



[endsect]



[section:overload3 local::basic_endpoint::path (3 of 3 overloads)]


Set the path associated with the endpoint. 


  void path(
      const std::string & p);



[endsect]


[endsect]


[section:protocol local::basic_endpoint::protocol]

[indexterm2 protocol..local::basic_endpoint] 
The protocol associated with the endpoint. 


  protocol_type protocol() const;



[endsect]



[section:protocol_type local::basic_endpoint::protocol_type]

[indexterm2 protocol_type..local::basic_endpoint] 
The protocol type associated with the endpoint. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/local/basic_endpoint.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:resize local::basic_endpoint::resize]

[indexterm2 resize..local::basic_endpoint] 
Set the underlying size of the endpoint in the native type. 


  void resize(
      std::size_t new_size);



[endsect]



[section:size local::basic_endpoint::size]

[indexterm2 size..local::basic_endpoint] 
Get the underlying size of the endpoint in the native type. 


  std::size_t size() const;



[endsect]



[endsect]

[section:local__connect_pair local::connect_pair]

[indexterm1 local::connect_pair] 
Create a pair of connected sockets. 

    
  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService1]``,
      typename ``[link boost_asio.reference.SocketService SocketService2]``>
  void ``[link boost_asio.reference.local__connect_pair.overload1 connect_pair]``(
      basic_socket< Protocol, SocketService1 > & socket1,
      basic_socket< Protocol, SocketService2 > & socket2);
  ``  [''''&raquo;''' [link boost_asio.reference.local__connect_pair.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService1]``,
      typename ``[link boost_asio.reference.SocketService SocketService2]``>
  boost::system::error_code ``[link boost_asio.reference.local__connect_pair.overload2 connect_pair]``(
      basic_socket< Protocol, SocketService1 > & socket1,
      basic_socket< Protocol, SocketService2 > & socket2,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.local__connect_pair.overload2 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/local/connect_pair.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 local::connect_pair (1 of 2 overloads)]


Create a pair of connected sockets. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService1]``,
      typename ``[link boost_asio.reference.SocketService SocketService2]``>
  void connect_pair(
      basic_socket< Protocol, SocketService1 > & socket1,
      basic_socket< Protocol, SocketService2 > & socket2);



[endsect]



[section:overload2 local::connect_pair (2 of 2 overloads)]


Create a pair of connected sockets. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``,
      typename ``[link boost_asio.reference.SocketService SocketService1]``,
      typename ``[link boost_asio.reference.SocketService SocketService2]``>
  boost::system::error_code connect_pair(
      basic_socket< Protocol, SocketService1 > & socket1,
      basic_socket< Protocol, SocketService2 > & socket2,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:local__datagram_protocol local::datagram_protocol]


Encapsulates the flags needed for datagram-oriented UNIX sockets. 


  class datagram_protocol


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.local__datagram_protocol.endpoint [*endpoint]]]
    [The type of a UNIX domain endpoint. ]
  
  ]

  [

    [[link boost_asio.reference.local__datagram_protocol.socket [*socket]]]
    [The UNIX domain socket type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__datagram_protocol.family [*family]]]
    [Obtain an identifier for the protocol family. ]
  ]
  
  [
    [[link boost_asio.reference.local__datagram_protocol.protocol [*protocol]]]
    [Obtain an identifier for the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.local__datagram_protocol.type [*type]]]
    [Obtain an identifier for the type of the protocol. ]
  ]
  
]

The [link boost_asio.reference.local__datagram_protocol `local::datagram_protocol`] class contains flags necessary for datagram-oriented UNIX domain sockets.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.




[heading Requirements]

[*Header: ][^boost/asio/local/datagram_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:endpoint local::datagram_protocol::endpoint]

[indexterm2 endpoint..local::datagram_protocol] 
The type of a UNIX domain endpoint. 


  typedef basic_endpoint< datagram_protocol > endpoint;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.local__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.local__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     Construct an endpoint using the specified path name. 

     Copy constructor. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.capacity [*capacity]]]
    [Get the capacity of the endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.data [*data]]]
    [Get the underlying endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_eq_ [*operator=]]]
    [Assign from another endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.path [*path]]]
    [Get the path associated with the endpoint. 

     Set the path associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.protocol [*protocol]]]
    [The protocol associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.resize [*resize]]]
    [Set the underlying size of the endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.size [*size]]]
    [Get the underlying size of the endpoint in the native type. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.operator_not__eq_ [*operator!=]]]
    [Compare two endpoints for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt_ [*operator<]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt__lt_ [*operator<<]]]
    [Output an endpoint as a string. ]
  ]
  
]

The [link boost_asio.reference.local__basic_endpoint `local::basic_endpoint`] class template describes an endpoint that may be associated with a particular UNIX socket.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/local/datagram_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:family local::datagram_protocol::family]

[indexterm2 family..local::datagram_protocol] 
Obtain an identifier for the protocol family. 


  int family() const;



[endsect]



[section:protocol local::datagram_protocol::protocol]

[indexterm2 protocol..local::datagram_protocol] 
Obtain an identifier for the protocol. 


  int protocol() const;



[endsect]



[section:socket local::datagram_protocol::socket]

[indexterm2 socket..local::datagram_protocol] 
The UNIX domain socket type. 


  typedef basic_datagram_socket< datagram_protocol > socket;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_datagram_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_datagram_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_receive_from [*async_receive_from]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_send [*async_send]]]
    [Start an asynchronous send on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.basic_datagram_socket [*basic_datagram_socket]]]
    [Construct a basic_datagram_socket without opening it. 

     Construct and open a basic_datagram_socket. 

     Construct a basic_datagram_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_datagram_socket on an existing native socket. 

     Move-construct a basic_datagram_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_datagram_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.receive [*receive]]]
    [Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.receive_from [*receive_from]]]
    [Receive a datagram with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.send [*send]]]
    [Send some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.send_to [*send_to]]]
    [Send a datagram to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_datagram_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_datagram_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_datagram_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] class template provides asynchronous and blocking datagram-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/local/datagram_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:type local::datagram_protocol::type]

[indexterm2 type..local::datagram_protocol] 
Obtain an identifier for the type of the protocol. 


  int type() const;



[endsect]



[endsect]

[section:local__stream_protocol local::stream_protocol]


Encapsulates the flags needed for stream-oriented UNIX sockets. 


  class stream_protocol


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.local__stream_protocol.acceptor [*acceptor]]]
    [The UNIX domain acceptor type. ]
  
  ]

  [

    [[link boost_asio.reference.local__stream_protocol.endpoint [*endpoint]]]
    [The type of a UNIX domain endpoint. ]
  
  ]

  [

    [[link boost_asio.reference.local__stream_protocol.iostream [*iostream]]]
    [The UNIX domain iostream type. ]
  
  ]

  [

    [[link boost_asio.reference.local__stream_protocol.socket [*socket]]]
    [The UNIX domain socket type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__stream_protocol.family [*family]]]
    [Obtain an identifier for the protocol family. ]
  ]
  
  [
    [[link boost_asio.reference.local__stream_protocol.protocol [*protocol]]]
    [Obtain an identifier for the protocol. ]
  ]
  
  [
    [[link boost_asio.reference.local__stream_protocol.type [*type]]]
    [Obtain an identifier for the type of the protocol. ]
  ]
  
]

The [link boost_asio.reference.local__stream_protocol `local::stream_protocol`] class contains flags necessary for stream-oriented UNIX domain sockets.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.




[heading Requirements]

[*Header: ][^boost/asio/local/stream_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:acceptor local::stream_protocol::acceptor]

[indexterm2 acceptor..local::stream_protocol] 
The UNIX domain acceptor type. 


  typedef basic_socket_acceptor< stream_protocol > acceptor;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_socket_acceptor.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.native_handle_type [*native_handle_type]]]
    [The native representation of an acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of an acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_acceptor.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.accept [*accept]]]
    [Accept a new connection. 

     Accept a new connection and obtain the endpoint of the peer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.assign [*assign]]]
    [Assigns an existing native acceptor to the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.async_accept [*async_accept]]]
    [Start an asynchronous accept. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.basic_socket_acceptor [*basic_socket_acceptor]]]
    [Construct an acceptor without opening it. 

     Construct an open acceptor. 

     Construct an acceptor opened on the given endpoint. 

     Construct a basic_socket_acceptor on an existing native acceptor. 

     Move-construct a basic_socket_acceptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.bind [*bind]]]
    [Bind the acceptor to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.close [*close]]]
    [Close the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_option [*get_option]]]
    [Get an option from the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.io_control [*io_control]]]
    [Perform an IO control command on the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.is_open [*is_open]]]
    [Determine whether the acceptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.listen [*listen]]]
    [Place the acceptor into the state where it will listen for new connections. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native acceptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native_handle [*native_handle]]]
    [Get the native acceptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native acceptor implementation. 

     Sets the non-blocking mode of the native acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the acceptor. 

     Sets the non-blocking mode of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.open [*open]]]
    [Open the acceptor using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_socket_acceptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.set_option [*set_option]]]
    [Set an option on the acceptor. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_acceptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_acceptor.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.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_acceptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_socket_acceptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_socket_acceptor `basic_socket_acceptor`] class template is used for accepting new socket connections.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Example]
  
Opening a socket acceptor with the SO\_REUSEADDR option enabled: 

   boost::asio::ip::tcp::acceptor acceptor(io_service);
   boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), port);
   acceptor.open(endpoint.protocol());
   acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true));
   acceptor.bind(endpoint);
   acceptor.listen();







[heading Requirements]

[*Header: ][^boost/asio/local/stream_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:endpoint local::stream_protocol::endpoint]

[indexterm2 endpoint..local::stream_protocol] 
The type of a UNIX domain endpoint. 


  typedef basic_endpoint< stream_protocol > endpoint;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.local__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.local__basic_endpoint.protocol_type [*protocol_type]]]
    [The protocol type associated with the endpoint. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.basic_endpoint [*basic_endpoint]]]
    [Default constructor. 

     Construct an endpoint using the specified path name. 

     Copy constructor. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.capacity [*capacity]]]
    [Get the capacity of the endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.data [*data]]]
    [Get the underlying endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_eq_ [*operator=]]]
    [Assign from another endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.path [*path]]]
    [Get the path associated with the endpoint. 

     Set the path associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.protocol [*protocol]]]
    [The protocol associated with the endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.resize [*resize]]]
    [Set the underlying size of the endpoint in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.size [*size]]]
    [Get the underlying size of the endpoint in the native type. ]
  ]
  
]

[heading Friends]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.operator_not__eq_ [*operator!=]]]
    [Compare two endpoints for inequality. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt_ [*operator<]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt__eq_ [*operator<=]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_eq__eq_ [*operator==]]]
    [Compare two endpoints for equality. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_gt_ [*operator>]]]
    [Compare endpoints for ordering. ]
  ]
  
  [
    [[link boost_asio.reference.local__basic_endpoint.operator_gt__eq_ [*operator>=]]]
    [Compare endpoints for ordering. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.local__basic_endpoint.operator_lt__lt_ [*operator<<]]]
    [Output an endpoint as a string. ]
  ]
  
]

The [link boost_asio.reference.local__basic_endpoint `local::basic_endpoint`] class template describes an endpoint that may be associated with a particular UNIX socket.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/local/stream_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:family local::stream_protocol::family]

[indexterm2 family..local::stream_protocol] 
Obtain an identifier for the protocol family. 


  int family() const;



[endsect]



[section:iostream local::stream_protocol::iostream]

[indexterm2 iostream..local::stream_protocol] 
The UNIX domain iostream type. 


  typedef basic_socket_iostream< stream_protocol > iostream;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_socket_iostream.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_iostream.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_socket_iostream.time_type [*time_type]]]
    [The time type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_socket_iostream.basic_socket_iostream [*basic_socket_iostream]]]
    [Construct a basic_socket_iostream without establishing a connection. 

     Establish a connection to an endpoint corresponding to a resolver query. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.close [*close]]]
    [Close the connection. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.connect [*connect]]]
    [Establish a connection to an endpoint corresponding to a resolver query. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.error [*error]]]
    [Get the last error associated with the stream. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.expires_at [*expires_at]]]
    [Get the stream's expiry time as an absolute time. 

     Set the stream's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the stream's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_socket_iostream.rdbuf [*rdbuf]]]
    [Return a pointer to the underlying streambuf. ]
  ]
  
]


[heading Requirements]

[*Header: ][^boost/asio/local/stream_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:protocol local::stream_protocol::protocol]

[indexterm2 protocol..local::stream_protocol] 
Obtain an identifier for the protocol. 


  int protocol() const;



[endsect]



[section:socket local::stream_protocol::socket]

[indexterm2 socket..local::stream_protocol] 
The UNIX domain socket type. 


  typedef basic_stream_socket< stream_protocol > socket;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_stream_socket.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.lowest_layer_type [*lowest_layer_type]]]
    [A basic_socket is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.native_handle_type [*native_handle_type]]]
    [The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.reuse_address [*reuse_address]]]
    [Socket option to allow the socket to be bound to an address that is already in use. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_stream_socket.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.assign [*assign]]]
    [Assign an existing native socket to the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.basic_stream_socket [*basic_stream_socket]]]
    [Construct a basic_stream_socket without opening it. 

     Construct and open a basic_stream_socket. 

     Construct a basic_stream_socket, opening it and binding it to the given local endpoint. 

     Construct a basic_stream_socket on an existing native socket. 

     Move-construct a basic_stream_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.bind [*bind]]]
    [Bind the socket to the given local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.close [*close]]]
    [Close the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.connect [*connect]]]
    [Connect the socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_option [*get_option]]]
    [Get an option from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.local_endpoint [*local_endpoint]]]
    [Get the local endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native_handle [*native_handle]]]
    [Get the native socket representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.open [*open]]]
    [Open the socket using the specified protocol. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_socket from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.read_some [*read_some]]]
    [Read some data from the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.receive [*receive]]]
    [Receive some data on the socket. 

     Receive some data on a connected socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.send [*send]]]
    [Send some data on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.set_option [*set_option]]]
    [Set an option on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.write_some [*write_some]]]
    [Write some data to the socket. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_stream_socket.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_stream_socket.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_stream_socket.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] class template provides asynchronous and blocking stream-oriented socket functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/local/stream_protocol.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:type local::stream_protocol::type]

[indexterm2 type..local::stream_protocol] 
Obtain an identifier for the type of the protocol. 


  int type() const;



[endsect]



[endsect]

[section:mutable_buffer mutable_buffer]


Holds a buffer that can be modified. 


  class mutable_buffer


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
    [Construct an empty buffer. 

     Construct a buffer to represent a given memory range. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffer.operator_plus_ [*operator+]]]
    [Create a new modifiable buffer that is offset from the start of another. ]
  ]
  
]

The [link boost_asio.reference.mutable_buffer `mutable_buffer`] class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.


[heading Accessing Buffer Contents]
  


The contents of a buffer may be accessed using the [link boost_asio.reference.buffer_size `buffer_size`]  and [link boost_asio.reference.buffer_cast `buffer_cast`]  functions:



   boost::asio::mutable_buffer b1 = ...;
   std::size_t s1 = boost::asio::buffer_size(b1);
   unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered. 

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:mutable_buffer mutable_buffer::mutable_buffer]

[indexterm2 mutable_buffer..mutable_buffer] 
Construct an empty buffer. 


  ``[link boost_asio.reference.mutable_buffer.mutable_buffer.overload1 mutable_buffer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffer.mutable_buffer.overload1 more...]]``


Construct a buffer to represent a given memory range. 


  ``[link boost_asio.reference.mutable_buffer.mutable_buffer.overload2 mutable_buffer]``(
      void * data,
      std::size_t size);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffer.mutable_buffer.overload2 more...]]``


[section:overload1 mutable_buffer::mutable_buffer (1 of 2 overloads)]


Construct an empty buffer. 


  mutable_buffer();



[endsect]



[section:overload2 mutable_buffer::mutable_buffer (2 of 2 overloads)]


Construct a buffer to represent a given memory range. 


  mutable_buffer(
      void * data,
      std::size_t size);



[endsect]


[endsect]

[section:operator_plus_ mutable_buffer::operator+]

[indexterm2 operator+..mutable_buffer] 
Create a new modifiable buffer that is offset from the start of another. 


  mutable_buffer ``[link boost_asio.reference.mutable_buffer.operator_plus_.overload1 operator+]``(
      const mutable_buffer & b,
      std::size_t start);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffer.operator_plus_.overload1 more...]]``

  mutable_buffer ``[link boost_asio.reference.mutable_buffer.operator_plus_.overload2 operator+]``(
      std::size_t start,
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffer.operator_plus_.overload2 more...]]``


[section:overload1 mutable_buffer::operator+ (1 of 2 overloads)]


Create a new modifiable buffer that is offset from the start of another. 


  mutable_buffer operator+(
      const mutable_buffer & b,
      std::size_t start);



[endsect]



[section:overload2 mutable_buffer::operator+ (2 of 2 overloads)]


Create a new modifiable buffer that is offset from the start of another. 


  mutable_buffer operator+(
      std::size_t start,
      const mutable_buffer & b);



[endsect]


[endsect]


[endsect]

[section:mutable_buffers_1 mutable_buffers_1]


Adapts a single modifiable buffer so that it meets the requirements of the MutableBufferSequence concept. 


  class mutable_buffers_1 :
    public mutable_buffer


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.mutable_buffers_1.const_iterator [*const_iterator]]]
    [A random-access iterator type that may be used to read elements. ]
  
  ]

  [

    [[link boost_asio.reference.mutable_buffers_1.value_type [*value_type]]]
    [The type for each element in the list of buffers. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffers_1.begin [*begin]]]
    [Get a random-access iterator to the first element. ]
  ]
  
  [
    [[link boost_asio.reference.mutable_buffers_1.end [*end]]]
    [Get a random-access iterator for one past the last element. ]
  ]
  
  [
    [[link boost_asio.reference.mutable_buffers_1.mutable_buffers_1 [*mutable_buffers_1]]]
    [Construct to represent a given memory range. 

     Construct to represent a single modifiable buffer. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffers_1.operator_plus_ [*operator+]]]
    [Create a new modifiable buffer that is offset from the start of another. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:begin mutable_buffers_1::begin]

[indexterm2 begin..mutable_buffers_1] 
Get a random-access iterator to the first element. 


  const_iterator begin() const;



[endsect]



[section:const_iterator mutable_buffers_1::const_iterator]

[indexterm2 const_iterator..mutable_buffers_1] 
A random-access iterator type that may be used to read elements. 


  typedef const mutable_buffer * const_iterator;



[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:end mutable_buffers_1::end]

[indexterm2 end..mutable_buffers_1] 
Get a random-access iterator for one past the last element. 


  const_iterator end() const;



[endsect]


[section:mutable_buffers_1 mutable_buffers_1::mutable_buffers_1]

[indexterm2 mutable_buffers_1..mutable_buffers_1] 
Construct to represent a given memory range. 


  ``[link boost_asio.reference.mutable_buffers_1.mutable_buffers_1.overload1 mutable_buffers_1]``(
      void * data,
      std::size_t size);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffers_1.mutable_buffers_1.overload1 more...]]``


Construct to represent a single modifiable buffer. 


  explicit ``[link boost_asio.reference.mutable_buffers_1.mutable_buffers_1.overload2 mutable_buffers_1]``(
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffers_1.mutable_buffers_1.overload2 more...]]``


[section:overload1 mutable_buffers_1::mutable_buffers_1 (1 of 2 overloads)]


Construct to represent a given memory range. 


  mutable_buffers_1(
      void * data,
      std::size_t size);



[endsect]



[section:overload2 mutable_buffers_1::mutable_buffers_1 (2 of 2 overloads)]


Construct to represent a single modifiable buffer. 


  mutable_buffers_1(
      const mutable_buffer & b);



[endsect]


[endsect]

[section:operator_plus_ mutable_buffers_1::operator+]

[indexterm2 operator+..mutable_buffers_1] 
Create a new modifiable buffer that is offset from the start of another. 


  mutable_buffer ``[link boost_asio.reference.mutable_buffers_1.operator_plus_.overload1 operator+]``(
      const mutable_buffer & b,
      std::size_t start);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffers_1.operator_plus_.overload1 more...]]``

  mutable_buffer ``[link boost_asio.reference.mutable_buffers_1.operator_plus_.overload2 operator+]``(
      std::size_t start,
      const mutable_buffer & b);
  ``  [''''&raquo;''' [link boost_asio.reference.mutable_buffers_1.operator_plus_.overload2 more...]]``


[section:overload1 mutable_buffers_1::operator+ (1 of 2 overloads)]


['Inherited from mutable_buffer.]


Create a new modifiable buffer that is offset from the start of another. 


  mutable_buffer operator+(
      const mutable_buffer & b,
      std::size_t start);



[endsect]



[section:overload2 mutable_buffers_1::operator+ (2 of 2 overloads)]


['Inherited from mutable_buffer.]


Create a new modifiable buffer that is offset from the start of another. 


  mutable_buffer operator+(
      std::size_t start,
      const mutable_buffer & b);



[endsect]


[endsect]


[section:value_type mutable_buffers_1::value_type]

[indexterm2 value_type..mutable_buffers_1] 
The type for each element in the list of buffers. 


  typedef mutable_buffer value_type;


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
    [Construct an empty buffer. 

     Construct a buffer to represent a given memory range. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffer.operator_plus_ [*operator+]]]
    [Create a new modifiable buffer that is offset from the start of another. ]
  ]
  
]

The [link boost_asio.reference.mutable_buffer `mutable_buffer`] class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.


[heading Accessing Buffer Contents]
  


The contents of a buffer may be accessed using the [link boost_asio.reference.buffer_size `buffer_size`]  and [link boost_asio.reference.buffer_cast `buffer_cast`]  functions:



   boost::asio::mutable_buffer b1 = ...;
   std::size_t s1 = boost::asio::buffer_size(b1);
   unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered. 


[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]

[section:null_buffers null_buffers]


An implementation of both the ConstBufferSequence and MutableBufferSequence concepts to represent a null buffer sequence. 


  class null_buffers


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.null_buffers.const_iterator [*const_iterator]]]
    [A random-access iterator type that may be used to read elements. ]
  
  ]

  [

    [[link boost_asio.reference.null_buffers.value_type [*value_type]]]
    [The type for each element in the list of buffers. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.null_buffers.begin [*begin]]]
    [Get a random-access iterator to the first element. ]
  ]
  
  [
    [[link boost_asio.reference.null_buffers.end [*end]]]
    [Get a random-access iterator for one past the last element. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:begin null_buffers::begin]

[indexterm2 begin..null_buffers] 
Get a random-access iterator to the first element. 


  const_iterator begin() const;



[endsect]



[section:const_iterator null_buffers::const_iterator]

[indexterm2 const_iterator..null_buffers] 
A random-access iterator type that may be used to read elements. 


  typedef const mutable_buffer * const_iterator;



[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:end null_buffers::end]

[indexterm2 end..null_buffers] 
Get a random-access iterator for one past the last element. 


  const_iterator end() const;



[endsect]



[section:value_type null_buffers::value_type]

[indexterm2 value_type..null_buffers] 
The type for each element in the list of buffers. 


  typedef mutable_buffer value_type;


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffer.mutable_buffer [*mutable_buffer]]]
    [Construct an empty buffer. 

     Construct a buffer to represent a given memory range. ]
  ]
  
]

[heading Related Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.mutable_buffer.operator_plus_ [*operator+]]]
    [Create a new modifiable buffer that is offset from the start of another. ]
  ]
  
]

The [link boost_asio.reference.mutable_buffer `mutable_buffer`] class provides a safe representation of a buffer that can be modified. It does not own the underlying data, and so is cheap to copy or assign.


[heading Accessing Buffer Contents]
  


The contents of a buffer may be accessed using the [link boost_asio.reference.buffer_size `buffer_size`]  and [link boost_asio.reference.buffer_cast `buffer_cast`]  functions:



   boost::asio::mutable_buffer b1 = ...;
   std::size_t s1 = boost::asio::buffer_size(b1);
   unsigned char* p1 = boost::asio::buffer_cast<unsigned char*>(b1);




The `boost::asio::buffer_cast` function permits violations of type safety, so uses of it in application code should be carefully considered. 


[heading Requirements]

[*Header: ][^boost/asio/buffer.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[endsect]


[section:placeholders__bytes_transferred placeholders::bytes_transferred]

[indexterm1 placeholders::bytes_transferred] 
An argument placeholder, for use with boost::bind(), that corresponds to the bytes\_transferred argument of a handler for asynchronous functions such as `boost::asio::basic_stream_socket::async_write_some` or `boost::asio::async_write`. 


  unspecified bytes_transferred;


[heading Requirements]

[*Header: ][^boost/asio/placeholders.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:placeholders__error placeholders::error]

[indexterm1 placeholders::error] 
An argument placeholder, for use with boost::bind(), that corresponds to the error argument of a handler for any of the asynchronous functions. 


  unspecified error;


[heading Requirements]

[*Header: ][^boost/asio/placeholders.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:placeholders__iterator placeholders::iterator]

[indexterm1 placeholders::iterator] 
An argument placeholder, for use with boost::bind(), that corresponds to the iterator argument of a handler for asynchronous functions such as boost::asio::basic\_resolver::async\_resolve. 


  unspecified iterator;


[heading Requirements]

[*Header: ][^boost/asio/placeholders.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:placeholders__signal_number placeholders::signal_number]

[indexterm1 placeholders::signal_number] 
An argument placeholder, for use with boost::bind(), that corresponds to the signal\_number argument of a handler for asynchronous functions such as `boost::asio::signal_set::async_wait`. 


  unspecified signal_number;


[heading Requirements]

[*Header: ][^boost/asio/placeholders.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:posix__basic_descriptor posix::basic_descriptor]


Provides POSIX descriptor functionality. 


  template<
      typename ``[link boost_asio.reference.DescriptorService DescriptorService]``>
  class basic_descriptor :
    public basic_io_object< DescriptorService >,
    public posix::descriptor_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_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]]]
    [A basic_descriptor is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.native_handle_type [*native_handle_type]]]
    [The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the descriptor. ]
  
  ]

  [

    [[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. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[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. 

     Construct a basic_descriptor on an existing native descriptor. 

     Move-construct a basic_descriptor from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native_handle [*native_handle]]]
    [Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native descriptor implementation. 

     Sets the non-blocking mode of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the descriptor. 

     Sets the non-blocking mode of the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_descriptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.release [*release]]]
    [Release ownership of the native descriptor implementation. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_descriptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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]]

  [
    [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] class template provides the ability to wrap a POSIX descriptor.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign posix::basic_descriptor::assign]

[indexterm2 assign..posix::basic_descriptor] 
Assign an existing native descriptor to the descriptor. 


  void ``[link boost_asio.reference.posix__basic_descriptor.assign.overload1 assign]``(
      const native_handle_type & native_descriptor);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.assign.overload2 assign]``(
      const native_handle_type & native_descriptor,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.assign.overload2 more...]]``


[section:overload1 posix::basic_descriptor::assign (1 of 2 overloads)]


Assign an existing native descriptor to the descriptor. 


  void assign(
      const native_handle_type & native_descriptor);



[endsect]



[section:overload2 posix::basic_descriptor::assign (2 of 2 overloads)]


Assign an existing native descriptor to the descriptor. 


  boost::system::error_code assign(
      const native_handle_type & native_descriptor,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:basic_descriptor posix::basic_descriptor::basic_descriptor]

[indexterm2 basic_descriptor..posix::basic_descriptor] 
Construct a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] without opening it. 


  explicit ``[link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload1 basic_descriptor]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload1 more...]]``


Construct a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] on an existing native descriptor. 


  ``[link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload2 basic_descriptor]``(
      boost::asio::io_service & io_service,
      const native_handle_type & native_descriptor);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload2 more...]]``


Move-construct a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] from another. 


  ``[link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload3 basic_descriptor]``(
      basic_descriptor && other);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.basic_descriptor.overload3 more...]]``


[section:overload1 posix::basic_descriptor::basic_descriptor (1 of 3 overloads)]


Construct a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] without opening it. 


  basic_descriptor(
      boost::asio::io_service & io_service);


This constructor creates a descriptor without opening it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor. ]]

]




[endsect]



[section:overload2 posix::basic_descriptor::basic_descriptor (2 of 3 overloads)]


Construct a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] on an existing native descriptor. 


  basic_descriptor(
      boost::asio::io_service & io_service,
      const native_handle_type & native_descriptor);


This constructor creates a descriptor object to hold an existing native descriptor.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the descriptor will use to dispatch handlers for any asynchronous operations performed on the descriptor.]]

[[native_descriptor][A native descriptor.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 posix::basic_descriptor::basic_descriptor (3 of 3 overloads)]


Move-construct a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] from another. 


  basic_descriptor(
      basic_descriptor && other);


This constructor moves a descriptor from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_descriptor(io_service&) constructor`. 




[endsect]


[endsect]


[section:bytes_readable posix::basic_descriptor::bytes_readable]


['Inherited from posix::descriptor_base.]

[indexterm2 bytes_readable..posix::basic_descriptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel posix::basic_descriptor::cancel]

[indexterm2 cancel..posix::basic_descriptor] 
Cancel all asynchronous operations associated with the descriptor. 


  void ``[link boost_asio.reference.posix__basic_descriptor.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.cancel.overload2 more...]]``


[section:overload1 posix::basic_descriptor::cancel (1 of 2 overloads)]


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_descriptor::cancel (2 of 2 overloads)]


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_descriptor::close]

[indexterm2 close..posix::basic_descriptor] 
Close the descriptor. 


  void ``[link boost_asio.reference.posix__basic_descriptor.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.close.overload2 more...]]``


[section:overload1 posix::basic_descriptor::close (1 of 2 overloads)]


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. Note that, even if the function indicates an error, the underlying descriptor is closed. ]]

]




[endsect]



[section:overload2 posix::basic_descriptor::close (2 of 2 overloads)]


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. Note that, even if the function indicates an error, the underlying descriptor is closed. ]]

]




[endsect]


[endsect]

[section:get_implementation posix::basic_descriptor::get_implementation]

[indexterm2 get_implementation..posix::basic_descriptor] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.posix__basic_descriptor.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.posix__basic_descriptor.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.get_implementation.overload2 more...]]``


[section:overload1 posix::basic_descriptor::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 posix::basic_descriptor::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service posix::basic_descriptor::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..posix::basic_descriptor] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service posix::basic_descriptor::get_service]

[indexterm2 get_service..posix::basic_descriptor] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.posix__basic_descriptor.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.posix__basic_descriptor.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.get_service.overload2 more...]]``


[section:overload1 posix::basic_descriptor::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 posix::basic_descriptor::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation posix::basic_descriptor::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..posix::basic_descriptor] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type posix::basic_descriptor::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..posix::basic_descriptor] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control posix::basic_descriptor::io_control]

[indexterm2 io_control..posix::basic_descriptor] 
Perform an IO control command on the descriptor. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  void ``[link boost_asio.reference.posix__basic_descriptor.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.io_control.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.io_control.overload2 more...]]``


[section:overload1 posix::basic_descriptor::io_control (1 of 2 overloads)]


Perform an IO control command on the descriptor. 


  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 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_descriptor::io_control (2 of 2 overloads)]


Perform an IO control command on the descriptor. 


  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 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:is_open posix::basic_descriptor::is_open]

[indexterm2 is_open..posix::basic_descriptor] 
Determine whether the descriptor is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer posix::basic_descriptor::lowest_layer]

[indexterm2 lowest_layer..posix::basic_descriptor] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.posix__basic_descriptor.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.posix__basic_descriptor.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.lowest_layer.overload2 more...]]``


[section:overload1 posix::basic_descriptor::lowest_layer (1 of 2 overloads)]


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 [link boost_asio.reference.posix__basic_descriptor `posix::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. 




[endsect]



[section:overload2 posix::basic_descriptor::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type posix::basic_descriptor::lowest_layer_type]

[indexterm2 lowest_layer_type..posix::basic_descriptor] 
A [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] is always the lowest layer. 


  typedef basic_descriptor< DescriptorService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_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]]]
    [A basic_descriptor is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.native_handle_type [*native_handle_type]]]
    [The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the descriptor. ]
  
  ]

  [

    [[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. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[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. 

     Construct a basic_descriptor on an existing native descriptor. 

     Move-construct a basic_descriptor from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native_handle [*native_handle]]]
    [Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native descriptor implementation. 

     Sets the non-blocking mode of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the descriptor. 

     Sets the non-blocking mode of the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_descriptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.release [*release]]]
    [Release ownership of the native descriptor implementation. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_descriptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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]]

  [
    [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] class template provides the ability to wrap a POSIX descriptor.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native posix::basic_descriptor::native]

[indexterm2 native..posix::basic_descriptor] 
(Deprecated: Use `native_handle()`.) Get the native descriptor representation. 


  native_type native();


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:native_handle posix::basic_descriptor::native_handle]

[indexterm2 native_handle..posix::basic_descriptor] 
Get the native descriptor representation. 


  native_handle_type native_handle();


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:native_handle_type posix::basic_descriptor::native_handle_type]

[indexterm2 native_handle_type..posix::basic_descriptor] 
The native representation of a descriptor. 


  typedef DescriptorService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking posix::basic_descriptor::native_non_blocking]

[indexterm2 native_non_blocking..posix::basic_descriptor] 
Gets the non-blocking mode of the native descriptor implementation. 


  bool ``[link boost_asio.reference.posix__basic_descriptor.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native descriptor implementation. 


  void ``[link boost_asio.reference.posix__basic_descriptor.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.native_non_blocking.overload3 more...]]``


[section:overload1 posix::basic_descriptor::native_non_blocking (1 of 3 overloads)]


Gets the non-blocking mode of the native descriptor implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native descriptor. This mode has no effect on the behaviour of the descriptor object's synchronous operations.


[heading Return Value]
      
`true` if the underlying descriptor is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the descriptor object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native descriptor. 




[endsect]



[section:overload2 posix::basic_descriptor::native_non_blocking (2 of 3 overloads)]


Sets the non-blocking mode of the native descriptor implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native descriptor. It has no effect on the behaviour of the descriptor object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying descriptor is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense. ]]

]




[endsect]



[section:overload3 posix::basic_descriptor::native_non_blocking (3 of 3 overloads)]


Sets the non-blocking mode of the native descriptor implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native descriptor. It has no effect on the behaviour of the descriptor object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying descriptor is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense. ]]

]




[endsect]


[endsect]


[section:native_type posix::basic_descriptor::native_type]

[indexterm2 native_type..posix::basic_descriptor] 
(Deprecated: Use native\_handle\_type.) The native representation of a descriptor. 


  typedef DescriptorService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking posix::basic_descriptor::non_blocking]

[indexterm2 non_blocking..posix::basic_descriptor] 
Gets the non-blocking mode of the descriptor. 


  bool ``[link boost_asio.reference.posix__basic_descriptor.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the descriptor. 


  void ``[link boost_asio.reference.posix__basic_descriptor.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_descriptor.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_descriptor.non_blocking.overload3 more...]]``


[section:overload1 posix::basic_descriptor::non_blocking (1 of 3 overloads)]


Gets the non-blocking mode of the descriptor. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the descriptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 posix::basic_descriptor::non_blocking (2 of 3 overloads)]


Sets the non-blocking mode of the descriptor. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the descriptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 posix::basic_descriptor::non_blocking (3 of 3 overloads)]


Sets the non-blocking mode of the descriptor. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the descriptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io posix::basic_descriptor::non_blocking_io]


['Inherited from posix::descriptor_base.]

[indexterm2 non_blocking_io..posix::basic_descriptor] 
(Deprecated: Use non\_blocking().) IO control command to set the blocking mode of the descriptor. 


  typedef implementation_defined non_blocking_io;



Implements the FIONBIO IO control command.


[heading Example]
  


   boost::asio::posix::stream_descriptor descriptor(io_service); 
   ...
   boost::asio::descriptor_base::non_blocking_io command(true);
   descriptor.io_control(command);







[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ posix::basic_descriptor::operator=]

[indexterm2 operator=..posix::basic_descriptor] 
Move-assign a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] from another. 


  basic_descriptor & operator=(
      basic_descriptor && other);


This assignment operator moves a descriptor from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_descriptor(io_service&) constructor`. 




[endsect]



[section:release posix::basic_descriptor::release]

[indexterm2 release..posix::basic_descriptor] 
Release ownership of the native descriptor implementation. 


  native_handle_type release();


This function may be used to obtain the underlying representation of the descriptor. After calling this function, `is_open()` returns false. The caller is responsible for closing the descriptor.

All outstanding asynchronous read or write operations will finish immediately, and the handlers for cancelled operations will be passed the `boost::asio::error::operation_aborted` error. 


[endsect]



[section:service posix::basic_descriptor::service]


['Inherited from basic_io_object.]

[indexterm2 service..posix::basic_descriptor] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type posix::basic_descriptor::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..posix::basic_descriptor] 
The type of the service that will be used to provide I/O operations. 


  typedef DescriptorService service_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:_basic_descriptor posix::basic_descriptor::~basic_descriptor]

[indexterm2 ~basic_descriptor..posix::basic_descriptor] 
Protected destructor to prevent deletion through this type. 


  ~basic_descriptor();



[endsect]



[endsect]

[section:posix__basic_stream_descriptor posix::basic_stream_descriptor]


Provides stream-oriented descriptor functionality. 


  template<
      typename ``[link boost_asio.reference.StreamDescriptorService StreamDescriptorService]`` = stream_descriptor_service>
  class basic_stream_descriptor :
    public posix::basic_descriptor< StreamDescriptorService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[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.posix__basic_stream_descriptor.native_handle_type [*native_handle_type]]]
    [The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_stream_descriptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the descriptor. ]
  
  ]

  [

    [[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. ]
  
  ]

]

[heading Member Functions]
[table
  [[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.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. 

     Construct a basic_stream_descriptor on an existing native descriptor. 

     Move-construct a basic_stream_descriptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.close [*close]]]
    [Close the descriptor. ]
  ]
  
  [
    [[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_stream_descriptor.io_control [*io_control]]]
    [Perform an IO control command on the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.is_open [*is_open]]]
    [Determine whether the descriptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.native_handle [*native_handle]]]
    [Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native descriptor implementation. 

     Sets the non-blocking mode of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the descriptor. 

     Sets the non-blocking mode of the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_descriptor from another. ]
  ]
  
  [
    [[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.release [*release]]]
    [Release ownership of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.write_some [*write_some]]]
    [Write some data to the descriptor. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] class template provides asynchronous and blocking stream-oriented descriptor functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign posix::basic_stream_descriptor::assign]

[indexterm2 assign..posix::basic_stream_descriptor] 
Assign an existing native descriptor to the descriptor. 


  void ``[link boost_asio.reference.posix__basic_stream_descriptor.assign.overload1 assign]``(
      const native_handle_type & native_descriptor);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.assign.overload2 assign]``(
      const native_handle_type & native_descriptor,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.assign.overload2 more...]]``


[section:overload1 posix::basic_stream_descriptor::assign (1 of 2 overloads)]


['Inherited from posix::basic_descriptor.]


Assign an existing native descriptor to the descriptor. 


  void assign(
      const native_handle_type & native_descriptor);



[endsect]



[section:overload2 posix::basic_stream_descriptor::assign (2 of 2 overloads)]


['Inherited from posix::basic_descriptor.]


Assign an existing native descriptor to the descriptor. 


  boost::system::error_code assign(
      const native_handle_type & native_descriptor,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_read_some posix::basic_stream_descriptor::async_read_some]

[indexterm2 async_read_some..posix::basic_stream_descriptor] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read data from the stream descriptor. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be read. 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 read 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 read.
   ); 
``
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 read operation may not read all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   descriptor.async_read_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]



[section:async_write_some posix::basic_stream_descriptor::async_write_some]

[indexterm2 async_write_some..posix::basic_stream_descriptor] 
Start an asynchronous write. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write data to the stream descriptor. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the descriptor. 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 write 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 written.
   ); 
``
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 write operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   descriptor.async_write_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]


[section:basic_stream_descriptor posix::basic_stream_descriptor::basic_stream_descriptor]

[indexterm2 basic_stream_descriptor..posix::basic_stream_descriptor] 
Construct a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] without opening it. 


  explicit ``[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload1 basic_stream_descriptor]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload1 more...]]``


Construct a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] on an existing native descriptor. 


  ``[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload2 basic_stream_descriptor]``(
      boost::asio::io_service & io_service,
      const native_handle_type & native_descriptor);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload2 more...]]``


Move-construct a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] from another. 


  ``[link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload3 basic_stream_descriptor]``(
      basic_stream_descriptor && other);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.basic_stream_descriptor.overload3 more...]]``


[section:overload1 posix::basic_stream_descriptor::basic_stream_descriptor (1 of 3 overloads)]


Construct a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] without opening it. 


  basic_stream_descriptor(
      boost::asio::io_service & io_service);


This constructor creates a stream descriptor without opening it. The descriptor needs to be opened and then connected or accepted before data can be sent or received on it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `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 3 overloads)]


Construct a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] on an existing native descriptor. 


  basic_stream_descriptor(
      boost::asio::io_service & io_service,
      const native_handle_type & native_descriptor);


This constructor creates a stream descriptor object to hold an existing native descriptor.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `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]



[section:overload3 posix::basic_stream_descriptor::basic_stream_descriptor (3 of 3 overloads)]


Move-construct a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] from another. 


  basic_stream_descriptor(
      basic_stream_descriptor && other);


This constructor moves a stream descriptor from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_descriptor(io_service&) constructor`. 




[endsect]


[endsect]


[section:bytes_readable posix::basic_stream_descriptor::bytes_readable]


['Inherited from posix::descriptor_base.]

[indexterm2 bytes_readable..posix::basic_stream_descriptor] 
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();







[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:cancel posix::basic_stream_descriptor::cancel]

[indexterm2 cancel..posix::basic_stream_descriptor] 
Cancel all asynchronous operations associated with the descriptor. 


  void ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.cancel.overload2 more...]]``


[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]

[indexterm2 close..posix::basic_stream_descriptor] 
Close the descriptor. 


  void ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.close.overload2 more...]]``


[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. Note that, even if the function indicates an error, the underlying descriptor is closed. ]]

]




[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. Note that, even if the function indicates an error, the underlying descriptor is closed. ]]

]




[endsect]


[endsect]

[section:get_implementation posix::basic_stream_descriptor::get_implementation]

[indexterm2 get_implementation..posix::basic_stream_descriptor] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.posix__basic_stream_descriptor.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.posix__basic_stream_descriptor.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.get_implementation.overload2 more...]]``


[section:overload1 posix::basic_stream_descriptor::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 posix::basic_stream_descriptor::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service posix::basic_stream_descriptor::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..posix::basic_stream_descriptor] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service posix::basic_stream_descriptor::get_service]

[indexterm2 get_service..posix::basic_stream_descriptor] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.posix__basic_stream_descriptor.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.posix__basic_stream_descriptor.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.get_service.overload2 more...]]``


[section:overload1 posix::basic_stream_descriptor::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 posix::basic_stream_descriptor::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation posix::basic_stream_descriptor::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..posix::basic_stream_descriptor] 
(Deprecated: Use `get_implementation()`.) 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.]

[indexterm2 implementation_type..posix::basic_stream_descriptor] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:io_control posix::basic_stream_descriptor::io_control]

[indexterm2 io_control..posix::basic_stream_descriptor] 
Perform an IO control command on the descriptor. 


  void ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload1 io_control]``(
      IoControlCommand & command);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload2 io_control]``(
      IoControlCommand & command,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.io_control.overload2 more...]]``


[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. 


  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 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. 


  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 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:is_open posix::basic_stream_descriptor::is_open]


['Inherited from posix::basic_descriptor.]

[indexterm2 is_open..posix::basic_stream_descriptor] 
Determine whether the descriptor is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer posix::basic_stream_descriptor::lowest_layer]

[indexterm2 lowest_layer..posix::basic_stream_descriptor] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer.overload2 more...]]``


[section:overload1 posix::basic_stream_descriptor::lowest_layer (1 of 2 overloads)]


['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 [link boost_asio.reference.posix__basic_descriptor `posix::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. 




[endsect]



[section:overload2 posix::basic_stream_descriptor::lowest_layer (2 of 2 overloads)]


['Inherited from posix::basic_descriptor.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type posix::basic_stream_descriptor::lowest_layer_type]


['Inherited from posix::basic_descriptor.]

[indexterm2 lowest_layer_type..posix::basic_stream_descriptor] 
A [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] is always the lowest layer. 


  typedef basic_descriptor< StreamDescriptorService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[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. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_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]]]
    [A basic_descriptor is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.native_handle_type [*native_handle_type]]]
    [The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_descriptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the descriptor. ]
  
  ]

  [

    [[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. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[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. 

     Construct a basic_descriptor on an existing native descriptor. 

     Move-construct a basic_descriptor from another. ]
  ]
  
  [
    [[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.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. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native_handle [*native_handle]]]
    [Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native descriptor implementation. 

     Sets the non-blocking mode of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the descriptor. 

     Sets the non-blocking mode of the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_descriptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.release [*release]]]
    [Release ownership of the native descriptor implementation. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_descriptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_descriptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[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]]

  [
    [[link boost_asio.reference.posix__basic_descriptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.posix__basic_descriptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.posix__basic_descriptor `posix::basic_descriptor`] class template provides the ability to wrap a POSIX descriptor.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native posix::basic_stream_descriptor::native]


['Inherited from posix::basic_descriptor.]

[indexterm2 native..posix::basic_stream_descriptor] 
(Deprecated: Use `native_handle()`.) Get the native descriptor representation. 


  native_type native();


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:native_handle posix::basic_stream_descriptor::native_handle]


['Inherited from posix::basic_descriptor.]

[indexterm2 native_handle..posix::basic_stream_descriptor] 
Get the native descriptor representation. 


  native_handle_type native_handle();


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:native_handle_type posix::basic_stream_descriptor::native_handle_type]

[indexterm2 native_handle_type..posix::basic_stream_descriptor] 
The native representation of a descriptor. 


  typedef StreamDescriptorService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking posix::basic_stream_descriptor::native_non_blocking]

[indexterm2 native_non_blocking..posix::basic_stream_descriptor] 
Gets the non-blocking mode of the native descriptor implementation. 


  bool ``[link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking.overload1 native_non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native descriptor implementation. 


  void ``[link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking.overload2 native_non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking.overload3 native_non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking.overload3 more...]]``


[section:overload1 posix::basic_stream_descriptor::native_non_blocking (1 of 3 overloads)]


['Inherited from posix::basic_descriptor.]


Gets the non-blocking mode of the native descriptor implementation. 


  bool native_non_blocking() const;


This function is used to retrieve the non-blocking mode of the underlying native descriptor. This mode has no effect on the behaviour of the descriptor object's synchronous operations.


[heading Return Value]
      
`true` if the underlying descriptor is in non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).


[heading Remarks]
      
The current non-blocking mode is cached by the descriptor object. Consequently, the return value may be incorrect if the non-blocking mode was set directly on the native descriptor. 




[endsect]



[section:overload2 posix::basic_stream_descriptor::native_non_blocking (2 of 3 overloads)]


['Inherited from posix::basic_descriptor.]


Sets the non-blocking mode of the native descriptor implementation. 


  void native_non_blocking(
      bool mode);


This function is used to modify the non-blocking mode of the underlying native descriptor. It has no effect on the behaviour of the descriptor object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying descriptor is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense. ]]

]




[endsect]



[section:overload3 posix::basic_stream_descriptor::native_non_blocking (3 of 3 overloads)]


['Inherited from posix::basic_descriptor.]


Sets the non-blocking mode of the native descriptor implementation. 


  boost::system::error_code native_non_blocking(
      bool mode,
      boost::system::error_code & ec);


This function is used to modify the non-blocking mode of the underlying native descriptor. It has no effect on the behaviour of the descriptor object's synchronous operations.


[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the underlying descriptor is put into non-blocking mode and direct system calls may fail with `boost::asio::error::would_block` (or the equivalent system error).]]

[[ec][Set to indicate what error occurred, if any. If the `mode` is `false`, but the current value of `non_blocking()` is `true`, this function fails with `boost::asio::error::invalid_argument`, as the combination does not make sense. ]]

]




[endsect]


[endsect]


[section:native_type posix::basic_stream_descriptor::native_type]

[indexterm2 native_type..posix::basic_stream_descriptor] 
(Deprecated: Use native\_handle\_type.) The native representation of a descriptor. 


  typedef StreamDescriptorService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking posix::basic_stream_descriptor::non_blocking]

[indexterm2 non_blocking..posix::basic_stream_descriptor] 
Gets the non-blocking mode of the descriptor. 


  bool ``[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking.overload1 non_blocking]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the descriptor. 


  void ``[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking.overload2 non_blocking]``(
      bool mode);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.non_blocking.overload2 more...]]``

  boost::system::error_code ``[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking.overload3 non_blocking]``(
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.non_blocking.overload3 more...]]``


[section:overload1 posix::basic_stream_descriptor::non_blocking (1 of 3 overloads)]


['Inherited from posix::basic_descriptor.]


Gets the non-blocking mode of the descriptor. 


  bool non_blocking() const;



[heading Return Value]
      
`true` if the descriptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload2 posix::basic_stream_descriptor::non_blocking (2 of 3 overloads)]


['Inherited from posix::basic_descriptor.]


Sets the non-blocking mode of the descriptor. 


  void non_blocking(
      bool mode);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the descriptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]



[section:overload3 posix::basic_stream_descriptor::non_blocking (3 of 3 overloads)]


['Inherited from posix::basic_descriptor.]


Sets the non-blocking mode of the descriptor. 


  boost::system::error_code non_blocking(
      bool mode,
      boost::system::error_code & ec);



[heading Parameters]
    

[variablelist
  
[[mode][If `true`, the descriptor's synchronous operations will fail with `boost::asio::error::would_block` if they are unable to perform the requested operation immediately. If `false`, synchronous operations will block until complete.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
The non-blocking mode has no effect on the behaviour of asynchronous operations. Asynchronous operations will never fail with the error `boost::asio::error::would_block`. 




[endsect]


[endsect]


[section:non_blocking_io posix::basic_stream_descriptor::non_blocking_io]


['Inherited from posix::descriptor_base.]

[indexterm2 non_blocking_io..posix::basic_stream_descriptor] 
(Deprecated: Use non\_blocking().) IO control command to set the blocking mode of the descriptor. 


  typedef implementation_defined non_blocking_io;



Implements the FIONBIO IO control command.


[heading Example]
  


   boost::asio::posix::stream_descriptor descriptor(io_service); 
   ...
   boost::asio::descriptor_base::non_blocking_io command(true);
   descriptor.io_control(command);







[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ posix::basic_stream_descriptor::operator=]

[indexterm2 operator=..posix::basic_stream_descriptor] 
Move-assign a [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] from another. 


  basic_stream_descriptor & operator=(
      basic_stream_descriptor && other);


This assignment operator moves a stream descriptor from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_descriptor(io_service&) constructor`. 




[endsect]


[section:read_some posix::basic_stream_descriptor::read_some]

[indexterm2 read_some..posix::basic_stream_descriptor] 
Read some data from the descriptor. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.read_some.overload2 more...]]``


[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.


[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.]]

]


[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));


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. 




[endsect]



[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 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.]]

]


[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:release posix::basic_stream_descriptor::release]


['Inherited from posix::basic_descriptor.]

[indexterm2 release..posix::basic_stream_descriptor] 
Release ownership of the native descriptor implementation. 


  native_handle_type release();


This function may be used to obtain the underlying representation of the descriptor. After calling this function, `is_open()` returns false. The caller is responsible for closing the descriptor.

All outstanding asynchronous read or write operations will finish immediately, and the handlers for cancelled operations will be passed the `boost::asio::error::operation_aborted` error. 


[endsect]



[section:service posix::basic_stream_descriptor::service]


['Inherited from basic_io_object.]

[indexterm2 service..posix::basic_stream_descriptor] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type posix::basic_stream_descriptor::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..posix::basic_stream_descriptor] 
The type of the service that will be used to provide I/O operations. 


  typedef StreamDescriptorService service_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/basic_stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:write_some posix::basic_stream_descriptor::write_some]

[indexterm2 write_some..posix::basic_stream_descriptor] 
Write some data to the descriptor. 


  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);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload1 more...]]``

  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);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__basic_stream_descriptor.write_some.overload2 more...]]``


[section:overload1 posix::basic_stream_descriptor::write_some (1 of 2 overloads)]


Write some data to the descriptor. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);


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]
    

[variablelist
  
[[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. 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]
  
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. 




[endsect]



[section:overload2 posix::basic_stream_descriptor::write_some (2 of 2 overloads)]


Write some data to the descriptor. 


  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 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]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the descriptor.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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]


[endsect]

[section:posix__descriptor_base posix::descriptor_base]


The [link boost_asio.reference.posix__descriptor_base `posix::descriptor_base`] class is used as a base for the [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] class template so that we have a common place to define the associated IO control commands. 


  class descriptor_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[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]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the descriptor. ]
  
  ]

]

[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. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/posix/descriptor_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:bytes_readable posix::descriptor_base::bytes_readable]

[indexterm2 bytes_readable..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();







[heading Requirements]

[*Header: ][^boost/asio/posix/descriptor_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:non_blocking_io posix::descriptor_base::non_blocking_io]

[indexterm2 non_blocking_io..posix::descriptor_base] 
(Deprecated: Use non\_blocking().) IO control command to set the blocking mode of the descriptor. 


  typedef implementation_defined non_blocking_io;



Implements the FIONBIO IO control command.


[heading Example]
  


   boost::asio::posix::stream_descriptor descriptor(io_service); 
   ...
   boost::asio::descriptor_base::non_blocking_io command(true);
   descriptor.io_control(command);







[heading Requirements]

[*Header: ][^boost/asio/posix/descriptor_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:_descriptor_base posix::descriptor_base::~descriptor_base]

[indexterm2 ~descriptor_base..posix::descriptor_base] 
Protected destructor to prevent deletion through this type. 


  ~descriptor_base();



[endsect]



[endsect]


[section:posix__stream_descriptor posix::stream_descriptor]

[indexterm1 posix::stream_descriptor] 
Typedef for the typical usage of a stream-oriented descriptor. 


  typedef basic_stream_descriptor stream_descriptor;


[heading Types]
[table
  [[Name][Description]]

  [

    [[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.posix__basic_stream_descriptor.native_handle_type [*native_handle_type]]]
    [The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_stream_descriptor.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a descriptor. ]
  
  ]

  [

    [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the descriptor. ]
  
  ]

  [

    [[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. ]
  
  ]

]

[heading Member Functions]
[table
  [[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.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. 

     Construct a basic_stream_descriptor on an existing native descriptor. 

     Move-construct a basic_stream_descriptor from another. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.close [*close]]]
    [Close the descriptor. ]
  ]
  
  [
    [[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_stream_descriptor.io_control [*io_control]]]
    [Perform an IO control command on the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.is_open [*is_open]]]
    [Determine whether the descriptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.native_handle [*native_handle]]]
    [Get the native descriptor representation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native descriptor implementation. 

     Sets the non-blocking mode of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the descriptor. 

     Sets the non-blocking mode of the descriptor. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_descriptor from another. ]
  ]
  
  [
    [[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.release [*release]]]
    [Release ownership of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.write_some [*write_some]]]
    [Write some data to the descriptor. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.posix__basic_stream_descriptor.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.posix__basic_stream_descriptor `posix::basic_stream_descriptor`] class template provides asynchronous and blocking stream-oriented descriptor functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/posix/stream_descriptor.hpp]

[*Convenience header: ][^boost/asio.hpp]


[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.posix__stream_descriptor_service.native_handle_type [*native_handle_type]]]
    [The native descriptor type. ]
  
  ]

  [

    [[link boost_asio.reference.posix__stream_descriptor_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_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.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.is_open [*is_open]]]
    [Determine whether the descriptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.posix__stream_descriptor_service.move_assign [*move_assign]]]
    [Move-assign from another stream descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__stream_descriptor_service.move_construct [*move_construct]]]
    [Move-construct a new stream descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__stream_descriptor_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__stream_descriptor_service.native_handle [*native_handle]]]
    [Get the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__stream_descriptor_service.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native descriptor implementation. 

     Sets the non-blocking mode of the native descriptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.posix__stream_descriptor_service.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the descriptor. 

     Sets the non-blocking mode of the descriptor. ]
  ]
  
  [
    [[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.release [*release]]]
    [Release ownership of the native descriptor implementation. ]
  ]
  
  [
    [[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]]

  [
    [[link boost_asio.reference.posix__stream_descriptor_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign posix::stream_descriptor_service::assign]

[indexterm2 assign..posix::stream_descriptor_service] 
Assign an existing native descriptor to a stream descriptor. 


  boost::system::error_code assign(
      implementation_type & impl,
      const native_handle_type & native_descriptor,
      boost::system::error_code & ec);



[endsect]



[section:async_read_some posix::stream_descriptor_service::async_read_some]

[indexterm2 async_read_some..posix::stream_descriptor_service] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some posix::stream_descriptor_service::async_write_some]

[indexterm2 async_write_some..posix::stream_descriptor_service] 
Start an asynchronous write. 


  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 handler);



[endsect]



[section:cancel posix::stream_descriptor_service::cancel]

[indexterm2 cancel..posix::stream_descriptor_service] 
Cancel all asynchronous operations associated with the descriptor. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close posix::stream_descriptor_service::close]

[indexterm2 close..posix::stream_descriptor_service] 
Close a stream descriptor implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct posix::stream_descriptor_service::construct]

[indexterm2 construct..posix::stream_descriptor_service] 
Construct a new stream descriptor implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy posix::stream_descriptor_service::destroy]

[indexterm2 destroy..posix::stream_descriptor_service] 
Destroy a stream descriptor implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:get_io_service posix::stream_descriptor_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..posix::stream_descriptor_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id posix::stream_descriptor_service::id]

[indexterm2 id..posix::stream_descriptor_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type posix::stream_descriptor_service::implementation_type]

[indexterm2 implementation_type..posix::stream_descriptor_service] 
The type of a stream descriptor implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:io_control posix::stream_descriptor_service::io_control]

[indexterm2 io_control..posix::stream_descriptor_service] 
Perform an IO control command on the descriptor. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code io_control(
      implementation_type & impl,
      IoControlCommand & command,
      boost::system::error_code & ec);



[endsect]



[section:is_open posix::stream_descriptor_service::is_open]

[indexterm2 is_open..posix::stream_descriptor_service] 
Determine whether the descriptor is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:move_assign posix::stream_descriptor_service::move_assign]

[indexterm2 move_assign..posix::stream_descriptor_service] 
Move-assign from another stream descriptor implementation. 


  void move_assign(
      implementation_type & impl,
      stream_descriptor_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct posix::stream_descriptor_service::move_construct]

[indexterm2 move_construct..posix::stream_descriptor_service] 
Move-construct a new stream descriptor implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native posix::stream_descriptor_service::native]

[indexterm2 native..posix::stream_descriptor_service] 
(Deprecated: Use `native_handle()`.) Get the native descriptor implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle posix::stream_descriptor_service::native_handle]

[indexterm2 native_handle..posix::stream_descriptor_service] 
Get the native descriptor implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type posix::stream_descriptor_service::native_handle_type]

[indexterm2 native_handle_type..posix::stream_descriptor_service] 
The native descriptor type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking posix::stream_descriptor_service::native_non_blocking]

[indexterm2 native_non_blocking..posix::stream_descriptor_service] 
Gets the non-blocking mode of the native descriptor implementation. 


  bool ``[link boost_asio.reference.posix__stream_descriptor_service.native_non_blocking.overload1 native_non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__stream_descriptor_service.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native descriptor implementation. 


  boost::system::error_code ``[link boost_asio.reference.posix__stream_descriptor_service.native_non_blocking.overload2 native_non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__stream_descriptor_service.native_non_blocking.overload2 more...]]``


[section:overload1 posix::stream_descriptor_service::native_non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the native descriptor implementation. 


  bool native_non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 posix::stream_descriptor_service::native_non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the native descriptor implementation. 


  boost::system::error_code native_non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:native_type posix::stream_descriptor_service::native_type]

[indexterm2 native_type..posix::stream_descriptor_service] 
(Deprecated: Use native\_handle\_type.) The native descriptor type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/posix/stream_descriptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking posix::stream_descriptor_service::non_blocking]

[indexterm2 non_blocking..posix::stream_descriptor_service] 
Gets the non-blocking mode of the descriptor. 


  bool ``[link boost_asio.reference.posix__stream_descriptor_service.non_blocking.overload1 non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.posix__stream_descriptor_service.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the descriptor. 


  boost::system::error_code ``[link boost_asio.reference.posix__stream_descriptor_service.non_blocking.overload2 non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.posix__stream_descriptor_service.non_blocking.overload2 more...]]``


[section:overload1 posix::stream_descriptor_service::non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the descriptor. 


  bool non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 posix::stream_descriptor_service::non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the descriptor. 


  boost::system::error_code non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:read_some posix::stream_descriptor_service::read_some]

[indexterm2 read_some..posix::stream_descriptor_service] 
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]



[section:release posix::stream_descriptor_service::release]

[indexterm2 release..posix::stream_descriptor_service] 
Release ownership of the native descriptor implementation. 


  native_handle_type release(
      implementation_type & impl);



[endsect]



[section:stream_descriptor_service posix::stream_descriptor_service::stream_descriptor_service]

[indexterm2 stream_descriptor_service..posix::stream_descriptor_service] 
Construct a new stream descriptor service for the specified [link boost_asio.reference.io_service `io_service`]. 


  stream_descriptor_service(
      boost::asio::io_service & io_service);



[endsect]



[section:write_some posix::stream_descriptor_service::write_some]

[indexterm2 write_some..posix::stream_descriptor_service] 
Write the given data to the stream. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]



[endsect]

[section:raw_socket_service raw_socket_service]


Default service implementation for a raw socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``>
  class raw_socket_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.raw_socket_service.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.raw_socket_service.implementation_type [*implementation_type]]]
    [The type of a raw socket. ]
  
  ]

  [

    [[link boost_asio.reference.raw_socket_service.native_handle_type [*native_handle_type]]]
    [The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.raw_socket_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.raw_socket_service.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.raw_socket_service.assign [*assign]]]
    [Assign an existing native socket to a raw socket. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[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.raw_socket_service.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.async_send_to [*async_send_to]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[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.raw_socket_service.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.bind [*bind]]]
    []
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.close [*close]]]
    [Close a raw socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.connect [*connect]]]
    [Connect the raw socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.construct [*construct]]]
    [Construct a new raw socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.destroy [*destroy]]]
    [Destroy a raw socket 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.raw_socket_service.get_option [*get_option]]]
    [Get a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.local_endpoint [*local_endpoint]]]
    [Get the local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.move_assign [*move_assign]]]
    [Move-assign from another raw socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.move_construct [*move_construct]]]
    [Move-construct a new raw socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.native_handle [*native_handle]]]
    [Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.open [*open]]]
    []
  ]
  
  [
    [[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.raw_socket_service.receive [*receive]]]
    [Receive some data from the peer. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.receive_from [*receive_from]]]
    [Receive raw data with the endpoint of the sender. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.send [*send]]]
    [Send the given data to the peer. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.send_to [*send_to]]]
    [Send raw data to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.set_option [*set_option]]]
    [Set a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.raw_socket_service.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.raw_socket_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/raw_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign raw_socket_service::assign]

[indexterm2 assign..raw_socket_service] 
Assign an existing native socket to a raw socket. 


  boost::system::error_code assign(
      implementation_type & impl,
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]



[section:async_connect raw_socket_service::async_connect]

[indexterm2 async_connect..raw_socket_service] 
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);



[endsect]



[section:async_receive raw_socket_service::async_receive]

[indexterm2 async_receive..raw_socket_service] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      ReadHandler handler);



[endsect]



[section:async_receive_from raw_socket_service::async_receive_from]

[indexterm2 async_receive_from..raw_socket_service] 
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]

[indexterm2 async_send..raw_socket_service] 
Start an asynchronous send. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);



[endsect]



[section:async_send_to raw_socket_service::async_send_to]

[indexterm2 async_send_to..raw_socket_service] 
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]

[indexterm2 at_mark..raw_socket_service] 
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]

[indexterm2 available..raw_socket_service] 
Determine the number of bytes available for reading. 


  std::size_t available(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:bind raw_socket_service::bind]

[indexterm2 bind..raw_socket_service] 

  boost::system::error_code bind(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);



[endsect]



[section:cancel raw_socket_service::cancel]

[indexterm2 cancel..raw_socket_service] 
Cancel all asynchronous operations associated with the socket. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close raw_socket_service::close]

[indexterm2 close..raw_socket_service] 
Close a raw socket implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:connect raw_socket_service::connect]

[indexterm2 connect..raw_socket_service] 
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);



[endsect]



[section:construct raw_socket_service::construct]

[indexterm2 construct..raw_socket_service] 
Construct a new raw socket implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy raw_socket_service::destroy]

[indexterm2 destroy..raw_socket_service] 
Destroy a raw socket implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:endpoint_type raw_socket_service::endpoint_type]

[indexterm2 endpoint_type..raw_socket_service] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/raw_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:get_io_service raw_socket_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..raw_socket_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:get_option raw_socket_service::get_option]

[indexterm2 get_option..raw_socket_service] 
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]

[indexterm2 id..raw_socket_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type raw_socket_service::implementation_type]

[indexterm2 implementation_type..raw_socket_service] 
The type of a raw socket. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/raw_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:io_control raw_socket_service::io_control]

[indexterm2 io_control..raw_socket_service] 
Perform an IO control command on the socket. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code io_control(
      implementation_type & impl,
      IoControlCommand & command,
      boost::system::error_code & ec);



[endsect]



[section:is_open raw_socket_service::is_open]

[indexterm2 is_open..raw_socket_service] 
Determine whether the socket is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:local_endpoint raw_socket_service::local_endpoint]

[indexterm2 local_endpoint..raw_socket_service] 
Get the local endpoint. 


  endpoint_type local_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:move_assign raw_socket_service::move_assign]

[indexterm2 move_assign..raw_socket_service] 
Move-assign from another raw socket implementation. 


  void move_assign(
      implementation_type & impl,
      raw_socket_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct raw_socket_service::move_construct]

[indexterm2 move_construct..raw_socket_service] 
Move-construct a new raw socket implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native raw_socket_service::native]

[indexterm2 native..raw_socket_service] 
(Deprecated: Use `native_handle()`.) Get the native socket implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle raw_socket_service::native_handle]

[indexterm2 native_handle..raw_socket_service] 
Get the native socket implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type raw_socket_service::native_handle_type]

[indexterm2 native_handle_type..raw_socket_service] 
The native socket type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/raw_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking raw_socket_service::native_non_blocking]

[indexterm2 native_non_blocking..raw_socket_service] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.raw_socket_service.native_non_blocking.overload1 native_non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.raw_socket_service.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code ``[link boost_asio.reference.raw_socket_service.native_non_blocking.overload2 native_non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.raw_socket_service.native_non_blocking.overload2 more...]]``


[section:overload1 raw_socket_service::native_non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 raw_socket_service::native_non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:native_type raw_socket_service::native_type]

[indexterm2 native_type..raw_socket_service] 
(Deprecated: Use native\_handle\_type.) The native socket type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/raw_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking raw_socket_service::non_blocking]

[indexterm2 non_blocking..raw_socket_service] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.raw_socket_service.non_blocking.overload1 non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.raw_socket_service.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  boost::system::error_code ``[link boost_asio.reference.raw_socket_service.non_blocking.overload2 non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.raw_socket_service.non_blocking.overload2 more...]]``


[section:overload1 raw_socket_service::non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the socket. 


  bool non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 raw_socket_service::non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:open raw_socket_service::open]

[indexterm2 open..raw_socket_service] 

  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]

[indexterm2 protocol_type..raw_socket_service] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/raw_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:raw_socket_service raw_socket_service::raw_socket_service]

[indexterm2 raw_socket_service..raw_socket_service] 
Construct a new raw socket service for the specified [link boost_asio.reference.io_service `io_service`]. 


  raw_socket_service(
      boost::asio::io_service & io_service);



[endsect]



[section:receive raw_socket_service::receive]

[indexterm2 receive..raw_socket_service] 
Receive some data from the peer. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);



[endsect]



[section:receive_from raw_socket_service::receive_from]

[indexterm2 receive_from..raw_socket_service] 
Receive raw data with the endpoint of the sender. 


  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);



[endsect]



[section:remote_endpoint raw_socket_service::remote_endpoint]

[indexterm2 remote_endpoint..raw_socket_service] 
Get the remote endpoint. 


  endpoint_type remote_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:send raw_socket_service::send]

[indexterm2 send..raw_socket_service] 
Send the given data to the peer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  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]

[indexterm2 send_to..raw_socket_service] 
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]

[indexterm2 set_option..raw_socket_service] 
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]

[indexterm2 shutdown..raw_socket_service] 
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);



[endsect]



[endsect]

[section:read read]

[indexterm1 read] 
Attempt to read a certain amount of data from a stream before returning. 

      
  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.read.overload1 read]``(
      SyncReadStream & s,
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.read.overload2 read]``(
      SyncReadStream & s,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read.overload3 read]``(
      SyncReadStream & s,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read.overload4 read]``(
      SyncReadStream & s,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read.overload5 read]``(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload5 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read.overload6 read]``(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload6 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read.overload7 read]``(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload7 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read.overload8 read]``(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read.overload8 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/read.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 read (1 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read(
      SyncReadStream & s,
      const MutableBufferSequence & buffers);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::read(s, 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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read(
       s, buffers,
       boost::asio::transfer_all()); 







[endsect]



[section:overload2 read (2 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read(
      SyncReadStream & s,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::read(s, boost::asio::buffer(data, size), ec); 


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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read(
       s, buffers,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload3 read (3 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t read(
      SyncReadStream & s,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the stream's read\_some function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::read(s, boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32)); 


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. 




[endsect]



[section:overload4 read (4 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t read(
      SyncReadStream & s,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the stream.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the stream's read\_some function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]



[section:overload5 read (5 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffer is full (that is, it has reached maximum size).


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read(
       s, b,
       boost::asio::transfer_all()); 







[endsect]



[section:overload6 read (6 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffer is full (that is, it has reached maximum size).


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read(
       s, b,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload7 read (7 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t read(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffer is full (that is, it has reached maximum size).


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the stream's read\_some function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload8 read (8 of 8 overloads)]


Attempt to read a certain amount of data from a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t read(
      SyncReadStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a stream. The call will block until one of the following conditions is true:


* The supplied buffer is full (that is, it has reached maximum size).


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's read\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the stream's read\_some function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]


[endsect]

[section:read_at read_at]

[indexterm1 read_at] 
Attempt to read a certain amount of data at the specified offset before returning. 

      
  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.read_at.overload1 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.read_at.overload2 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read_at.overload3 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read_at.overload4 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_at.overload5 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload5 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_at.overload6 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload6 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read_at.overload7 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload7 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.read_at.overload8 read_at]``(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_at.overload8 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/read_at.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 read_at (1 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the device.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::read_at(d, 42, 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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read_at(
       d, 42, buffers,
       boost::asio::transfer_all()); 







[endsect]



[section:overload2 read_at (2 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the device.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::read_at(d, 42,
       boost::asio::buffer(data, size), ec); 


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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read_at(
       d, 42, buffers,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload3 read_at (3 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the device.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the device's read\_some\_at function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::read_at(d, 42, boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32)); 


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. 




[endsect]



[section:overload4 read_at (4 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename CompletionCondition>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* The supplied buffers are full. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. The sum of the buffer sizes indicates the maximum number of bytes to read from the device.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the device's read\_some\_at function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]



[section:overload5 read_at (5 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read_at(
       d, 42, b,
       boost::asio::transfer_all()); 







[endsect]



[section:overload6 read_at (6 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::read_at(
       d, 42, b,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload7 read_at (7 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the device's read\_some\_at function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload8 read_at (8 of 8 overloads)]


Attempt to read a certain amount of data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessReadDevice SyncRandomAccessReadDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t read_at(
      SyncRandomAccessReadDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to read a certain number of bytes of data from a random access device at the specified offset. The call will block until one of the following conditions is true:


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's read\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device from which the data is to be read. The type must support the SyncRandomAccessReadDevice concept.]]

[[offset][The offset at which the data will be read.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object into which the data will be read.]]

[[completion_condition][The function object to be called to determine whether the read operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest read_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the read operation is complete. A non-zero return value indicates the maximum number of bytes to be read on the next call to the device's read\_some\_at function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes read. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]


[endsect]

[section:read_until read_until]

[indexterm1 read_until] 
Read data into a streambuf until it contains a delimiter, matches a regular expression, or a function object indicates a match. 

      
  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_until.overload1 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      char delim);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_until.overload2 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      char delim,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_until.overload3 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const std::string & delim);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_until.overload4 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const std::string & delim,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_until.overload5 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const boost::regex & expr);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload5 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.read_until.overload6 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const boost::regex & expr,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload6 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename MatchCondition>
  std::size_t ``[link boost_asio.reference.read_until.overload7 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      MatchCondition match_condition,
      typename boost::enable_if< is_match_condition< MatchCondition > >::type *  = 0);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload7 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename MatchCondition>
  std::size_t ``[link boost_asio.reference.read_until.overload8 read_until]``(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      MatchCondition match_condition,
      boost::system::error_code & ec,
      typename boost::enable_if< is_match_condition< MatchCondition > >::type *  = 0);
  ``  [''''&raquo;''' [link boost_asio.reference.read_until.overload8 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/read_until.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 read_until (1 of 8 overloads)]


Read data into a streambuf until it contains a specified delimiter. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      char delim);


This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:


* The get area of the streambuf contains the specified delimiter.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[delim][The delimiter character.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area up to and including the delimiter.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent read\_until operation to examine.


[heading Example]
  
To read data into a streambuf until a newline is encountered: 

   boost::asio::streambuf b;
   boost::asio::read_until(s, b, '\n');
   std::istream is(&b);
   std::string line;
   std::getline(is, line); 


After the `read_until` operation completes successfully, the buffer `b` contains the delimiter: 

   { 'a', 'b', ..., 'c', '\n', 'd', 'e', ... } 


The call to `std::getline` then extracts the data up to and including the delimiter, so that the string `line` contains: 

   { 'a', 'b', ..., 'c', '\n' } 


The remaining data is left in the buffer `b` as follows: 

   { 'd', 'e', ... } 


This data may be the start of a new line, to be extracted by a subsequent `read_until` operation. 




[endsect]



[section:overload2 read_until (2 of 8 overloads)]


Read data into a streambuf until it contains a specified delimiter. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      char delim,
      boost::system::error_code & ec);


This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:


* The get area of the streambuf contains the specified delimiter.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[delim][The delimiter character.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area up to and including the delimiter. Returns 0 if an error occurred.


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent read\_until operation to examine. 




[endsect]



[section:overload3 read_until (3 of 8 overloads)]


Read data into a streambuf until it contains a specified delimiter. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const std::string & delim);


This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:


* The get area of the streambuf contains the specified delimiter.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[delim][The delimiter string.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area up to and including the delimiter.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent read\_until operation to examine.


[heading Example]
  
To read data into a streambuf until a newline is encountered: 

   boost::asio::streambuf b;
   boost::asio::read_until(s, b, "\r\n");
   std::istream is(&b);
   std::string line;
   std::getline(is, line); 


After the `read_until` operation completes successfully, the buffer `b` contains the delimiter: 

   { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } 


The call to `std::getline` then extracts the data up to and including the delimiter, so that the string `line` contains: 

   { 'a', 'b', ..., 'c', '\r', '\n' } 


The remaining data is left in the buffer `b` as follows: 

   { 'd', 'e', ... } 


This data may be the start of a new line, to be extracted by a subsequent `read_until` operation. 




[endsect]



[section:overload4 read_until (4 of 8 overloads)]


Read data into a streambuf until it contains a specified delimiter. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const std::string & delim,
      boost::system::error_code & ec);


This function is used to read data into the specified streambuf until the streambuf's get area contains the specified delimiter. The call will block until one of the following conditions is true:


* The get area of the streambuf contains the specified delimiter.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains the delimiter, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[delim][The delimiter string.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area up to and including the delimiter. Returns 0 if an error occurred.


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent read\_until operation to examine. 




[endsect]



[section:overload5 read_until (5 of 8 overloads)]


Read data into a streambuf until some part of the data it contains matches a regular expression. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const boost::regex & expr);


This function is used to read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The call will block until one of the following conditions is true:


* A substring of the streambuf's get area matches the regular expression.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains data that matches the regular expression, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[expr][The regular expression.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area up to and including the substring that matches the regular expression.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond that which matched the regular expression. An application will typically leave that data in the streambuf for a subsequent read\_until operation to examine.


[heading Example]
  
To read data into a streambuf until a CR-LF sequence is encountered: 

   boost::asio::streambuf b;
   boost::asio::read_until(s, b, boost::regex("\r\n"));
   std::istream is(&b);
   std::string line;
   std::getline(is, line); 


After the `read_until` operation completes successfully, the buffer `b` contains the data which matched the regular expression: 

   { 'a', 'b', ..., 'c', '\r', '\n', 'd', 'e', ... } 


The call to `std::getline` then extracts the data up to and including the match, so that the string `line` contains: 

   { 'a', 'b', ..., 'c', '\r', '\n' } 


The remaining data is left in the buffer `b` as follows: 

   { 'd', 'e', ... } 


This data may be the start of a new line, to be extracted by a subsequent `read_until` operation. 




[endsect]



[section:overload6 read_until (6 of 8 overloads)]


Read data into a streambuf until some part of the data it contains matches a regular expression. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      const boost::regex & expr,
      boost::system::error_code & ec);


This function is used to read data into the specified streambuf until the streambuf's get area contains some data that matches a regular expression. The call will block until one of the following conditions is true:


* A substring of the streambuf's get area matches the regular expression.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the streambuf's get area already contains data that matches the regular expression, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[expr][The regular expression.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area up to and including the substring that matches the regular expression. Returns 0 if an error occurred.


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond that which matched the regular expression. An application will typically leave that data in the streambuf for a subsequent read\_until operation to examine. 




[endsect]



[section:overload7 read_until (7 of 8 overloads)]


Read data into a streambuf until a function object indicates a match. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename MatchCondition>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      MatchCondition match_condition,
      typename boost::enable_if< is_match_condition< MatchCondition > >::type *  = 0);


This function is used to read data into the specified streambuf until a user-defined match condition function object, when applied to the data contained in the streambuf, indicates a successful match. The call will block until one of the following conditions is true:


* The match condition function object returns a std::pair where the second element evaluates to true.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the match condition function object already indicates a match, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[match_condition][The function object to be called to determine whether a match exists. The signature of the function object must be: 
``
   pair<iterator, bool> match_condition(iterator begin, iterator end);
``
where `iterator` represents the type: 
``
   buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
``
The iterator parameters `begin` and `end` define the range of bytes to be scanned to determine whether there is a match. The `first` member of the return value is an iterator marking one-past-the-end of the bytes that have been consumed by the match function. This iterator is used to calculate the `begin` parameter for any subsequent invocation of the match condition. The `second` member of the return value is true if a match has been found, false otherwise.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area that have been fully consumed by the match function.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond that which matched the function object. An application will typically leave that data in the streambuf for a subsequent

The default implementation of the `is_match_condition` type trait evaluates to true for function pointers and function objects with a `result_type` typedef. It must be specialised for other user-defined function objects.


[heading Examples]
  
To read data into a streambuf until whitespace is encountered: 

   typedef boost::asio::buffers_iterator<
       boost::asio::streambuf::const_buffers_type> iterator;

   std::pair<iterator, bool>
   match_whitespace(iterator begin, iterator end)
   {
     iterator i = begin;
     while (i != end)
       if (std::isspace(*i++))
         return std::make_pair(i, true);
     return std::make_pair(i, false);
   }
   ...
   boost::asio::streambuf b;
   boost::asio::read_until(s, b, match_whitespace);




To read data into a streambuf until a matching character is found: 

   class match_char
   {
   public:
     explicit match_char(char c) : c_(c) {}

     template <typename Iterator>
     std::pair<Iterator, bool> operator()(
         Iterator begin, Iterator end) const
     {
       Iterator i = begin;
       while (i != end)
         if (c_ == *i++)
           return std::make_pair(i, true);
       return std::make_pair(i, false);
     }

   private:
     char c_;
   };

   namespace asio {
     template <> struct is_match_condition<match_char>
       : public boost::true_type {};
   } // namespace asio
   ...
   boost::asio::streambuf b;
   boost::asio::read_until(s, b, match_char('a'));





[endsect]



[section:overload8 read_until (8 of 8 overloads)]


Read data into a streambuf until a function object indicates a match. 


  template<
      typename ``[link boost_asio.reference.SyncReadStream SyncReadStream]``,
      typename Allocator,
      typename MatchCondition>
  std::size_t read_until(
      SyncReadStream & s,
      boost::asio::basic_streambuf< Allocator > & b,
      MatchCondition match_condition,
      boost::system::error_code & ec,
      typename boost::enable_if< is_match_condition< MatchCondition > >::type *  = 0);


This function is used to read data into the specified streambuf until a user-defined match condition function object, when applied to the data contained in the streambuf, indicates a successful match. The call will block until one of the following conditions is true:


* The match condition function object returns a std::pair where the second element evaluates to true.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's read\_some function. If the match condition function object already indicates a match, the function returns immediately.


[heading Parameters]
    

[variablelist
  
[[s][The stream from which the data is to be read. The type must support the SyncReadStream concept.]]

[[b][A streambuf object into which the data will be read.]]

[[match_condition][The function object to be called to determine whether a match exists. The signature of the function object must be: 
``
   pair<iterator, bool> match_condition(iterator begin, iterator end);
``
where `iterator` represents the type: 
``
   buffers_iterator<basic_streambuf<Allocator>::const_buffers_type>
``
The iterator parameters `begin` and `end` define the range of bytes to be scanned to determine whether there is a match. The `first` member of the return value is an iterator marking one-past-the-end of the bytes that have been consumed by the match function. This iterator is used to calculate the `begin` parameter for any subsequent invocation of the match condition. The `second` member of the return value is true if a match has been found, false otherwise.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes in the streambuf's get area that have been fully consumed by the match function. Returns 0 if an error occurred.


[heading Remarks]
      
After a successful read\_until operation, the streambuf may contain additional data beyond that which matched the function object. An application will typically leave that data in the streambuf for a subsequent

The default implementation of the `is_match_condition` type trait evaluates to true for function pointers and function objects with a `result_type` typedef. It must be specialised for other user-defined function objects. 




[endsect]


[endsect]

[section:seq_packet_socket_service seq_packet_socket_service]


Default service implementation for a sequenced packet socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``>
  class seq_packet_socket_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.seq_packet_socket_service.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.seq_packet_socket_service.implementation_type [*implementation_type]]]
    [The type of a sequenced packet socket implementation. ]
  
  ]

  [

    [[link boost_asio.reference.seq_packet_socket_service.native_handle_type [*native_handle_type]]]
    [The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.seq_packet_socket_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.seq_packet_socket_service.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.seq_packet_socket_service.assign [*assign]]]
    [Assign an existing native socket to a sequenced packet socket. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.bind [*bind]]]
    [Bind the sequenced packet socket to the specified local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.close [*close]]]
    [Close a sequenced packet socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.connect [*connect]]]
    [Connect the sequenced packet socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.construct [*construct]]]
    [Construct a new sequenced packet socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.destroy [*destroy]]]
    [Destroy a sequenced packet socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.get_option [*get_option]]]
    [Get a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.local_endpoint [*local_endpoint]]]
    [Get the local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.move_assign [*move_assign]]]
    [Move-assign from another sequenced packet socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.move_construct [*move_construct]]]
    [Move-construct a new sequenced packet socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.native_handle [*native_handle]]]
    [Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.open [*open]]]
    [Open a sequenced packet socket. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.receive [*receive]]]
    [Receive some data from the peer. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.send [*send]]]
    [Send the given data to the peer. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.seq_packet_socket_service [*seq_packet_socket_service]]]
    [Construct a new sequenced packet socket service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.set_option [*set_option]]]
    [Set a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.seq_packet_socket_service.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.seq_packet_socket_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/seq_packet_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign seq_packet_socket_service::assign]

[indexterm2 assign..seq_packet_socket_service] 
Assign an existing native socket to a sequenced packet socket. 


  boost::system::error_code assign(
      implementation_type & impl,
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]



[section:async_connect seq_packet_socket_service::async_connect]

[indexterm2 async_connect..seq_packet_socket_service] 
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);



[endsect]



[section:async_receive seq_packet_socket_service::async_receive]

[indexterm2 async_receive..seq_packet_socket_service] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags,
      ReadHandler handler);



[endsect]



[section:async_send seq_packet_socket_service::async_send]

[indexterm2 async_send..seq_packet_socket_service] 
Start an asynchronous send. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);



[endsect]



[section:at_mark seq_packet_socket_service::at_mark]

[indexterm2 at_mark..seq_packet_socket_service] 
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 seq_packet_socket_service::available]

[indexterm2 available..seq_packet_socket_service] 
Determine the number of bytes available for reading. 


  std::size_t available(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:bind seq_packet_socket_service::bind]

[indexterm2 bind..seq_packet_socket_service] 
Bind the sequenced packet socket to the specified local endpoint. 


  boost::system::error_code bind(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);



[endsect]



[section:cancel seq_packet_socket_service::cancel]

[indexterm2 cancel..seq_packet_socket_service] 
Cancel all asynchronous operations associated with the socket. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close seq_packet_socket_service::close]

[indexterm2 close..seq_packet_socket_service] 
Close a sequenced packet socket implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:connect seq_packet_socket_service::connect]

[indexterm2 connect..seq_packet_socket_service] 
Connect the sequenced packet socket to the specified endpoint. 


  boost::system::error_code connect(
      implementation_type & impl,
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);



[endsect]



[section:construct seq_packet_socket_service::construct]

[indexterm2 construct..seq_packet_socket_service] 
Construct a new sequenced packet socket implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy seq_packet_socket_service::destroy]

[indexterm2 destroy..seq_packet_socket_service] 
Destroy a sequenced packet socket implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:endpoint_type seq_packet_socket_service::endpoint_type]

[indexterm2 endpoint_type..seq_packet_socket_service] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/seq_packet_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:get_io_service seq_packet_socket_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..seq_packet_socket_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:get_option seq_packet_socket_service::get_option]

[indexterm2 get_option..seq_packet_socket_service] 
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 seq_packet_socket_service::id]

[indexterm2 id..seq_packet_socket_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type seq_packet_socket_service::implementation_type]

[indexterm2 implementation_type..seq_packet_socket_service] 
The type of a sequenced packet socket implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/seq_packet_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:io_control seq_packet_socket_service::io_control]

[indexterm2 io_control..seq_packet_socket_service] 
Perform an IO control command on the socket. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code io_control(
      implementation_type & impl,
      IoControlCommand & command,
      boost::system::error_code & ec);



[endsect]



[section:is_open seq_packet_socket_service::is_open]

[indexterm2 is_open..seq_packet_socket_service] 
Determine whether the socket is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:local_endpoint seq_packet_socket_service::local_endpoint]

[indexterm2 local_endpoint..seq_packet_socket_service] 
Get the local endpoint. 


  endpoint_type local_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:move_assign seq_packet_socket_service::move_assign]

[indexterm2 move_assign..seq_packet_socket_service] 
Move-assign from another sequenced packet socket implementation. 


  void move_assign(
      implementation_type & impl,
      seq_packet_socket_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct seq_packet_socket_service::move_construct]

[indexterm2 move_construct..seq_packet_socket_service] 
Move-construct a new sequenced packet socket implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native seq_packet_socket_service::native]

[indexterm2 native..seq_packet_socket_service] 
(Deprecated: Use `native_handle()`.) Get the native socket implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle seq_packet_socket_service::native_handle]

[indexterm2 native_handle..seq_packet_socket_service] 
Get the native socket implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type seq_packet_socket_service::native_handle_type]

[indexterm2 native_handle_type..seq_packet_socket_service] 
The native socket type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/seq_packet_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking seq_packet_socket_service::native_non_blocking]

[indexterm2 native_non_blocking..seq_packet_socket_service] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.seq_packet_socket_service.native_non_blocking.overload1 native_non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.seq_packet_socket_service.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code ``[link boost_asio.reference.seq_packet_socket_service.native_non_blocking.overload2 native_non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.seq_packet_socket_service.native_non_blocking.overload2 more...]]``


[section:overload1 seq_packet_socket_service::native_non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 seq_packet_socket_service::native_non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:native_type seq_packet_socket_service::native_type]

[indexterm2 native_type..seq_packet_socket_service] 
(Deprecated: Use native\_handle\_type.) The native socket type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/seq_packet_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking seq_packet_socket_service::non_blocking]

[indexterm2 non_blocking..seq_packet_socket_service] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.seq_packet_socket_service.non_blocking.overload1 non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.seq_packet_socket_service.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  boost::system::error_code ``[link boost_asio.reference.seq_packet_socket_service.non_blocking.overload2 non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.seq_packet_socket_service.non_blocking.overload2 more...]]``


[section:overload1 seq_packet_socket_service::non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the socket. 


  bool non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 seq_packet_socket_service::non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:open seq_packet_socket_service::open]

[indexterm2 open..seq_packet_socket_service] 
Open a sequenced packet socket. 


  boost::system::error_code open(
      implementation_type & impl,
      const protocol_type & protocol,
      boost::system::error_code & ec);



[endsect]



[section:protocol_type seq_packet_socket_service::protocol_type]

[indexterm2 protocol_type..seq_packet_socket_service] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/seq_packet_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive seq_packet_socket_service::receive]

[indexterm2 receive..seq_packet_socket_service] 
Receive some data from the peer. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags in_flags,
      socket_base::message_flags & out_flags,
      boost::system::error_code & ec);



[endsect]



[section:remote_endpoint seq_packet_socket_service::remote_endpoint]

[indexterm2 remote_endpoint..seq_packet_socket_service] 
Get the remote endpoint. 


  endpoint_type remote_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:send seq_packet_socket_service::send]

[indexterm2 send..seq_packet_socket_service] 
Send the given data to the peer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);



[endsect]



[section:seq_packet_socket_service seq_packet_socket_service::seq_packet_socket_service]

[indexterm2 seq_packet_socket_service..seq_packet_socket_service] 
Construct a new sequenced packet socket service for the specified [link boost_asio.reference.io_service `io_service`]. 


  seq_packet_socket_service(
      boost::asio::io_service & io_service);



[endsect]



[section:set_option seq_packet_socket_service::set_option]

[indexterm2 set_option..seq_packet_socket_service] 
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 seq_packet_socket_service::shutdown]

[indexterm2 shutdown..seq_packet_socket_service] 
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);



[endsect]



[endsect]


[section:serial_port serial_port]

[indexterm1 serial_port] 
Typedef for the typical usage of a serial port. 


  typedef basic_serial_port serial_port;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_serial_port.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.lowest_layer_type [*lowest_layer_type]]]
    [A basic_serial_port is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.native_handle_type [*native_handle_type]]]
    [The native representation of a serial port. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a serial port. ]
  
  ]

  [

    [[link boost_asio.reference.basic_serial_port.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.basic_serial_port.assign [*assign]]]
    [Assign an existing native serial port to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.basic_serial_port [*basic_serial_port]]]
    [Construct a basic_serial_port without opening it. 

     Construct and open a basic_serial_port. 

     Construct a basic_serial_port on an existing native serial port. 

     Move-construct a basic_serial_port from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.close [*close]]]
    [Close the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_option [*get_option]]]
    [Get an option from the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.is_open [*is_open]]]
    [Determine whether the serial port is open. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native serial port representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.native_handle [*native_handle]]]
    [Get the native serial port representation. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.open [*open]]]
    [Open the serial port using the specified device name. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.operator_eq_ [*operator=]]]
    [Move-assign a basic_serial_port from another. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.read_some [*read_some]]]
    [Read some data from the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.send_break [*send_break]]]
    [Send a break sequence to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.set_option [*set_option]]]
    [Set an option on the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.write_some [*write_some]]]
    [Write some data to the serial port. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_serial_port.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_serial_port.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_serial_port.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_serial_port.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_serial_port `basic_serial_port`] class template provides functionality that is common to all serial ports.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/serial_port.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:serial_port_base serial_port_base]


The [link boost_asio.reference.serial_port_base `serial_port_base`] class is used as a base for the [link boost_asio.reference.basic_serial_port `basic_serial_port`] class template so that we have a common place to define the serial port options. 


  class serial_port_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.serial_port_base__baud_rate [*baud_rate]]]
    [Serial port option to permit changing the baud rate. ]
  
  ]

  [

    [[link boost_asio.reference.serial_port_base__character_size [*character_size]]]
    [Serial port option to permit changing the character size. ]
  
  ]

  [

    [[link boost_asio.reference.serial_port_base__flow_control [*flow_control]]]
    [Serial port option to permit changing the flow control. ]
  
  ]

  [

    [[link boost_asio.reference.serial_port_base__parity [*parity]]]
    [Serial port option to permit changing the parity. ]
  
  ]

  [

    [[link boost_asio.reference.serial_port_base__stop_bits [*stop_bits]]]
    [Serial port option to permit changing the number of stop bits. ]
  
  ]

]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_base._serial_port_base [*~serial_port_base]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/serial_port_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:_serial_port_base serial_port_base::~serial_port_base]

[indexterm2 ~serial_port_base..serial_port_base] 
Protected destructor to prevent deletion through this type. 


  ~serial_port_base();



[endsect]



[endsect]

[section:serial_port_base__baud_rate serial_port_base::baud_rate]


Serial port option to permit changing the baud rate. 


  class baud_rate


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_base__baud_rate.baud_rate [*baud_rate]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__baud_rate.load [*load]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__baud_rate.store [*store]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__baud_rate.value [*value]]]
    []
  ]
  
]

Implements changing the baud rate for a given serial port. 

[heading Requirements]

[*Header: ][^boost/asio/serial_port_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:baud_rate serial_port_base::baud_rate::baud_rate]

[indexterm2 baud_rate..serial_port_base::baud_rate] 

  baud_rate(
      unsigned int rate = 0);



[endsect]



[section:load serial_port_base::baud_rate::load]

[indexterm2 load..serial_port_base::baud_rate] 

  boost::system::error_code load(
      const BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec);



[endsect]



[section:store serial_port_base::baud_rate::store]

[indexterm2 store..serial_port_base::baud_rate] 

  boost::system::error_code store(
      BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec) const;



[endsect]



[section:value serial_port_base::baud_rate::value]

[indexterm2 value..serial_port_base::baud_rate] 

  unsigned int value() const;



[endsect]



[endsect]

[section:serial_port_base__character_size serial_port_base::character_size]


Serial port option to permit changing the character size. 


  class character_size


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_base__character_size.character_size [*character_size]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__character_size.load [*load]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__character_size.store [*store]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__character_size.value [*value]]]
    []
  ]
  
]

Implements changing the character size for a given serial port. 

[heading Requirements]

[*Header: ][^boost/asio/serial_port_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:character_size serial_port_base::character_size::character_size]

[indexterm2 character_size..serial_port_base::character_size] 

  character_size(
      unsigned int t = 8);



[endsect]



[section:load serial_port_base::character_size::load]

[indexterm2 load..serial_port_base::character_size] 

  boost::system::error_code load(
      const BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec);



[endsect]



[section:store serial_port_base::character_size::store]

[indexterm2 store..serial_port_base::character_size] 

  boost::system::error_code store(
      BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec) const;



[endsect]



[section:value serial_port_base::character_size::value]

[indexterm2 value..serial_port_base::character_size] 

  unsigned int value() const;



[endsect]



[endsect]

[section:serial_port_base__flow_control serial_port_base::flow_control]


Serial port option to permit changing the flow control. 


  class flow_control


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.serial_port_base__flow_control.type [*type]]]
    []
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_base__flow_control.flow_control [*flow_control]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__flow_control.load [*load]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__flow_control.store [*store]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__flow_control.value [*value]]]
    []
  ]
  
]

Implements changing the flow control for a given serial port. 

[heading Requirements]

[*Header: ][^boost/asio/serial_port_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:flow_control serial_port_base::flow_control::flow_control]

[indexterm2 flow_control..serial_port_base::flow_control] 

  flow_control(
      type t = none);



[endsect]



[section:load serial_port_base::flow_control::load]

[indexterm2 load..serial_port_base::flow_control] 

  boost::system::error_code load(
      const BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec);



[endsect]



[section:store serial_port_base::flow_control::store]

[indexterm2 store..serial_port_base::flow_control] 

  boost::system::error_code store(
      BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec) const;



[endsect]



[section:type serial_port_base::flow_control::type]

[indexterm2 type..serial_port_base::flow_control] 

  enum type

[indexterm2 none..serial_port_base::flow_control]
[indexterm2 software..serial_port_base::flow_control]
[indexterm2 hardware..serial_port_base::flow_control]

[heading Values]
[variablelist

  [
    [none]
    []
  ]

  [
    [software]
    []
  ]

  [
    [hardware]
    []
  ]

]



[endsect]



[section:value serial_port_base::flow_control::value]

[indexterm2 value..serial_port_base::flow_control] 

  type value() const;



[endsect]



[endsect]

[section:serial_port_base__parity serial_port_base::parity]


Serial port option to permit changing the parity. 


  class parity


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.serial_port_base__parity.type [*type]]]
    []
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_base__parity.load [*load]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__parity.parity [*parity]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__parity.store [*store]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__parity.value [*value]]]
    []
  ]
  
]

Implements changing the parity for a given serial port. 

[heading Requirements]

[*Header: ][^boost/asio/serial_port_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:load serial_port_base::parity::load]

[indexterm2 load..serial_port_base::parity] 

  boost::system::error_code load(
      const BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec);



[endsect]



[section:parity serial_port_base::parity::parity]

[indexterm2 parity..serial_port_base::parity] 

  parity(
      type t = none);



[endsect]



[section:store serial_port_base::parity::store]

[indexterm2 store..serial_port_base::parity] 

  boost::system::error_code store(
      BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec) const;



[endsect]



[section:type serial_port_base::parity::type]

[indexterm2 type..serial_port_base::parity] 

  enum type

[indexterm2 none..serial_port_base::parity]
[indexterm2 odd..serial_port_base::parity]
[indexterm2 even..serial_port_base::parity]

[heading Values]
[variablelist

  [
    [none]
    []
  ]

  [
    [odd]
    []
  ]

  [
    [even]
    []
  ]

]



[endsect]



[section:value serial_port_base::parity::value]

[indexterm2 value..serial_port_base::parity] 

  type value() const;



[endsect]



[endsect]

[section:serial_port_base__stop_bits serial_port_base::stop_bits]


Serial port option to permit changing the number of stop bits. 


  class stop_bits


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.serial_port_base__stop_bits.type [*type]]]
    []
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_base__stop_bits.load [*load]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__stop_bits.stop_bits [*stop_bits]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__stop_bits.store [*store]]]
    []
  ]
  
  [
    [[link boost_asio.reference.serial_port_base__stop_bits.value [*value]]]
    []
  ]
  
]

Implements changing the number of stop bits for a given serial port. 

[heading Requirements]

[*Header: ][^boost/asio/serial_port_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:load serial_port_base::stop_bits::load]

[indexterm2 load..serial_port_base::stop_bits] 

  boost::system::error_code load(
      const BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec);



[endsect]



[section:stop_bits serial_port_base::stop_bits::stop_bits]

[indexterm2 stop_bits..serial_port_base::stop_bits] 

  stop_bits(
      type t = one);



[endsect]



[section:store serial_port_base::stop_bits::store]

[indexterm2 store..serial_port_base::stop_bits] 

  boost::system::error_code store(
      BOOST_ASIO_OPTION_STORAGE & storage,
      boost::system::error_code & ec) const;



[endsect]



[section:type serial_port_base::stop_bits::type]

[indexterm2 type..serial_port_base::stop_bits] 

  enum type

[indexterm2 one..serial_port_base::stop_bits]
[indexterm2 onepointfive..serial_port_base::stop_bits]
[indexterm2 two..serial_port_base::stop_bits]

[heading Values]
[variablelist

  [
    [one]
    []
  ]

  [
    [onepointfive]
    []
  ]

  [
    [two]
    []
  ]

]



[endsect]



[section:value serial_port_base::stop_bits::value]

[indexterm2 value..serial_port_base::stop_bits] 

  type value() const;



[endsect]



[endsect]

[section:serial_port_service serial_port_service]


Default service implementation for a serial port. 


  class serial_port_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.serial_port_service.implementation_type [*implementation_type]]]
    [The type of a serial port implementation. ]
  
  ]

  [

    [[link boost_asio.reference.serial_port_service.native_handle_type [*native_handle_type]]]
    [The native handle type. ]
  
  ]

  [

    [[link boost_asio.reference.serial_port_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native handle type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_service.assign [*assign]]]
    [Assign an existing native handle to a serial port. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.close [*close]]]
    [Close a serial port implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.construct [*construct]]]
    [Construct a new serial port implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.destroy [*destroy]]]
    [Destroy a serial port implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.get_option [*get_option]]]
    [Get a serial port option. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.move_assign [*move_assign]]]
    [Move-assign from another serial port implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.move_construct [*move_construct]]]
    [Move-construct a new serial port implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.native_handle [*native_handle]]]
    [Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.open [*open]]]
    [Open a serial port. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.read_some [*read_some]]]
    [Read some data from the stream. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.send_break [*send_break]]]
    [Send a break sequence to the serial port. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.serial_port_service [*serial_port_service]]]
    [Construct a new serial port service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.set_option [*set_option]]]
    [Set a serial port option. ]
  ]
  
  [
    [[link boost_asio.reference.serial_port_service.write_some [*write_some]]]
    [Write the given data to the stream. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.serial_port_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/serial_port_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign serial_port_service::assign]

[indexterm2 assign..serial_port_service] 
Assign an existing native handle to a serial port. 


  boost::system::error_code assign(
      implementation_type & impl,
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]



[section:async_read_some serial_port_service::async_read_some]

[indexterm2 async_read_some..serial_port_service] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some serial_port_service::async_write_some]

[indexterm2 async_write_some..serial_port_service] 
Start an asynchronous write. 


  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 handler);



[endsect]



[section:cancel serial_port_service::cancel]

[indexterm2 cancel..serial_port_service] 
Cancel all asynchronous operations associated with the handle. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close serial_port_service::close]

[indexterm2 close..serial_port_service] 
Close a serial port implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct serial_port_service::construct]

[indexterm2 construct..serial_port_service] 
Construct a new serial port implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy serial_port_service::destroy]

[indexterm2 destroy..serial_port_service] 
Destroy a serial port implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:get_io_service serial_port_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..serial_port_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:get_option serial_port_service::get_option]

[indexterm2 get_option..serial_port_service] 
Get a serial port option. 


  template<
      typename ``[link boost_asio.reference.GettableSerialPortOption GettableSerialPortOption]``>
  boost::system::error_code get_option(
      const implementation_type & impl,
      GettableSerialPortOption & option,
      boost::system::error_code & ec) const;



[endsect]



[section:id serial_port_service::id]

[indexterm2 id..serial_port_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type serial_port_service::implementation_type]

[indexterm2 implementation_type..serial_port_service] 
The type of a serial port implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/serial_port_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open serial_port_service::is_open]

[indexterm2 is_open..serial_port_service] 
Determine whether the handle is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:move_assign serial_port_service::move_assign]

[indexterm2 move_assign..serial_port_service] 
Move-assign from another serial port implementation. 


  void move_assign(
      implementation_type & impl,
      serial_port_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct serial_port_service::move_construct]

[indexterm2 move_construct..serial_port_service] 
Move-construct a new serial port implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native serial_port_service::native]

[indexterm2 native..serial_port_service] 
(Deprecated: Use `native_handle()`.) Get the native handle implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle serial_port_service::native_handle]

[indexterm2 native_handle..serial_port_service] 
Get the native handle implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type serial_port_service::native_handle_type]

[indexterm2 native_handle_type..serial_port_service] 
The native handle type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/serial_port_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type serial_port_service::native_type]

[indexterm2 native_type..serial_port_service] 
(Deprecated: Use native\_handle\_type.) The native handle type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/serial_port_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:open serial_port_service::open]

[indexterm2 open..serial_port_service] 
Open a serial port. 


  boost::system::error_code open(
      implementation_type & impl,
      const std::string & device,
      boost::system::error_code & ec);



[endsect]



[section:read_some serial_port_service::read_some]

[indexterm2 read_some..serial_port_service] 
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]



[section:send_break serial_port_service::send_break]

[indexterm2 send_break..serial_port_service] 
Send a break sequence to the serial port. 


  boost::system::error_code send_break(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:serial_port_service serial_port_service::serial_port_service]

[indexterm2 serial_port_service..serial_port_service] 
Construct a new serial port service for the specified [link boost_asio.reference.io_service `io_service`]. 


  serial_port_service(
      boost::asio::io_service & io_service);



[endsect]



[section:set_option serial_port_service::set_option]

[indexterm2 set_option..serial_port_service] 
Set a serial port option. 


  template<
      typename ``[link boost_asio.reference.SettableSerialPortOption SettableSerialPortOption]``>
  boost::system::error_code set_option(
      implementation_type & impl,
      const SettableSerialPortOption & option,
      boost::system::error_code & ec);



[endsect]



[section:write_some serial_port_service::write_some]

[indexterm2 write_some..serial_port_service] 
Write the given data to the stream. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]



[endsect]

[section:service_already_exists service_already_exists]


Exception thrown when trying to add a duplicate service to an [link boost_asio.reference.io_service `io_service`]. 


  class service_already_exists


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.service_already_exists.service_already_exists [*service_already_exists]]]
    []
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:service_already_exists service_already_exists::service_already_exists]

[indexterm2 service_already_exists..service_already_exists] 

  service_already_exists();



[endsect]



[endsect]


[section:signal_set signal_set]

[indexterm1 signal_set] 
Typedef for the typical usage of a signal set. 


  typedef basic_signal_set signal_set;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_signal_set.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_signal_set.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.basic_signal_set.add [*add]]]
    [Add a signal to a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.async_wait [*async_wait]]]
    [Start an asynchronous operation to wait for a signal to be delivered. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.basic_signal_set [*basic_signal_set]]]
    [Construct a signal set without adding any signals. 

     Construct a signal set and add one signal. 

     Construct a signal set and add two signals. 

     Construct a signal set and add three signals. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.cancel [*cancel]]]
    [Cancel all operations associated with the signal set. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.clear [*clear]]]
    [Remove all signals from a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.remove [*remove]]]
    [Remove a signal from a signal_set. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_signal_set.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_signal_set.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_signal_set.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_signal_set.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_signal_set `basic_signal_set`] class template provides the ability to perform an asynchronous wait for one or more signals to occur.

Most applications will use the [link boost_asio.reference.signal_set `signal_set`] typedef.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Example]
  
Performing an asynchronous wait: 

   void handler(
       const boost::system::error_code& error,
       int signal_number)
   {
     if (!error)
     {
       // A signal occurred.
     }
   }

   ...

   // Construct a signal set registered for process termination.
   boost::asio::signal_set signals(io_service, SIGINT, SIGTERM);

   // Start an asynchronous wait for one of the signals to occur.
   signals.async_wait(handler);





[heading Queueing of signal notifications]
  


If a signal is registered with a signal\_set, and the signal occurs when there are no waiting handlers, then the signal notification is queued. The next async\_wait operation on that signal\_set will dequeue the notification. If multiple notifications are queued, subsequent async\_wait operations dequeue them one at a time. Signal notifications are dequeued in order of ascending signal number.

If a signal number is removed from a signal\_set (using the `remove` or `erase` member functions) then any queued notifications for that signal are discarded.


[heading Multiple registration of signals]
  


The same signal number may be registered with different signal\_set objects. When the signal occurs, one handler is called for each signal\_set object.

Note that multiple registration only works for signals that are registered using Asio. The application must not also register a signal handler using functions such as `signal()` or `sigaction()`.


[heading Signal masking on POSIX platforms]
  


POSIX allows signals to be blocked using functions such as `sigprocmask()` and `pthread_sigmask()`. For signals to be delivered, programs must ensure that any signals registered using signal\_set objects are unblocked in at least one thread. 


[heading Requirements]

[*Header: ][^boost/asio/signal_set.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:signal_set_service signal_set_service]


Default service implementation for a signal set. 


  class signal_set_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.signal_set_service.implementation_type [*implementation_type]]]
    [The type of a signal set implementation. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.signal_set_service.add [*add]]]
    [Add a signal to a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.async_wait [*async_wait]]]
    []
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.cancel [*cancel]]]
    [Cancel all operations associated with the signal set. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.clear [*clear]]]
    [Remove all signals from a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.construct [*construct]]]
    [Construct a new signal set implementation. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.destroy [*destroy]]]
    [Destroy a signal set implementation. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.remove [*remove]]]
    [Remove a signal to a signal_set. ]
  ]
  
  [
    [[link boost_asio.reference.signal_set_service.signal_set_service [*signal_set_service]]]
    [Construct a new signal set service for the specified io_service. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.signal_set_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/signal_set_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:add signal_set_service::add]

[indexterm2 add..signal_set_service] 
Add a signal to a signal\_set. 


  boost::system::error_code add(
      implementation_type & impl,
      int signal_number,
      boost::system::error_code & ec);



[endsect]



[section:async_wait signal_set_service::async_wait]

[indexterm2 async_wait..signal_set_service] 

  template<
      typename ``[link boost_asio.reference.SignalHandler SignalHandler]``>
  void async_wait(
      implementation_type & impl,
      SignalHandler handler);



[endsect]



[section:cancel signal_set_service::cancel]

[indexterm2 cancel..signal_set_service] 
Cancel all operations associated with the signal set. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:clear signal_set_service::clear]

[indexterm2 clear..signal_set_service] 
Remove all signals from a signal\_set. 


  boost::system::error_code clear(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct signal_set_service::construct]

[indexterm2 construct..signal_set_service] 
Construct a new signal set implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy signal_set_service::destroy]

[indexterm2 destroy..signal_set_service] 
Destroy a signal set implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:get_io_service signal_set_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..signal_set_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id signal_set_service::id]

[indexterm2 id..signal_set_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type signal_set_service::implementation_type]

[indexterm2 implementation_type..signal_set_service] 
The type of a signal set implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/signal_set_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:remove signal_set_service::remove]

[indexterm2 remove..signal_set_service] 
Remove a signal to a signal\_set. 


  boost::system::error_code remove(
      implementation_type & impl,
      int signal_number,
      boost::system::error_code & ec);



[endsect]



[section:signal_set_service signal_set_service::signal_set_service]

[indexterm2 signal_set_service..signal_set_service] 
Construct a new signal set service for the specified [link boost_asio.reference.io_service `io_service`]. 


  signal_set_service(
      boost::asio::io_service & io_service);



[endsect]



[endsect]

[section:socket_acceptor_service socket_acceptor_service]


Default service implementation for a socket acceptor. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``>
  class socket_acceptor_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.socket_acceptor_service.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.socket_acceptor_service.implementation_type [*implementation_type]]]
    [The native type of the socket acceptor. ]
  
  ]

  [

    [[link boost_asio.reference.socket_acceptor_service.native_handle_type [*native_handle_type]]]
    [The native acceptor type. ]
  
  ]

  [

    [[link boost_asio.reference.socket_acceptor_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native acceptor type. ]
  
  ]

  [

    [[link boost_asio.reference.socket_acceptor_service.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.socket_acceptor_service.accept [*accept]]]
    [Accept a new connection. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.assign [*assign]]]
    [Assign an existing native acceptor to a socket acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.async_accept [*async_accept]]]
    [Start an asynchronous accept. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.bind [*bind]]]
    [Bind the socket acceptor to the specified local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.close [*close]]]
    [Close a socket acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.construct [*construct]]]
    [Construct a new socket acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.destroy [*destroy]]]
    [Destroy a socket acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.get_option [*get_option]]]
    [Get a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.is_open [*is_open]]]
    [Determine whether the acceptor is open. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.listen [*listen]]]
    [Place the socket acceptor into the state where it will listen for new connections. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.local_endpoint [*local_endpoint]]]
    [Get the local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.move_assign [*move_assign]]]
    [Move-assign from another socket acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.move_construct [*move_construct]]]
    [Move-construct a new socket acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.native_handle [*native_handle]]]
    [Get the native acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native acceptor implementation. 

     Sets the non-blocking mode of the native acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the acceptor. 

     Sets the non-blocking mode of the acceptor. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.open [*open]]]
    [Open a new socket acceptor implementation. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.set_option [*set_option]]]
    [Set a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.socket_acceptor_service.socket_acceptor_service [*socket_acceptor_service]]]
    [Construct a new socket acceptor service for the specified io_service. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.socket_acceptor_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/socket_acceptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:accept socket_acceptor_service::accept]

[indexterm2 accept..socket_acceptor_service] 
Accept a new connection. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``>
  boost::system::error_code accept(
      implementation_type & impl,
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type * peer_endpoint,
      boost::system::error_code & ec);



[endsect]



[section:assign socket_acceptor_service::assign]

[indexterm2 assign..socket_acceptor_service] 
Assign an existing native acceptor to a socket acceptor. 


  boost::system::error_code assign(
      implementation_type & impl,
      const protocol_type & protocol,
      const native_handle_type & native_acceptor,
      boost::system::error_code & ec);



[endsect]



[section:async_accept socket_acceptor_service::async_accept]

[indexterm2 async_accept..socket_acceptor_service] 
Start an asynchronous accept. 


  template<
      typename ``[link boost_asio.reference.SocketService SocketService]``,
      typename ``[link boost_asio.reference.AcceptHandler AcceptHandler]``>
  void async_accept(
      implementation_type & impl,
      basic_socket< protocol_type, SocketService > & peer,
      endpoint_type * peer_endpoint,
      AcceptHandler handler);



[endsect]



[section:bind socket_acceptor_service::bind]

[indexterm2 bind..socket_acceptor_service] 
Bind the socket acceptor to the specified local endpoint. 


  boost::system::error_code bind(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);



[endsect]



[section:cancel socket_acceptor_service::cancel]

[indexterm2 cancel..socket_acceptor_service] 
Cancel all asynchronous operations associated with the acceptor. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close socket_acceptor_service::close]

[indexterm2 close..socket_acceptor_service] 
Close a socket acceptor implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct socket_acceptor_service::construct]

[indexterm2 construct..socket_acceptor_service] 
Construct a new socket acceptor implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy socket_acceptor_service::destroy]

[indexterm2 destroy..socket_acceptor_service] 
Destroy a socket acceptor implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:endpoint_type socket_acceptor_service::endpoint_type]

[indexterm2 endpoint_type..socket_acceptor_service] 
The endpoint type. 


  typedef protocol_type::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/socket_acceptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:get_io_service socket_acceptor_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..socket_acceptor_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:get_option socket_acceptor_service::get_option]

[indexterm2 get_option..socket_acceptor_service] 
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 socket_acceptor_service::id]

[indexterm2 id..socket_acceptor_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type socket_acceptor_service::implementation_type]

[indexterm2 implementation_type..socket_acceptor_service] 
The native type of the socket acceptor. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/socket_acceptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:io_control socket_acceptor_service::io_control]

[indexterm2 io_control..socket_acceptor_service] 
Perform an IO control command on the socket. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code io_control(
      implementation_type & impl,
      IoControlCommand & command,
      boost::system::error_code & ec);



[endsect]



[section:is_open socket_acceptor_service::is_open]

[indexterm2 is_open..socket_acceptor_service] 
Determine whether the acceptor is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:listen socket_acceptor_service::listen]

[indexterm2 listen..socket_acceptor_service] 
Place the socket acceptor into the state where it will listen for new connections. 


  boost::system::error_code listen(
      implementation_type & impl,
      int backlog,
      boost::system::error_code & ec);



[endsect]



[section:local_endpoint socket_acceptor_service::local_endpoint]

[indexterm2 local_endpoint..socket_acceptor_service] 
Get the local endpoint. 


  endpoint_type local_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:move_assign socket_acceptor_service::move_assign]

[indexterm2 move_assign..socket_acceptor_service] 
Move-assign from another socket acceptor implementation. 


  void move_assign(
      implementation_type & impl,
      socket_acceptor_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct socket_acceptor_service::move_construct]

[indexterm2 move_construct..socket_acceptor_service] 
Move-construct a new socket acceptor implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native socket_acceptor_service::native]

[indexterm2 native..socket_acceptor_service] 
(Deprecated: Use `native_handle()`.) Get the native acceptor implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle socket_acceptor_service::native_handle]

[indexterm2 native_handle..socket_acceptor_service] 
Get the native acceptor implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type socket_acceptor_service::native_handle_type]

[indexterm2 native_handle_type..socket_acceptor_service] 
The native acceptor type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/socket_acceptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking socket_acceptor_service::native_non_blocking]

[indexterm2 native_non_blocking..socket_acceptor_service] 
Gets the non-blocking mode of the native acceptor implementation. 


  bool ``[link boost_asio.reference.socket_acceptor_service.native_non_blocking.overload1 native_non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.socket_acceptor_service.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native acceptor implementation. 


  boost::system::error_code ``[link boost_asio.reference.socket_acceptor_service.native_non_blocking.overload2 native_non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.socket_acceptor_service.native_non_blocking.overload2 more...]]``


[section:overload1 socket_acceptor_service::native_non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the native acceptor implementation. 


  bool native_non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 socket_acceptor_service::native_non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the native acceptor implementation. 


  boost::system::error_code native_non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:native_type socket_acceptor_service::native_type]

[indexterm2 native_type..socket_acceptor_service] 
(Deprecated: Use native\_handle\_type.) The native acceptor type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/socket_acceptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking socket_acceptor_service::non_blocking]

[indexterm2 non_blocking..socket_acceptor_service] 
Gets the non-blocking mode of the acceptor. 


  bool ``[link boost_asio.reference.socket_acceptor_service.non_blocking.overload1 non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.socket_acceptor_service.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the acceptor. 


  boost::system::error_code ``[link boost_asio.reference.socket_acceptor_service.non_blocking.overload2 non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.socket_acceptor_service.non_blocking.overload2 more...]]``


[section:overload1 socket_acceptor_service::non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the acceptor. 


  bool non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 socket_acceptor_service::non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the acceptor. 


  boost::system::error_code non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:open socket_acceptor_service::open]

[indexterm2 open..socket_acceptor_service] 
Open a new socket acceptor implementation. 


  boost::system::error_code open(
      implementation_type & impl,
      const protocol_type & protocol,
      boost::system::error_code & ec);



[endsect]



[section:protocol_type socket_acceptor_service::protocol_type]

[indexterm2 protocol_type..socket_acceptor_service] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/socket_acceptor_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:set_option socket_acceptor_service::set_option]

[indexterm2 set_option..socket_acceptor_service] 
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:socket_acceptor_service socket_acceptor_service::socket_acceptor_service]

[indexterm2 socket_acceptor_service..socket_acceptor_service] 
Construct a new socket acceptor service for the specified [link boost_asio.reference.io_service `io_service`]. 


  socket_acceptor_service(
      boost::asio::io_service & io_service);



[endsect]



[endsect]

[section:socket_base socket_base]


The [link boost_asio.reference.socket_base `socket_base`] class is used as a base for the [link boost_asio.reference.basic_stream_socket `basic_stream_socket`] and [link boost_asio.reference.basic_datagram_socket `basic_datagram_socket`] class templates so that we have a common place to define the shutdown\_type and enum. 


  class socket_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.socket_base.broadcast [*broadcast]]]
    [Socket option to permit sending of broadcast messages. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.bytes_readable [*bytes_readable]]]
    [IO control command to get the amount of data that can be read without blocking. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.debug [*debug]]]
    [Socket option to enable socket-level debugging. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.do_not_route [*do_not_route]]]
    [Socket option to prevent routing, use local interfaces only. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.enable_connection_aborted [*enable_connection_aborted]]]
    [Socket option to report aborted connections on accept. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.keep_alive [*keep_alive]]]
    [Socket option to send keep-alives. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.linger [*linger]]]
    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.message_flags [*message_flags]]]
    [Bitmask type for flags that can be passed to send and receive operations. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.non_blocking_io [*non_blocking_io]]]
    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.receive_buffer_size [*receive_buffer_size]]]
    [Socket option for the receive buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.receive_low_watermark [*receive_low_watermark]]]
    [Socket option for the receive low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.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.socket_base.send_buffer_size [*send_buffer_size]]]
    [Socket option for the send buffer size of a socket. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.send_low_watermark [*send_low_watermark]]]
    [Socket option for the send low watermark. ]
  
  ]

  [

    [[link boost_asio.reference.socket_base.shutdown_type [*shutdown_type]]]
    [Different ways a socket may be shutdown. ]
  
  ]

]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.socket_base._socket_base [*~socket_base]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.socket_base.max_connections [*max_connections]]]
    [The maximum length of the queue of pending incoming connections. ]
  ]

  [
    [[link boost_asio.reference.socket_base.message_do_not_route [*message_do_not_route]]]
    [Specify that the data should not be subject to routing. ]
  ]

  [
    [[link boost_asio.reference.socket_base.message_end_of_record [*message_end_of_record]]]
    [Specifies that the data marks the end of a record. ]
  ]

  [
    [[link boost_asio.reference.socket_base.message_out_of_band [*message_out_of_band]]]
    [Process out-of-band data. ]
  ]

  [
    [[link boost_asio.reference.socket_base.message_peek [*message_peek]]]
    [Peek at incoming data without removing it from the input queue. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:broadcast socket_base::broadcast]

[indexterm2 broadcast..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:bytes_readable socket_base::bytes_readable]

[indexterm2 bytes_readable..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:debug socket_base::debug]

[indexterm2 debug..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:do_not_route socket_base::do_not_route]

[indexterm2 do_not_route..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:enable_connection_aborted socket_base::enable_connection_aborted]

[indexterm2 enable_connection_aborted..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:keep_alive socket_base::keep_alive]

[indexterm2 keep_alive..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:linger socket_base::linger]

[indexterm2 linger..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:max_connections socket_base::max_connections]

[indexterm2 max_connections..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 socket_base::message_do_not_route]

[indexterm2 message_do_not_route..socket_base] 
Specify that the data should not be subject to routing. 


  static const int message_do_not_route = implementation_defined;



[endsect]



[section:message_end_of_record socket_base::message_end_of_record]

[indexterm2 message_end_of_record..socket_base] 
Specifies that the data marks the end of a record. 


  static const int message_end_of_record = implementation_defined;



[endsect]



[section:message_flags socket_base::message_flags]

[indexterm2 message_flags..socket_base] 
Bitmask type for flags that can be passed to send and receive operations. 


  typedef int message_flags;



[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:message_out_of_band socket_base::message_out_of_band]

[indexterm2 message_out_of_band..socket_base] 
Process out-of-band data. 


  static const int message_out_of_band = implementation_defined;



[endsect]



[section:message_peek socket_base::message_peek]

[indexterm2 message_peek..socket_base] 
Peek at incoming data without removing it from the input queue. 


  static const int message_peek = implementation_defined;



[endsect]



[section:non_blocking_io socket_base::non_blocking_io]

[indexterm2 non_blocking_io..socket_base] 
(Deprecated: Use non\_blocking().) 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);







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_buffer_size socket_base::receive_buffer_size]

[indexterm2 receive_buffer_size..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive_low_watermark socket_base::receive_low_watermark]

[indexterm2 receive_low_watermark..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:reuse_address socket_base::reuse_address]

[indexterm2 reuse_address..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_buffer_size socket_base::send_buffer_size]

[indexterm2 send_buffer_size..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:send_low_watermark socket_base::send_low_watermark]

[indexterm2 send_low_watermark..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();







[heading Requirements]

[*Header: ][^boost/asio/socket_base.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:shutdown_type socket_base::shutdown_type]

[indexterm2 shutdown_type..socket_base] 
Different ways a socket may be shutdown. 


  enum shutdown_type

[indexterm2 shutdown_receive..socket_base]
[indexterm2 shutdown_send..socket_base]
[indexterm2 shutdown_both..socket_base]

[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:_socket_base socket_base::~socket_base]

[indexterm2 ~socket_base..socket_base] 
Protected destructor to prevent deletion through this type. 


  ~socket_base();



[endsect]



[endsect]

[section:ssl__context ssl::context]



  class context :
    public ssl::context_base,
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ssl__context.file_format [*file_format]]]
    [File format types. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context.impl_type [*impl_type]]]
    [(Deprecated: Use native_handle_type.) The native type of the SSL context. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context.method [*method]]]
    [Different methods supported by a context. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context.native_handle_type [*native_handle_type]]]
    [The native handle type of the SSL context. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context.options [*options]]]
    [Bitmask type for SSL options. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context.password_purpose [*password_purpose]]]
    [Purpose of PEM password. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__context.add_verify_path [*add_verify_path]]]
    [Add a directory containing certificate authority files to be used for performing verification. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.context [*context]]]
    [Constructor. 

     Deprecated constructor taking a reference to an io_service object. 

     Move-construct a context from another. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.impl [*impl]]]
    [(Deprecated: Use native_handle().) Get the underlying implementation in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.load_verify_file [*load_verify_file]]]
    [Load a certification authority file for performing verification. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.native_handle [*native_handle]]]
    [Get the underlying implementation in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.operator_eq_ [*operator=]]]
    [Move-assign a context from another. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.set_default_verify_paths [*set_default_verify_paths]]]
    [Configures the context to use the default directories for finding certification authority certificates. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.set_options [*set_options]]]
    [Set options on the context. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.set_password_callback [*set_password_callback]]]
    [Set the password callback. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.set_verify_callback [*set_verify_callback]]]
    [Set the callback used to verify peer certificates. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.set_verify_mode [*set_verify_mode]]]
    [Set the peer verification mode. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.use_certificate_chain_file [*use_certificate_chain_file]]]
    [Use a certificate chain from a file. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.use_certificate_file [*use_certificate_file]]]
    [Use a certificate from a file. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.use_private_key_file [*use_private_key_file]]]
    [Use a private key from a file. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.use_rsa_private_key_file [*use_rsa_private_key_file]]]
    [Use an RSA private key from a file. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context.use_tmp_dh_file [*use_tmp_dh_file]]]
    [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__context._context [*~context]]]
    [Destructor. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__context.default_workarounds [*default_workarounds]]]
    [Implement various bug workarounds. ]
  ]

  [
    [[link boost_asio.reference.ssl__context.no_sslv2 [*no_sslv2]]]
    [Disable SSL v2. ]
  ]

  [
    [[link boost_asio.reference.ssl__context.no_sslv3 [*no_sslv3]]]
    [Disable SSL v3. ]
  ]

  [
    [[link boost_asio.reference.ssl__context.no_tlsv1 [*no_tlsv1]]]
    [Disable TLS v1. ]
  ]

  [
    [[link boost_asio.reference.ssl__context.single_dh_use [*single_dh_use]]]
    [Always create a new key when using tmp_dh parameters. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/ssl/context.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]

[section:add_verify_path ssl::context::add_verify_path]

[indexterm2 add_verify_path..ssl::context] 
Add a directory containing certificate authority files to be used for performing verification. 


  void ``[link boost_asio.reference.ssl__context.add_verify_path.overload1 add_verify_path]``(
      const std::string & path);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.add_verify_path.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.add_verify_path.overload2 add_verify_path]``(
      const std::string & path,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.add_verify_path.overload2 more...]]``


[section:overload1 ssl::context::add_verify_path (1 of 2 overloads)]


Add a directory containing certificate authority files to be used for performing verification. 


  void add_verify_path(
      const std::string & path);


This function is used to specify the name of a directory containing certification authority certificates. Each file in the directory must contain a single certificate. The files must be named using the subject name's hash and an extension of ".0".


[heading Parameters]
    

[variablelist
  
[[path][The name of a directory containing the certificates.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_load_verify_locations`. 




[endsect]



[section:overload2 ssl::context::add_verify_path (2 of 2 overloads)]


Add a directory containing certificate authority files to be used for performing verification. 


  boost::system::error_code add_verify_path(
      const std::string & path,
      boost::system::error_code & ec);


This function is used to specify the name of a directory containing certification authority certificates. Each file in the directory must contain a single certificate. The files must be named using the subject name's hash and an extension of ".0".


[heading Parameters]
    

[variablelist
  
[[path][The name of a directory containing the certificates.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_load_verify_locations`. 




[endsect]


[endsect]

[section:context ssl::context::context]

[indexterm2 context..ssl::context] 
Constructor. 


  explicit ``[link boost_asio.reference.ssl__context.context.overload1 context]``(
      method m);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.context.overload1 more...]]``


Deprecated constructor taking a reference to an [link boost_asio.reference.io_service `io_service`] object. 


  ``[link boost_asio.reference.ssl__context.context.overload2 context]``(
      boost::asio::io_service & ,
      method m);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.context.overload2 more...]]``


Move-construct a context from another. 


  ``[link boost_asio.reference.ssl__context.context.overload3 context]``(
      context && other);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.context.overload3 more...]]``


[section:overload1 ssl::context::context (1 of 3 overloads)]


Constructor. 


  context(
      method m);



[endsect]



[section:overload2 ssl::context::context (2 of 3 overloads)]


Deprecated constructor taking a reference to an [link boost_asio.reference.io_service `io_service`] object. 


  context(
      boost::asio::io_service & ,
      method m);



[endsect]



[section:overload3 ssl::context::context (3 of 3 overloads)]


Move-construct a context from another. 


  context(
      context && other);


This constructor moves an SSL context from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other context object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the following operations only are valid for the moved-from object: 
* Destruction. 

* As a target for move-assignment. 






[endsect]


[endsect]


[section:default_workarounds ssl::context::default_workarounds]

[indexterm2 default_workarounds..ssl::context] 
Implement various bug workarounds. 


  static const int default_workarounds = implementation_defined;



[endsect]



[section:file_format ssl::context::file_format]

[indexterm2 file_format..ssl::context] 
File format types. 


  enum file_format

[indexterm2 asn1..ssl::context]
[indexterm2 pem..ssl::context]

[heading Values]
[variablelist

  [
    [asn1]
    [ASN.1 file. ]
  ]

  [
    [pem]
    [PEM file. ]
  ]

]



[endsect]



[section:impl ssl::context::impl]

[indexterm2 impl..ssl::context] 
(Deprecated: Use `native_handle()`.) Get the underlying implementation in the native type. 


  impl_type impl();


This function may be used to obtain the underlying implementation of the context. This is intended to allow access to context functionality that is not otherwise provided. 


[endsect]



[section:impl_type ssl::context::impl_type]

[indexterm2 impl_type..ssl::context] 
(Deprecated: Use native\_handle\_type.) The native type of the SSL context. 


  typedef SSL_CTX * impl_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/context.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]


[section:load_verify_file ssl::context::load_verify_file]

[indexterm2 load_verify_file..ssl::context] 
Load a certification authority file for performing verification. 


  void ``[link boost_asio.reference.ssl__context.load_verify_file.overload1 load_verify_file]``(
      const std::string & filename);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.load_verify_file.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.load_verify_file.overload2 load_verify_file]``(
      const std::string & filename,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.load_verify_file.overload2 more...]]``


[section:overload1 ssl::context::load_verify_file (1 of 2 overloads)]


Load a certification authority file for performing verification. 


  void load_verify_file(
      const std::string & filename);


This function is used to load one or more trusted certification authorities from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of a file containing certification authority certificates in PEM format.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_load_verify_locations`. 




[endsect]



[section:overload2 ssl::context::load_verify_file (2 of 2 overloads)]


Load a certification authority file for performing verification. 


  boost::system::error_code load_verify_file(
      const std::string & filename,
      boost::system::error_code & ec);


This function is used to load the certificates for one or more trusted certification authorities from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of a file containing certification authority certificates in PEM format.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_load_verify_locations`. 




[endsect]


[endsect]


[section:method ssl::context::method]

[indexterm2 method..ssl::context] 
Different methods supported by a context. 


  enum method

[indexterm2 sslv2..ssl::context]
[indexterm2 sslv2_client..ssl::context]
[indexterm2 sslv2_server..ssl::context]
[indexterm2 sslv3..ssl::context]
[indexterm2 sslv3_client..ssl::context]
[indexterm2 sslv3_server..ssl::context]
[indexterm2 tlsv1..ssl::context]
[indexterm2 tlsv1_client..ssl::context]
[indexterm2 tlsv1_server..ssl::context]
[indexterm2 sslv23..ssl::context]
[indexterm2 sslv23_client..ssl::context]
[indexterm2 sslv23_server..ssl::context]

[heading Values]
[variablelist

  [
    [sslv2]
    [Generic SSL version 2. ]
  ]

  [
    [sslv2_client]
    [SSL version 2 client. ]
  ]

  [
    [sslv2_server]
    [SSL version 2 server. ]
  ]

  [
    [sslv3]
    [Generic SSL version 3. ]
  ]

  [
    [sslv3_client]
    [SSL version 3 client. ]
  ]

  [
    [sslv3_server]
    [SSL version 3 server. ]
  ]

  [
    [tlsv1]
    [Generic TLS version 1. ]
  ]

  [
    [tlsv1_client]
    [TLS version 1 client. ]
  ]

  [
    [tlsv1_server]
    [TLS version 1 server. ]
  ]

  [
    [sslv23]
    [Generic SSL/TLS. ]
  ]

  [
    [sslv23_client]
    [SSL/TLS client. ]
  ]

  [
    [sslv23_server]
    [SSL/TLS server. ]
  ]

]



[endsect]



[section:native_handle ssl::context::native_handle]

[indexterm2 native_handle..ssl::context] 
Get the underlying implementation in the native type. 


  native_handle_type native_handle();


This function may be used to obtain the underlying implementation of the context. This is intended to allow access to context functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type ssl::context::native_handle_type]

[indexterm2 native_handle_type..ssl::context] 
The native handle type of the SSL context. 


  typedef SSL_CTX * native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/context.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:no_sslv2 ssl::context::no_sslv2]

[indexterm2 no_sslv2..ssl::context] 
Disable SSL v2. 


  static const int no_sslv2 = implementation_defined;



[endsect]



[section:no_sslv3 ssl::context::no_sslv3]

[indexterm2 no_sslv3..ssl::context] 
Disable SSL v3. 


  static const int no_sslv3 = implementation_defined;



[endsect]



[section:no_tlsv1 ssl::context::no_tlsv1]

[indexterm2 no_tlsv1..ssl::context] 
Disable TLS v1. 


  static const int no_tlsv1 = implementation_defined;



[endsect]



[section:operator_eq_ ssl::context::operator=]

[indexterm2 operator=..ssl::context] 
Move-assign a context from another. 


  context & operator=(
      context && other);


This assignment operator moves an SSL context from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other context object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the following operations only are valid for the moved-from object: 
* Destruction. 

* As a target for move-assignment. 






[endsect]



[section:options ssl::context::options]

[indexterm2 options..ssl::context] 
Bitmask type for SSL options. 


  typedef int options;



[heading Requirements]

[*Header: ][^boost/asio/ssl/context.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:password_purpose ssl::context::password_purpose]

[indexterm2 password_purpose..ssl::context] 
Purpose of PEM password. 


  enum password_purpose

[indexterm2 for_reading..ssl::context]
[indexterm2 for_writing..ssl::context]

[heading Values]
[variablelist

  [
    [for_reading]
    [The password is needed for reading/decryption. ]
  ]

  [
    [for_writing]
    [The password is needed for writing/encryption. ]
  ]

]



[endsect]


[section:set_default_verify_paths ssl::context::set_default_verify_paths]

[indexterm2 set_default_verify_paths..ssl::context] 
Configures the context to use the default directories for finding certification authority certificates. 


  void ``[link boost_asio.reference.ssl__context.set_default_verify_paths.overload1 set_default_verify_paths]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_default_verify_paths.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.set_default_verify_paths.overload2 set_default_verify_paths]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_default_verify_paths.overload2 more...]]``


[section:overload1 ssl::context::set_default_verify_paths (1 of 2 overloads)]


Configures the context to use the default directories for finding certification authority certificates. 


  void set_default_verify_paths();


This function specifies that the context should use the default, system-dependent directories for locating certification authority certificates.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_default_verify_paths`. 




[endsect]



[section:overload2 ssl::context::set_default_verify_paths (2 of 2 overloads)]


Configures the context to use the default directories for finding certification authority certificates. 


  boost::system::error_code set_default_verify_paths(
      boost::system::error_code & ec);


This function specifies that the context should use the default, system-dependent directories for locating certification authority certificates.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_default_verify_paths`. 




[endsect]


[endsect]

[section:set_options ssl::context::set_options]

[indexterm2 set_options..ssl::context] 
Set options on the context. 


  void ``[link boost_asio.reference.ssl__context.set_options.overload1 set_options]``(
      options o);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_options.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.set_options.overload2 set_options]``(
      options o,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_options.overload2 more...]]``


[section:overload1 ssl::context::set_options (1 of 2 overloads)]


Set options on the context. 


  void set_options(
      options o);


This function may be used to configure the SSL options used by the context.


[heading Parameters]
    

[variablelist
  
[[o][A bitmask of options. The available option values are defined in the [link boost_asio.reference.ssl__context_base `ssl::context_base`] class. The options are bitwise-ored with any existing value for the options.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_options`. 




[endsect]



[section:overload2 ssl::context::set_options (2 of 2 overloads)]


Set options on the context. 


  boost::system::error_code set_options(
      options o,
      boost::system::error_code & ec);


This function may be used to configure the SSL options used by the context.


[heading Parameters]
    

[variablelist
  
[[o][A bitmask of options. The available option values are defined in the [link boost_asio.reference.ssl__context_base `ssl::context_base`] class. The options are bitwise-ored with any existing value for the options.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_options`. 




[endsect]


[endsect]

[section:set_password_callback ssl::context::set_password_callback]

[indexterm2 set_password_callback..ssl::context] 
Set the password callback. 


  template<
      typename PasswordCallback>
  void ``[link boost_asio.reference.ssl__context.set_password_callback.overload1 set_password_callback]``(
      PasswordCallback callback);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_password_callback.overload1 more...]]``

  template<
      typename PasswordCallback>
  boost::system::error_code ``[link boost_asio.reference.ssl__context.set_password_callback.overload2 set_password_callback]``(
      PasswordCallback callback,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_password_callback.overload2 more...]]``


[section:overload1 ssl::context::set_password_callback (1 of 2 overloads)]


Set the password callback. 


  template<
      typename PasswordCallback>
  void set_password_callback(
      PasswordCallback callback);


This function is used to specify a callback function to obtain password information about an encrypted key in PEM format.


[heading Parameters]
    

[variablelist
  
[[callback][The function object to be used for obtaining the password. The function signature of the handler must be: 
``
   std::string password_callback(
     std::size_t max_length,  // The maximum size for a password.
     password_purpose purpose // Whether password is for reading or writing.
   ); 
``
The return value of the callback is a string containing the password.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_default_passwd_cb`. 




[endsect]



[section:overload2 ssl::context::set_password_callback (2 of 2 overloads)]


Set the password callback. 


  template<
      typename PasswordCallback>
  boost::system::error_code set_password_callback(
      PasswordCallback callback,
      boost::system::error_code & ec);


This function is used to specify a callback function to obtain password information about an encrypted key in PEM format.


[heading Parameters]
    

[variablelist
  
[[callback][The function object to be used for obtaining the password. The function signature of the handler must be: 
``
   std::string password_callback(
     std::size_t max_length,  // The maximum size for a password.
     password_purpose purpose // Whether password is for reading or writing.
   ); 
``
The return value of the callback is a string containing the password.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_default_passwd_cb`. 




[endsect]


[endsect]

[section:set_verify_callback ssl::context::set_verify_callback]

[indexterm2 set_verify_callback..ssl::context] 
Set the callback used to verify peer certificates. 


  template<
      typename VerifyCallback>
  void ``[link boost_asio.reference.ssl__context.set_verify_callback.overload1 set_verify_callback]``(
      VerifyCallback callback);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_verify_callback.overload1 more...]]``

  template<
      typename VerifyCallback>
  boost::system::error_code ``[link boost_asio.reference.ssl__context.set_verify_callback.overload2 set_verify_callback]``(
      VerifyCallback callback,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_verify_callback.overload2 more...]]``


[section:overload1 ssl::context::set_verify_callback (1 of 2 overloads)]


Set the callback used to verify peer certificates. 


  template<
      typename VerifyCallback>
  void set_verify_callback(
      VerifyCallback callback);


This function is used to specify a callback function that will be called by the implementation when it needs to verify a peer certificate.


[heading Parameters]
    

[variablelist
  
[[callback][The function object to be used for verifying a certificate. The function signature of the handler must be: 
``
   bool verify_callback(
     bool preverified, // True if the certificate passed pre-verification.
     verify_context& ctx // The peer certificate and other context.
   ); 
``
The return value of the callback is true if the certificate has passed verification, false otherwise.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_verify`. 




[endsect]



[section:overload2 ssl::context::set_verify_callback (2 of 2 overloads)]


Set the callback used to verify peer certificates. 


  template<
      typename VerifyCallback>
  boost::system::error_code set_verify_callback(
      VerifyCallback callback,
      boost::system::error_code & ec);


This function is used to specify a callback function that will be called by the implementation when it needs to verify a peer certificate.


[heading Parameters]
    

[variablelist
  
[[callback][The function object to be used for verifying a certificate. The function signature of the handler must be: 
``
   bool verify_callback(
     bool preverified, // True if the certificate passed pre-verification.
     verify_context& ctx // The peer certificate and other context.
   ); 
``
The return value of the callback is true if the certificate has passed verification, false otherwise.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_verify`. 




[endsect]


[endsect]

[section:set_verify_mode ssl::context::set_verify_mode]

[indexterm2 set_verify_mode..ssl::context] 
Set the peer verification mode. 


  void ``[link boost_asio.reference.ssl__context.set_verify_mode.overload1 set_verify_mode]``(
      verify_mode v);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_verify_mode.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.set_verify_mode.overload2 set_verify_mode]``(
      verify_mode v,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.set_verify_mode.overload2 more...]]``


[section:overload1 ssl::context::set_verify_mode (1 of 2 overloads)]


Set the peer verification mode. 


  void set_verify_mode(
      verify_mode v);


This function may be used to configure the peer verification mode used by the context.


[heading Parameters]
    

[variablelist
  
[[v][A bitmask of peer verification modes. See [link boost_asio.reference.ssl__verify_mode `ssl::verify_mode`]  for available values.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_verify`. 




[endsect]



[section:overload2 ssl::context::set_verify_mode (2 of 2 overloads)]


Set the peer verification mode. 


  boost::system::error_code set_verify_mode(
      verify_mode v,
      boost::system::error_code & ec);


This function may be used to configure the peer verification mode used by the context.


[heading Parameters]
    

[variablelist
  
[[v][A bitmask of peer verification modes. See [link boost_asio.reference.ssl__verify_mode `ssl::verify_mode`]  for available values.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_verify`. 




[endsect]


[endsect]


[section:single_dh_use ssl::context::single_dh_use]

[indexterm2 single_dh_use..ssl::context] 
Always create a new key when using tmp\_dh parameters. 


  static const int single_dh_use = implementation_defined;



[endsect]


[section:use_certificate_chain_file ssl::context::use_certificate_chain_file]

[indexterm2 use_certificate_chain_file..ssl::context] 
Use a certificate chain from a file. 


  void ``[link boost_asio.reference.ssl__context.use_certificate_chain_file.overload1 use_certificate_chain_file]``(
      const std::string & filename);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate_chain_file.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.use_certificate_chain_file.overload2 use_certificate_chain_file]``(
      const std::string & filename,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate_chain_file.overload2 more...]]``


[section:overload1 ssl::context::use_certificate_chain_file (1 of 2 overloads)]


Use a certificate chain from a file. 


  void use_certificate_chain_file(
      const std::string & filename);


This function is used to load a certificate chain into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the certificate. The file must use the PEM format.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_certificate_chain_file`. 




[endsect]



[section:overload2 ssl::context::use_certificate_chain_file (2 of 2 overloads)]


Use a certificate chain from a file. 


  boost::system::error_code use_certificate_chain_file(
      const std::string & filename,
      boost::system::error_code & ec);


This function is used to load a certificate chain into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the certificate. The file must use the PEM format.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_certificate_chain_file`. 




[endsect]


[endsect]

[section:use_certificate_file ssl::context::use_certificate_file]

[indexterm2 use_certificate_file..ssl::context] 
Use a certificate from a file. 


  void ``[link boost_asio.reference.ssl__context.use_certificate_file.overload1 use_certificate_file]``(
      const std::string & filename,
      file_format format);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate_file.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.use_certificate_file.overload2 use_certificate_file]``(
      const std::string & filename,
      file_format format,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_certificate_file.overload2 more...]]``


[section:overload1 ssl::context::use_certificate_file (1 of 2 overloads)]


Use a certificate from a file. 


  void use_certificate_file(
      const std::string & filename,
      file_format format);


This function is used to load a certificate into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the certificate.]]

[[format][The file format (ASN.1 or PEM).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_certificate_file`. 




[endsect]



[section:overload2 ssl::context::use_certificate_file (2 of 2 overloads)]


Use a certificate from a file. 


  boost::system::error_code use_certificate_file(
      const std::string & filename,
      file_format format,
      boost::system::error_code & ec);


This function is used to load a certificate into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the certificate.]]

[[format][The file format (ASN.1 or PEM).]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_certificate_file`. 




[endsect]


[endsect]

[section:use_private_key_file ssl::context::use_private_key_file]

[indexterm2 use_private_key_file..ssl::context] 
Use a private key from a file. 


  void ``[link boost_asio.reference.ssl__context.use_private_key_file.overload1 use_private_key_file]``(
      const std::string & filename,
      file_format format);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_private_key_file.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.use_private_key_file.overload2 use_private_key_file]``(
      const std::string & filename,
      file_format format,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_private_key_file.overload2 more...]]``


[section:overload1 ssl::context::use_private_key_file (1 of 2 overloads)]


Use a private key from a file. 


  void use_private_key_file(
      const std::string & filename,
      file_format format);


This function is used to load a private key into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the private key.]]

[[format][The file format (ASN.1 or PEM).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_PrivateKey_file`. 




[endsect]



[section:overload2 ssl::context::use_private_key_file (2 of 2 overloads)]


Use a private key from a file. 


  boost::system::error_code use_private_key_file(
      const std::string & filename,
      file_format format,
      boost::system::error_code & ec);


This function is used to load a private key into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the private key.]]

[[format][The file format (ASN.1 or PEM).]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_PrivateKey_file`. 




[endsect]


[endsect]

[section:use_rsa_private_key_file ssl::context::use_rsa_private_key_file]

[indexterm2 use_rsa_private_key_file..ssl::context] 
Use an RSA private key from a file. 


  void ``[link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload1 use_rsa_private_key_file]``(
      const std::string & filename,
      file_format format);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload2 use_rsa_private_key_file]``(
      const std::string & filename,
      file_format format,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_rsa_private_key_file.overload2 more...]]``


[section:overload1 ssl::context::use_rsa_private_key_file (1 of 2 overloads)]


Use an RSA private key from a file. 


  void use_rsa_private_key_file(
      const std::string & filename,
      file_format format);


This function is used to load an RSA private key into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the RSA private key.]]

[[format][The file format (ASN.1 or PEM).]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_RSAPrivateKey_file`. 




[endsect]



[section:overload2 ssl::context::use_rsa_private_key_file (2 of 2 overloads)]


Use an RSA private key from a file. 


  boost::system::error_code use_rsa_private_key_file(
      const std::string & filename,
      file_format format,
      boost::system::error_code & ec);


This function is used to load an RSA private key into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the RSA private key.]]

[[format][The file format (ASN.1 or PEM).]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_use_RSAPrivateKey_file`. 




[endsect]


[endsect]

[section:use_tmp_dh_file ssl::context::use_tmp_dh_file]

[indexterm2 use_tmp_dh_file..ssl::context] 
Use the specified file to obtain the temporary Diffie-Hellman parameters. 


  void ``[link boost_asio.reference.ssl__context.use_tmp_dh_file.overload1 use_tmp_dh_file]``(
      const std::string & filename);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_tmp_dh_file.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__context.use_tmp_dh_file.overload2 use_tmp_dh_file]``(
      const std::string & filename,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__context.use_tmp_dh_file.overload2 more...]]``


[section:overload1 ssl::context::use_tmp_dh_file (1 of 2 overloads)]


Use the specified file to obtain the temporary Diffie-Hellman parameters. 


  void use_tmp_dh_file(
      const std::string & filename);


This function is used to load Diffie-Hellman parameters into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the Diffie-Hellman parameters. The file must use the PEM format.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_tmp_dh`. 




[endsect]



[section:overload2 ssl::context::use_tmp_dh_file (2 of 2 overloads)]


Use the specified file to obtain the temporary Diffie-Hellman parameters. 


  boost::system::error_code use_tmp_dh_file(
      const std::string & filename,
      boost::system::error_code & ec);


This function is used to load Diffie-Hellman parameters into the context from a file.


[heading Parameters]
    

[variablelist
  
[[filename][The name of the file containing the Diffie-Hellman parameters. The file must use the PEM format.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_CTX_set_tmp_dh`. 




[endsect]


[endsect]


[section:_context ssl::context::~context]

[indexterm2 ~context..ssl::context] 
Destructor. 


  ~context();



[endsect]



[endsect]

[section:ssl__context_base ssl::context_base]


The [link boost_asio.reference.ssl__context_base `ssl::context_base`] class is used as a base for the basic\_context class template so that we have a common place to define various enums. 


  class context_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ssl__context_base.file_format [*file_format]]]
    [File format types. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context_base.method [*method]]]
    [Different methods supported by a context. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context_base.options [*options]]]
    [Bitmask type for SSL options. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__context_base.password_purpose [*password_purpose]]]
    [Purpose of PEM password. ]
  
  ]

]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__context_base._context_base [*~context_base]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__context_base.default_workarounds [*default_workarounds]]]
    [Implement various bug workarounds. ]
  ]

  [
    [[link boost_asio.reference.ssl__context_base.no_sslv2 [*no_sslv2]]]
    [Disable SSL v2. ]
  ]

  [
    [[link boost_asio.reference.ssl__context_base.no_sslv3 [*no_sslv3]]]
    [Disable SSL v3. ]
  ]

  [
    [[link boost_asio.reference.ssl__context_base.no_tlsv1 [*no_tlsv1]]]
    [Disable TLS v1. ]
  ]

  [
    [[link boost_asio.reference.ssl__context_base.single_dh_use [*single_dh_use]]]
    [Always create a new key when using tmp_dh parameters. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/ssl/context_base.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:default_workarounds ssl::context_base::default_workarounds]

[indexterm2 default_workarounds..ssl::context_base] 
Implement various bug workarounds. 


  static const int default_workarounds = implementation_defined;



[endsect]



[section:file_format ssl::context_base::file_format]

[indexterm2 file_format..ssl::context_base] 
File format types. 


  enum file_format

[indexterm2 asn1..ssl::context_base]
[indexterm2 pem..ssl::context_base]

[heading Values]
[variablelist

  [
    [asn1]
    [ASN.1 file. ]
  ]

  [
    [pem]
    [PEM file. ]
  ]

]



[endsect]



[section:method ssl::context_base::method]

[indexterm2 method..ssl::context_base] 
Different methods supported by a context. 


  enum method

[indexterm2 sslv2..ssl::context_base]
[indexterm2 sslv2_client..ssl::context_base]
[indexterm2 sslv2_server..ssl::context_base]
[indexterm2 sslv3..ssl::context_base]
[indexterm2 sslv3_client..ssl::context_base]
[indexterm2 sslv3_server..ssl::context_base]
[indexterm2 tlsv1..ssl::context_base]
[indexterm2 tlsv1_client..ssl::context_base]
[indexterm2 tlsv1_server..ssl::context_base]
[indexterm2 sslv23..ssl::context_base]
[indexterm2 sslv23_client..ssl::context_base]
[indexterm2 sslv23_server..ssl::context_base]

[heading Values]
[variablelist

  [
    [sslv2]
    [Generic SSL version 2. ]
  ]

  [
    [sslv2_client]
    [SSL version 2 client. ]
  ]

  [
    [sslv2_server]
    [SSL version 2 server. ]
  ]

  [
    [sslv3]
    [Generic SSL version 3. ]
  ]

  [
    [sslv3_client]
    [SSL version 3 client. ]
  ]

  [
    [sslv3_server]
    [SSL version 3 server. ]
  ]

  [
    [tlsv1]
    [Generic TLS version 1. ]
  ]

  [
    [tlsv1_client]
    [TLS version 1 client. ]
  ]

  [
    [tlsv1_server]
    [TLS version 1 server. ]
  ]

  [
    [sslv23]
    [Generic SSL/TLS. ]
  ]

  [
    [sslv23_client]
    [SSL/TLS client. ]
  ]

  [
    [sslv23_server]
    [SSL/TLS server. ]
  ]

]



[endsect]



[section:no_sslv2 ssl::context_base::no_sslv2]

[indexterm2 no_sslv2..ssl::context_base] 
Disable SSL v2. 


  static const int no_sslv2 = implementation_defined;



[endsect]



[section:no_sslv3 ssl::context_base::no_sslv3]

[indexterm2 no_sslv3..ssl::context_base] 
Disable SSL v3. 


  static const int no_sslv3 = implementation_defined;



[endsect]



[section:no_tlsv1 ssl::context_base::no_tlsv1]

[indexterm2 no_tlsv1..ssl::context_base] 
Disable TLS v1. 


  static const int no_tlsv1 = implementation_defined;



[endsect]



[section:options ssl::context_base::options]

[indexterm2 options..ssl::context_base] 
Bitmask type for SSL options. 


  typedef int options;



[heading Requirements]

[*Header: ][^boost/asio/ssl/context_base.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:password_purpose ssl::context_base::password_purpose]

[indexterm2 password_purpose..ssl::context_base] 
Purpose of PEM password. 


  enum password_purpose

[indexterm2 for_reading..ssl::context_base]
[indexterm2 for_writing..ssl::context_base]

[heading Values]
[variablelist

  [
    [for_reading]
    [The password is needed for reading/decryption. ]
  ]

  [
    [for_writing]
    [The password is needed for writing/encryption. ]
  ]

]



[endsect]



[section:single_dh_use ssl::context_base::single_dh_use]

[indexterm2 single_dh_use..ssl::context_base] 
Always create a new key when using tmp\_dh parameters. 


  static const int single_dh_use = implementation_defined;



[endsect]



[section:_context_base ssl::context_base::~context_base]

[indexterm2 ~context_base..ssl::context_base] 
Protected destructor to prevent deletion through this type. 


  ~context_base();



[endsect]



[endsect]

[section:ssl__rfc2818_verification ssl::rfc2818_verification]


Verifies a certificate against a hostname according to the rules described in RFC 2818. 


  class rfc2818_verification


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ssl__rfc2818_verification.result_type [*result_type]]]
    [The type of the function object's result. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__rfc2818_verification.operator_lp__rp_ [*operator()]]]
    [Perform certificate verification. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__rfc2818_verification.rfc2818_verification [*rfc2818_verification]]]
    [Constructor. ]
  ]
  
]


[heading Example]
  
The following example shows how to synchronously open a secure connection to a given host name: 

   using boost::asio::ip::tcp;
   namespace ssl = boost::asio::ssl;
   typedef ssl::stream<tcp::socket> ssl_socket;

   // Create a context that uses the default paths for finding CA certificates.
   ssl::context ctx(ssl::context::sslv23);
   ctx.set_default_verify_paths();

   // Open a socket and connect it to the remote host.
   boost::asio::io_service io_service;
   ssl_socket sock(io_service, ctx);
   tcp::resolver resolver(io_service);
   tcp::resolver::query query("host.name", "https");
   boost::asio::connect(sock.lowest_layer(), resolver.resolve(query));
   sock.lowest_layer().set_option(tcp::no_delay(true));

   // Perform SSL handshake and verify the remote host's certificate.
   sock.set_verify_mode(ssl::verify_peer);
   sock.set_verify_callback(ssl::rfc2818_verification("host.name"));
   sock.handshake(ssl_socket::client);

   // ... read and write as normal ...






[heading Requirements]

[*Header: ][^boost/asio/ssl/rfc2818_verification.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:operator_lp__rp_ ssl::rfc2818_verification::operator()]

[indexterm2 operator()..ssl::rfc2818_verification] 
Perform certificate verification. 


  bool operator()(
      bool preverified,
      verify_context & ctx) const;



[endsect]



[section:result_type ssl::rfc2818_verification::result_type]

[indexterm2 result_type..ssl::rfc2818_verification] 
The type of the function object's result. 


  typedef bool result_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/rfc2818_verification.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:rfc2818_verification ssl::rfc2818_verification::rfc2818_verification]

[indexterm2 rfc2818_verification..ssl::rfc2818_verification] 
Constructor. 


  rfc2818_verification(
      const std::string & host);



[endsect]



[endsect]

[section:ssl__stream ssl::stream]


Provides stream-oriented functionality using SSL. 


  template<
      typename Stream>
  class stream :
    public ssl::stream_base,
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ssl__stream__impl_struct [*impl_struct]]]
    [Structure for use with deprecated impl_type. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__stream.handshake_type [*handshake_type]]]
    [Different handshake types. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__stream.impl_type [*impl_type]]]
    [(Deprecated: Use native_handle_type.) The underlying implementation type. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__stream.lowest_layer_type [*lowest_layer_type]]]
    [The type of the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__stream.native_handle_type [*native_handle_type]]]
    [The native handle type of the SSL stream. ]
  
  ]

  [

    [[link boost_asio.reference.ssl__stream.next_layer_type [*next_layer_type]]]
    [The type of the next layer. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__stream.async_handshake [*async_handshake]]]
    [Start an asynchronous SSL handshake. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.async_shutdown [*async_shutdown]]]
    [Asynchronously shut down SSL on the stream. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.handshake [*handshake]]]
    [Perform SSL handshaking. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.impl [*impl]]]
    [(Deprecated: Use native_handle().) Get the underlying implementation in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.native_handle [*native_handle]]]
    [Get the underlying implementation in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.next_layer [*next_layer]]]
    [Get a reference to the next layer. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.read_some [*read_some]]]
    [Read some data from the stream. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.set_verify_callback [*set_verify_callback]]]
    [Set the callback used to verify peer certificates. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.set_verify_mode [*set_verify_mode]]]
    [Set the peer verification mode. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.shutdown [*shutdown]]]
    [Shut down SSL on the stream. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.stream [*stream]]]
    [Construct a stream. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream.write_some [*write_some]]]
    [Write some data to the stream. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__stream._stream [*~stream]]]
    [Destructor. ]
  ]
  
]

The stream class template provides asynchronous and blocking stream-oriented functionality using SSL.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.


[heading Example]
  
To use the SSL stream template with an `ip::tcp::socket`, you would write: 

   boost::asio::io_service io_service;
   boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23);
   boost::asio::ssl::stream<asio:ip::tcp::socket> sock(io_service, ctx);







[heading Requirements]

[*Header: ][^boost/asio/ssl/stream.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:async_handshake ssl::stream::async_handshake]

[indexterm2 async_handshake..ssl::stream] 
Start an asynchronous SSL handshake. 


  template<
      typename ``[link boost_asio.reference.HandshakeHandler HandshakeHandler]``>
  void async_handshake(
      handshake_type type,
      HandshakeHandler handler);


This function is used to asynchronously perform an SSL handshake on the stream. This function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]

[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be: 
``
   void handler(
     const boost::system::error_code& error // Result of operation.
   ); 
``
]]

]




[endsect]



[section:async_read_some ssl::stream::async_read_some]

[indexterm2 async_read_some..ssl::stream] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read one or more bytes of data from the stream. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][The buffers into which the data will be read. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]

[[handler][The handler to be called when the read operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be: 
``
   void handler(
     const boost::system::error_code& error, // Result of operation.
     std::size_t bytes_transferred           // Number of bytes read.
   ); 
``
]]

]


[heading Remarks]
      
The async\_read\_some operation may not read all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is read before the asynchronous operation completes. 




[endsect]



[section:async_shutdown ssl::stream::async_shutdown]

[indexterm2 async_shutdown..ssl::stream] 
Asynchronously shut down SSL on the stream. 


  template<
      typename ``[link boost_asio.reference.ShutdownHandler ShutdownHandler]``>
  void async_shutdown(
      ShutdownHandler handler);


This function is used to asynchronously shut down SSL on the stream. This function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be: 
``
   void handler(
     const boost::system::error_code& error // Result of operation.
   ); 
``
]]

]




[endsect]



[section:async_write_some ssl::stream::async_write_some]

[indexterm2 async_write_some..ssl::stream] 
Start an asynchronous write. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write one or more bytes of data to the stream. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][The data to be written to the stream. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]

[[handler][The handler to be called when the write operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be: 
``
   void handler(
     const boost::system::error_code& error, // Result of operation.
     std::size_t bytes_transferred           // Number of bytes written.
   ); 
``
]]

]


[heading Remarks]
      
The async\_write\_some operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the blocking operation completes. 




[endsect]



[section:get_io_service ssl::stream::get_io_service]

[indexterm2 get_io_service..ssl::stream] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the stream uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that stream will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:handshake ssl::stream::handshake]

[indexterm2 handshake..ssl::stream] 
Perform SSL handshaking. 


  void ``[link boost_asio.reference.ssl__stream.handshake.overload1 handshake]``(
      handshake_type type);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.handshake.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__stream.handshake.overload2 handshake]``(
      handshake_type type,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.handshake.overload2 more...]]``


[section:overload1 ssl::stream::handshake (1 of 2 overloads)]


Perform SSL handshaking. 


  void handshake(
      handshake_type type);


This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.


[heading Parameters]
    

[variablelist
  
[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 ssl::stream::handshake (2 of 2 overloads)]


Perform SSL handshaking. 


  boost::system::error_code handshake(
      handshake_type type,
      boost::system::error_code & ec);


This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.


[heading Parameters]
    

[variablelist
  
[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]

[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[section:handshake_type ssl::stream::handshake_type]

[indexterm2 handshake_type..ssl::stream] 
Different handshake types. 


  enum handshake_type

[indexterm2 client..ssl::stream]
[indexterm2 server..ssl::stream]

[heading Values]
[variablelist

  [
    [client]
    [Perform handshaking as a client. ]
  ]

  [
    [server]
    [Perform handshaking as a server. ]
  ]

]



[endsect]



[section:impl ssl::stream::impl]

[indexterm2 impl..ssl::stream] 
(Deprecated: Use `native_handle()`.) Get the underlying implementation in the native type. 


  impl_type impl();


This function may be used to obtain the underlying implementation of the context. This is intended to allow access to stream functionality that is not otherwise provided. 


[endsect]



[section:impl_type ssl::stream::impl_type]

[indexterm2 impl_type..ssl::stream] 
(Deprecated: Use native\_handle\_type.) The underlying implementation type. 


  typedef impl_struct * impl_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/stream.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]


[section:lowest_layer ssl::stream::lowest_layer]

[indexterm2 lowest_layer..ssl::stream] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.ssl__stream.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.lowest_layer.overload1 more...]]``

  const lowest_layer_type & ``[link boost_asio.reference.ssl__stream.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.lowest_layer.overload2 more...]]``


[section:overload1 ssl::stream::lowest_layer (1 of 2 overloads)]


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 stream layers.


[heading Return Value]
      
A reference to the lowest layer in the stack of stream layers. Ownership is not transferred to the caller. 




[endsect]



[section:overload2 ssl::stream::lowest_layer (2 of 2 overloads)]


Get a reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a reference to the lowest layer in a stack of stream layers.


[heading Return Value]
      
A reference to the lowest layer in the stack of stream layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type ssl::stream::lowest_layer_type]

[indexterm2 lowest_layer_type..ssl::stream] 
The type of the lowest layer. 


  typedef next_layer_type::lowest_layer_type lowest_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/stream.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:native_handle ssl::stream::native_handle]

[indexterm2 native_handle..ssl::stream] 
Get the underlying implementation in the native type. 


  native_handle_type native_handle();


This function may be used to obtain the underlying implementation of the context. This is intended to allow access to context functionality that is not otherwise provided.


[heading Example]
  
The `native_handle()` function returns a pointer of type `SSL*` that is suitable for passing to functions such as `SSL_get_verify_result` and `SSL_get_peer_certificate:` 

   boost::asio::ssl::stream<asio:ip::tcp::socket> sock(io_service, ctx);

   // ... establish connection and perform handshake ...

   if (X509* cert = SSL_get_peer_certificate(sock.native_handle()))
   {
     if (SSL_get_verify_result(sock.native_handle()) == X509_V_OK)
     {
       // ...
     }
   }







[endsect]



[section:native_handle_type ssl::stream::native_handle_type]

[indexterm2 native_handle_type..ssl::stream] 
The native handle type of the SSL stream. 


  typedef SSL * native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/stream.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]


[section:next_layer ssl::stream::next_layer]

[indexterm2 next_layer..ssl::stream] 
Get a reference to the next layer. 


  const next_layer_type & ``[link boost_asio.reference.ssl__stream.next_layer.overload1 next_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.next_layer.overload1 more...]]``

  next_layer_type & ``[link boost_asio.reference.ssl__stream.next_layer.overload2 next_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.next_layer.overload2 more...]]``


[section:overload1 ssl::stream::next_layer (1 of 2 overloads)]


Get a reference to the next layer. 


  const next_layer_type & next_layer() const;


This function returns a reference to the next layer in a stack of stream layers.


[heading Return Value]
      
A reference to the next layer in the stack of stream layers. Ownership is not transferred to the caller. 




[endsect]



[section:overload2 ssl::stream::next_layer (2 of 2 overloads)]


Get a reference to the next layer. 


  next_layer_type & next_layer();


This function returns a reference to the next layer in a stack of stream layers.


[heading Return Value]
      
A reference to the next layer in the stack of stream layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:next_layer_type ssl::stream::next_layer_type]

[indexterm2 next_layer_type..ssl::stream] 
The type of the next layer. 


  typedef boost::remove_reference< Stream >::type next_layer_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/stream.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]


[section:read_some ssl::stream::read_some]

[indexterm2 read_some..ssl::stream] 
Read some data from the stream. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.ssl__stream.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.read_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.ssl__stream.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.read_some.overload2 more...]]``


[section:overload1 ssl::stream::read_some (1 of 2 overloads)]


Read some data from the stream. 


  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. 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][The 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.]]

]


[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]



[section:overload2 ssl::stream::read_some (2 of 2 overloads)]


Read some data from the stream. 


  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 read data from the stream. 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][The 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:set_verify_callback ssl::stream::set_verify_callback]

[indexterm2 set_verify_callback..ssl::stream] 
Set the callback used to verify peer certificates. 


  template<
      typename VerifyCallback>
  void ``[link boost_asio.reference.ssl__stream.set_verify_callback.overload1 set_verify_callback]``(
      VerifyCallback callback);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.set_verify_callback.overload1 more...]]``

  template<
      typename VerifyCallback>
  boost::system::error_code ``[link boost_asio.reference.ssl__stream.set_verify_callback.overload2 set_verify_callback]``(
      VerifyCallback callback,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.set_verify_callback.overload2 more...]]``


[section:overload1 ssl::stream::set_verify_callback (1 of 2 overloads)]


Set the callback used to verify peer certificates. 


  template<
      typename VerifyCallback>
  void set_verify_callback(
      VerifyCallback callback);


This function is used to specify a callback function that will be called by the implementation when it needs to verify a peer certificate.


[heading Parameters]
    

[variablelist
  
[[callback][The function object to be used for verifying a certificate. The function signature of the handler must be: 
``
   bool verify_callback(
     bool preverified, // True if the certificate passed pre-verification.
     verify_context& ctx // The peer certificate and other context.
   ); 
``
The return value of the callback is true if the certificate has passed verification, false otherwise.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_set_verify`. 




[endsect]



[section:overload2 ssl::stream::set_verify_callback (2 of 2 overloads)]


Set the callback used to verify peer certificates. 


  template<
      typename VerifyCallback>
  boost::system::error_code set_verify_callback(
      VerifyCallback callback,
      boost::system::error_code & ec);


This function is used to specify a callback function that will be called by the implementation when it needs to verify a peer certificate.


[heading Parameters]
    

[variablelist
  
[[callback][The function object to be used for verifying a certificate. The function signature of the handler must be: 
``
   bool verify_callback(
     bool preverified, // True if the certificate passed pre-verification.
     verify_context& ctx // The peer certificate and other context.
   ); 
``
The return value of the callback is true if the certificate has passed verification, false otherwise.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_set_verify`. 




[endsect]


[endsect]

[section:set_verify_mode ssl::stream::set_verify_mode]

[indexterm2 set_verify_mode..ssl::stream] 
Set the peer verification mode. 


  void ``[link boost_asio.reference.ssl__stream.set_verify_mode.overload1 set_verify_mode]``(
      verify_mode v);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.set_verify_mode.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__stream.set_verify_mode.overload2 set_verify_mode]``(
      verify_mode v,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.set_verify_mode.overload2 more...]]``


[section:overload1 ssl::stream::set_verify_mode (1 of 2 overloads)]


Set the peer verification mode. 


  void set_verify_mode(
      verify_mode v);


This function may be used to configure the peer verification mode used by the stream. The new mode will override the mode inherited from the context.


[heading Parameters]
    

[variablelist
  
[[v][A bitmask of peer verification modes. See [link boost_asio.reference.ssl__verify_mode `ssl::verify_mode`]  for available values.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
Calls `SSL_set_verify`. 




[endsect]



[section:overload2 ssl::stream::set_verify_mode (2 of 2 overloads)]


Set the peer verification mode. 


  boost::system::error_code set_verify_mode(
      verify_mode v,
      boost::system::error_code & ec);


This function may be used to configure the peer verification mode used by the stream. The new mode will override the mode inherited from the context.


[heading Parameters]
    

[variablelist
  
[[v][A bitmask of peer verification modes. See [link boost_asio.reference.ssl__verify_mode `ssl::verify_mode`]  for available values.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Remarks]
      
Calls `SSL_set_verify`. 




[endsect]


[endsect]

[section:shutdown ssl::stream::shutdown]

[indexterm2 shutdown..ssl::stream] 
Shut down SSL on the stream. 


  void ``[link boost_asio.reference.ssl__stream.shutdown.overload1 shutdown]``();
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.shutdown.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.ssl__stream.shutdown.overload2 shutdown]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.shutdown.overload2 more...]]``


[section:overload1 ssl::stream::shutdown (1 of 2 overloads)]


Shut down SSL on the stream. 


  void shutdown();


This function is used to shut down SSL on the stream. The function call will block until SSL has been shut down or an error occurs.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 ssl::stream::shutdown (2 of 2 overloads)]


Shut down SSL on the stream. 


  boost::system::error_code shutdown(
      boost::system::error_code & ec);


This function is used to shut down SSL on the stream. The function call will block until SSL has been shut down or an error occurs.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[section:stream ssl::stream::stream]

[indexterm2 stream..ssl::stream] 
Construct a stream. 


  template<
      typename Arg>
  stream(
      Arg & arg,
      context & ctx);


This constructor creates a stream and initialises the underlying stream object.


[heading Parameters]
    

[variablelist
  
[[arg][The argument to be passed to initialise the underlying stream.]]

[[ctx][The SSL context to be used for the stream. ]]

]




[endsect]


[section:write_some ssl::stream::write_some]

[indexterm2 write_some..ssl::stream] 
Write some data to the stream. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.ssl__stream.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.write_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.ssl__stream.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.ssl__stream.write_some.overload2 more...]]``


[section:overload1 ssl::stream::write_some (1 of 2 overloads)]


Write some data to the stream. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);


This function is used to write data on the stream. The function call will block until one or more bytes of data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][The data to be written.]]

]


[heading Return Value]
      
The number of bytes written.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[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]



[section:overload2 ssl::stream::write_some (2 of 2 overloads)]


Write some data to the stream. 


  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 write data on the stream. The function call will block until one or more bytes of data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][The data to be written to the stream.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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]


[section:_stream ssl::stream::~stream]

[indexterm2 ~stream..ssl::stream] 
Destructor. 


  ~stream();



[endsect]



[endsect]

[section:ssl__stream__impl_struct ssl::stream::impl_struct]


Structure for use with deprecated impl\_type. 


  struct impl_struct


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__stream__impl_struct.ssl [*ssl]]]
    []
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/ssl/stream.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:ssl ssl::stream::impl_struct::ssl]

[indexterm2 ssl..ssl::stream::impl_struct] 

  SSL * ssl;



[endsect]



[endsect]

[section:ssl__stream_base ssl::stream_base]


The [link boost_asio.reference.ssl__stream_base `ssl::stream_base`] class is used as a base for the [link boost_asio.reference.ssl__stream `ssl::stream`] class template so that we have a common place to define various enums. 


  class stream_base


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ssl__stream_base.handshake_type [*handshake_type]]]
    [Different handshake types. ]
  
  ]

]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__stream_base._stream_base [*~stream_base]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/ssl/stream_base.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:handshake_type ssl::stream_base::handshake_type]

[indexterm2 handshake_type..ssl::stream_base] 
Different handshake types. 


  enum handshake_type

[indexterm2 client..ssl::stream_base]
[indexterm2 server..ssl::stream_base]

[heading Values]
[variablelist

  [
    [client]
    [Perform handshaking as a client. ]
  ]

  [
    [server]
    [Perform handshaking as a server. ]
  ]

]



[endsect]



[section:_stream_base ssl::stream_base::~stream_base]

[indexterm2 ~stream_base..ssl::stream_base] 
Protected destructor to prevent deletion through this type. 


  ~stream_base();



[endsect]



[endsect]


[section:ssl__verify_client_once ssl::verify_client_once]

[indexterm1 ssl::verify_client_once] 
Do not request client certificate on renegotiation. Ignored unless [link boost_asio.reference.ssl__verify_peer `ssl::verify_peer`]  is set. 


  const int verify_client_once = implementation_defined;


[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_mode.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]


[section:ssl__verify_context ssl::verify_context]


A simple wrapper around the X509\_STORE\_CTX type, used during verification of a peer certificate. 


  class verify_context :
    noncopyable


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.ssl__verify_context.native_handle_type [*native_handle_type]]]
    [The native handle type of the verification context. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.ssl__verify_context.native_handle [*native_handle]]]
    [Get the underlying implementation in the native type. ]
  ]
  
  [
    [[link boost_asio.reference.ssl__verify_context.verify_context [*verify_context]]]
    [Constructor. ]
  ]
  
]


[heading Remarks]
      
The [link boost_asio.reference.ssl__verify_context `ssl::verify_context`] does not own the underlying X509\_STORE\_CTX object. 



[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_context.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:native_handle ssl::verify_context::native_handle]

[indexterm2 native_handle..ssl::verify_context] 
Get the underlying implementation in the native type. 


  native_handle_type native_handle();


This function may be used to obtain the underlying implementation of the context. This is intended to allow access to context functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type ssl::verify_context::native_handle_type]

[indexterm2 native_handle_type..ssl::verify_context] 
The native handle type of the verification context. 


  typedef X509_STORE_CTX * native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_context.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:verify_context ssl::verify_context::verify_context]

[indexterm2 verify_context..ssl::verify_context] 
Constructor. 


  verify_context(
      native_handle_type handle);



[endsect]



[endsect]


[section:ssl__verify_fail_if_no_peer_cert ssl::verify_fail_if_no_peer_cert]

[indexterm1 ssl::verify_fail_if_no_peer_cert] 
Fail verification if the peer has no certificate. Ignored unless [link boost_asio.reference.ssl__verify_peer `ssl::verify_peer`]  is set. 


  const int verify_fail_if_no_peer_cert = implementation_defined;


[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_mode.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:ssl__verify_mode ssl::verify_mode]

[indexterm1 ssl::verify_mode] 
Bitmask type for peer verification. 


  typedef int verify_mode;



Possible values are:


* [link boost_asio.reference.ssl__verify_none `ssl::verify_none`]  

* [link boost_asio.reference.ssl__verify_peer `ssl::verify_peer`]  

* [link boost_asio.reference.ssl__verify_fail_if_no_peer_cert `ssl::verify_fail_if_no_peer_cert`]  

* [link boost_asio.reference.ssl__verify_client_once `ssl::verify_client_once`]  



[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_mode.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:ssl__verify_none ssl::verify_none]

[indexterm1 ssl::verify_none] 
No verification. 


  const int verify_none = implementation_defined;


[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_mode.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:ssl__verify_peer ssl::verify_peer]

[indexterm1 ssl::verify_peer] 
Verify the peer. 


  const int verify_peer = implementation_defined;


[heading Requirements]

[*Header: ][^boost/asio/ssl/verify_mode.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[endsect]



[section:steady_timer steady_timer]

[indexterm1 steady_timer] 
Typedef for a timer based on the steady clock. 


  typedef basic_waitable_timer< chrono::steady_clock > steady_timer;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_waitable_timer.clock_type [*clock_type]]]
    [The clock type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.duration [*duration]]]
    [The duration type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.time_point [*time_point]]]
    [The time point type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.traits_type [*traits_type]]]
    [The wait traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.async_wait [*async_wait]]]
    [Start an asynchronous wait on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer [*basic_waitable_timer]]]
    [Constructor. 

     Constructor to set a particular expiry time as an absolute time. 

     Constructor to set a particular expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel [*cancel]]]
    [Cancel any asynchronous operations that are waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel_one [*cancel_one]]]
    [Cancels one asynchronous operation that is waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_at [*expires_at]]]
    [Get the timer's expiry time as an absolute time. 

     Set the timer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the timer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.wait [*wait]]]
    [Perform a blocking wait on the timer. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_waitable_timer.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.

Most applications will use the boost::asio::waitable\_timer typedef.


[heading Remarks]
      
This waitable timer functionality is for use with the C++11 standard library's `<chrono>` facility, or with the Boost.Chrono library.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Examples]
  
Performing a blocking wait: 

   // Construct a timer without setting an expiry time.
   boost::asio::waitable_timer timer(io_service);

   // Set an expiry time relative to now.
   timer.expires_from_now(boost::posix_time::seconds(5));

   // Wait for the timer to expire.
   timer.wait();





Performing an asynchronous wait: 

   void handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Timer expired.
     }
   }

   ...

   // Construct a timer with an absolute expiry time.
   boost::asio::waitable_timer timer(io_service,
       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));

   // Start an asynchronous wait.
   timer.async_wait(handler);





[heading Changing an active waitable_timer's expiry time]
  


Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:



   void on_some_event()
   {
     if (my_timer.expires_from_now(seconds(5)) > 0)
     {
       // We managed to cancel the timer. Start new asynchronous wait.
       my_timer.async_wait(on_timeout);
     }
     else
     {
       // Too late, timer has already expired!
     }
   }

   void on_timeout(const boost::system::error_code& e)
   {
     if (e != boost::asio::error::operation_aborted)
     {
       // Timer was not cancelled, take necessary action.
     }
   }





* The `boost::asio::basic_waitable_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.


* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`. 




This typedef uses the C++11 `<chrono>` standard library facility, if available. Otherwise, it may use the Boost.Chrono library. To explicitly utilise Boost.Chrono, use the [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] template directly: 

   typedef basic_waitable_timer<boost::chrono::steady_clock> timer;




[heading Requirements]

[*Header: ][^boost/asio/steady_timer.hpp]

[*Convenience header: ]None


[endsect]



[section:strand strand]

[indexterm1 strand] 
Typedef for backwards compatibility. 


  typedef boost::asio::io_service::strand strand;


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.io_service__strand.dispatch [*dispatch]]]
    [Request the strand to invoke the given handler. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.get_io_service [*get_io_service]]]
    [Get the io_service associated with the strand. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.post [*post]]]
    [Request the strand to invoke the given handler and return immediately. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.strand [*strand]]]
    [Constructor. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand.wrap [*wrap]]]
    [Create a new handler that automatically dispatches the wrapped handler on the strand. ]
  ]
  
  [
    [[link boost_asio.reference.io_service__strand._strand [*~strand]]]
    [Destructor. ]
  ]
  
]

The [link boost_asio.reference.io_service__strand `io_service::strand`] class provides the ability to post and dispatch handlers with the guarantee that none of those handlers will execute concurrently.


[heading Order of handler invocation]
  
Given:


* a strand object `s` 


* an object `a` meeting completion handler requirements


* an object `a1` which is an arbitrary copy of `a` made by the implementation


* an object `b` meeting completion handler requirements


* an object `b1` which is an arbitrary copy of `b` made by the implementation

if any of the following conditions are true:


* `s.post(a)` happens-before `s.post(b)` 


* `s.post(a)` happens-before `s.dispatch(b)`, where the latter is performed outside the strand


* `s.dispatch(a)` happens-before `s.post(b)`, where the former is performed outside the strand


* `s.dispatch(a)` happens-before `s.dispatch(b)`, where both are performed outside the strand

then `asio_handler_invoke(a1, &a1)` happens-before `asio_handler_invoke(b1, &b1)`.

Note that in the following case: 

   async_op_1(..., s.wrap(a));
   async_op_2(..., s.wrap(b)); 


the completion of the first async operation will perform `s.dispatch(a)`, and the second will perform `s.dispatch(b)`, but the order in which those are performed is unspecified. That is, you cannot state whether one happens-before the other. Therefore none of the above conditions are met and no ordering guarantee is made.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Safe.





[heading Requirements]

[*Header: ][^boost/asio/strand.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:stream_socket_service stream_socket_service]


Default service implementation for a stream socket. 


  template<
      typename ``[link boost_asio.reference.Protocol Protocol]``>
  class stream_socket_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.stream_socket_service.endpoint_type [*endpoint_type]]]
    [The endpoint type. ]
  
  ]

  [

    [[link boost_asio.reference.stream_socket_service.implementation_type [*implementation_type]]]
    [The type of a stream socket implementation. ]
  
  ]

  [

    [[link boost_asio.reference.stream_socket_service.native_handle_type [*native_handle_type]]]
    [The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.stream_socket_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native socket type. ]
  
  ]

  [

    [[link boost_asio.reference.stream_socket_service.protocol_type [*protocol_type]]]
    [The protocol type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.stream_socket_service.assign [*assign]]]
    [Assign an existing native socket to a stream socket. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.async_connect [*async_connect]]]
    [Start an asynchronous connect. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.async_receive [*async_receive]]]
    [Start an asynchronous receive. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.async_send [*async_send]]]
    [Start an asynchronous send. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.at_mark [*at_mark]]]
    [Determine whether the socket is at the out-of-band data mark. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.available [*available]]]
    [Determine the number of bytes available for reading. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.bind [*bind]]]
    [Bind the stream socket to the specified local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the socket. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.close [*close]]]
    [Close a stream socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.connect [*connect]]]
    [Connect the stream socket to the specified endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.construct [*construct]]]
    [Construct a new stream socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.destroy [*destroy]]]
    [Destroy a stream socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.get_option [*get_option]]]
    [Get a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.io_control [*io_control]]]
    [Perform an IO control command on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.is_open [*is_open]]]
    [Determine whether the socket is open. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.local_endpoint [*local_endpoint]]]
    [Get the local endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.move_assign [*move_assign]]]
    [Move-assign from another stream socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.move_construct [*move_construct]]]
    [Move-construct a new stream socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.native_handle [*native_handle]]]
    [Get the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.native_non_blocking [*native_non_blocking]]]
    [Gets the non-blocking mode of the native socket implementation. 

     Sets the non-blocking mode of the native socket implementation. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.non_blocking [*non_blocking]]]
    [Gets the non-blocking mode of the socket. 

     Sets the non-blocking mode of the socket. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.open [*open]]]
    [Open a stream socket. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.receive [*receive]]]
    [Receive some data from the peer. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.remote_endpoint [*remote_endpoint]]]
    [Get the remote endpoint. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.send [*send]]]
    [Send the given data to the peer. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.set_option [*set_option]]]
    [Set a socket option. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.shutdown [*shutdown]]]
    [Disable sends or receives on the socket. ]
  ]
  
  [
    [[link boost_asio.reference.stream_socket_service.stream_socket_service [*stream_socket_service]]]
    [Construct a new stream socket service for the specified io_service. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.stream_socket_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/stream_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign stream_socket_service::assign]

[indexterm2 assign..stream_socket_service] 
Assign an existing native socket to a stream socket. 


  boost::system::error_code assign(
      implementation_type & impl,
      const protocol_type & protocol,
      const native_handle_type & native_socket,
      boost::system::error_code & ec);



[endsect]



[section:async_connect stream_socket_service::async_connect]

[indexterm2 async_connect..stream_socket_service] 
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);



[endsect]



[section:async_receive stream_socket_service::async_receive]

[indexterm2 async_receive..stream_socket_service] 
Start an asynchronous receive. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      ReadHandler handler);



[endsect]



[section:async_send stream_socket_service::async_send]

[indexterm2 async_send..stream_socket_service] 
Start an asynchronous send. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      WriteHandler handler);



[endsect]



[section:at_mark stream_socket_service::at_mark]

[indexterm2 at_mark..stream_socket_service] 
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 stream_socket_service::available]

[indexterm2 available..stream_socket_service] 
Determine the number of bytes available for reading. 


  std::size_t available(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:bind stream_socket_service::bind]

[indexterm2 bind..stream_socket_service] 
Bind the stream socket to the specified local endpoint. 


  boost::system::error_code bind(
      implementation_type & impl,
      const endpoint_type & endpoint,
      boost::system::error_code & ec);



[endsect]



[section:cancel stream_socket_service::cancel]

[indexterm2 cancel..stream_socket_service] 
Cancel all asynchronous operations associated with the socket. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close stream_socket_service::close]

[indexterm2 close..stream_socket_service] 
Close a stream socket implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:connect stream_socket_service::connect]

[indexterm2 connect..stream_socket_service] 
Connect the stream socket to the specified endpoint. 


  boost::system::error_code connect(
      implementation_type & impl,
      const endpoint_type & peer_endpoint,
      boost::system::error_code & ec);



[endsect]



[section:construct stream_socket_service::construct]

[indexterm2 construct..stream_socket_service] 
Construct a new stream socket implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy stream_socket_service::destroy]

[indexterm2 destroy..stream_socket_service] 
Destroy a stream socket implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:endpoint_type stream_socket_service::endpoint_type]

[indexterm2 endpoint_type..stream_socket_service] 
The endpoint type. 


  typedef Protocol::endpoint endpoint_type;



[heading Requirements]

[*Header: ][^boost/asio/stream_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:get_io_service stream_socket_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..stream_socket_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:get_option stream_socket_service::get_option]

[indexterm2 get_option..stream_socket_service] 
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 stream_socket_service::id]

[indexterm2 id..stream_socket_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type stream_socket_service::implementation_type]

[indexterm2 implementation_type..stream_socket_service] 
The type of a stream socket implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/stream_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:io_control stream_socket_service::io_control]

[indexterm2 io_control..stream_socket_service] 
Perform an IO control command on the socket. 


  template<
      typename ``[link boost_asio.reference.IoControlCommand IoControlCommand]``>
  boost::system::error_code io_control(
      implementation_type & impl,
      IoControlCommand & command,
      boost::system::error_code & ec);



[endsect]



[section:is_open stream_socket_service::is_open]

[indexterm2 is_open..stream_socket_service] 
Determine whether the socket is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:local_endpoint stream_socket_service::local_endpoint]

[indexterm2 local_endpoint..stream_socket_service] 
Get the local endpoint. 


  endpoint_type local_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:move_assign stream_socket_service::move_assign]

[indexterm2 move_assign..stream_socket_service] 
Move-assign from another stream socket implementation. 


  void move_assign(
      implementation_type & impl,
      stream_socket_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct stream_socket_service::move_construct]

[indexterm2 move_construct..stream_socket_service] 
Move-construct a new stream socket implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native stream_socket_service::native]

[indexterm2 native..stream_socket_service] 
(Deprecated: Use `native_handle()`.) Get the native socket implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle stream_socket_service::native_handle]

[indexterm2 native_handle..stream_socket_service] 
Get the native socket implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type stream_socket_service::native_handle_type]

[indexterm2 native_handle_type..stream_socket_service] 
The native socket type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/stream_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:native_non_blocking stream_socket_service::native_non_blocking]

[indexterm2 native_non_blocking..stream_socket_service] 
Gets the non-blocking mode of the native socket implementation. 


  bool ``[link boost_asio.reference.stream_socket_service.native_non_blocking.overload1 native_non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.stream_socket_service.native_non_blocking.overload1 more...]]``


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code ``[link boost_asio.reference.stream_socket_service.native_non_blocking.overload2 native_non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.stream_socket_service.native_non_blocking.overload2 more...]]``


[section:overload1 stream_socket_service::native_non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the native socket implementation. 


  bool native_non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 stream_socket_service::native_non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the native socket implementation. 


  boost::system::error_code native_non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:native_type stream_socket_service::native_type]

[indexterm2 native_type..stream_socket_service] 
(Deprecated: Use native\_handle\_type.) The native socket type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/stream_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:non_blocking stream_socket_service::non_blocking]

[indexterm2 non_blocking..stream_socket_service] 
Gets the non-blocking mode of the socket. 


  bool ``[link boost_asio.reference.stream_socket_service.non_blocking.overload1 non_blocking]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.stream_socket_service.non_blocking.overload1 more...]]``


Sets the non-blocking mode of the socket. 


  boost::system::error_code ``[link boost_asio.reference.stream_socket_service.non_blocking.overload2 non_blocking]``(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.stream_socket_service.non_blocking.overload2 more...]]``


[section:overload1 stream_socket_service::non_blocking (1 of 2 overloads)]


Gets the non-blocking mode of the socket. 


  bool non_blocking(
      const implementation_type & impl) const;



[endsect]



[section:overload2 stream_socket_service::non_blocking (2 of 2 overloads)]


Sets the non-blocking mode of the socket. 


  boost::system::error_code non_blocking(
      implementation_type & impl,
      bool mode,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:open stream_socket_service::open]

[indexterm2 open..stream_socket_service] 
Open a stream socket. 


  boost::system::error_code open(
      implementation_type & impl,
      const protocol_type & protocol,
      boost::system::error_code & ec);



[endsect]



[section:protocol_type stream_socket_service::protocol_type]

[indexterm2 protocol_type..stream_socket_service] 
The protocol type. 


  typedef Protocol protocol_type;



[heading Requirements]

[*Header: ][^boost/asio/stream_socket_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:receive stream_socket_service::receive]

[indexterm2 receive..stream_socket_service] 
Receive some data from the peer. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t receive(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);



[endsect]



[section:remote_endpoint stream_socket_service::remote_endpoint]

[indexterm2 remote_endpoint..stream_socket_service] 
Get the remote endpoint. 


  endpoint_type remote_endpoint(
      const implementation_type & impl,
      boost::system::error_code & ec) const;



[endsect]



[section:send stream_socket_service::send]

[indexterm2 send..stream_socket_service] 
Send the given data to the peer. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t send(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      socket_base::message_flags flags,
      boost::system::error_code & ec);



[endsect]



[section:set_option stream_socket_service::set_option]

[indexterm2 set_option..stream_socket_service] 
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 stream_socket_service::shutdown]

[indexterm2 shutdown..stream_socket_service] 
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);



[endsect]



[section:stream_socket_service stream_socket_service::stream_socket_service]

[indexterm2 stream_socket_service..stream_socket_service] 
Construct a new stream socket service for the specified [link boost_asio.reference.io_service `io_service`]. 


  stream_socket_service(
      boost::asio::io_service & io_service);



[endsect]



[endsect]


[section:streambuf streambuf]

[indexterm1 streambuf] 
Typedef for the typical usage of [link boost_asio.reference.basic_streambuf `basic_streambuf`]. 


  typedef basic_streambuf streambuf;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_streambuf.const_buffers_type [*const_buffers_type]]]
    [The type used to represent the input sequence as a list of buffers. ]
  
  ]

  [

    [[link boost_asio.reference.basic_streambuf.mutable_buffers_type [*mutable_buffers_type]]]
    [The type used to represent the output sequence as a list of buffers. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_streambuf.basic_streambuf [*basic_streambuf]]]
    [Construct a basic_streambuf object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.commit [*commit]]]
    [Move characters from the output sequence to the input sequence. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.consume [*consume]]]
    [Remove characters from the input sequence. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.data [*data]]]
    [Get a list of buffers that represents the input sequence. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.max_size [*max_size]]]
    [Get the maximum size of the basic_streambuf. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.prepare [*prepare]]]
    [Get a list of buffers that represents the output sequence, with the given size. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.size [*size]]]
    [Get the size of the input sequence. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_streambuf.overflow [*overflow]]]
    [Override std::streambuf behaviour. ]
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.reserve [*reserve]]]
    []
  ]
  
  [
    [[link boost_asio.reference.basic_streambuf.underflow [*underflow]]]
    [Override std::streambuf behaviour. ]
  ]
  
]

The `basic_streambuf` class is derived from `std::streambuf` to associate the streambuf's input and output sequences with one or more character arrays. These character arrays are internal to the `basic_streambuf` object, but direct access to the array elements is provided to permit them to be used efficiently with I/O operations. Characters written to the output sequence of a `basic_streambuf` object are appended to the input sequence of the same object.

The `basic_streambuf` class's public interface is intended to permit the following implementation strategies:


* A single contiguous character array, which is reallocated as necessary to accommodate changes in the size of the character sequence. This is the implementation approach currently used in Asio.


* A sequence of one or more character arrays, where each array is of the same size. Additional character array objects are appended to the sequence to accommodate changes in the size of the character sequence.


* A sequence of one or more character arrays of varying sizes. Additional character array objects are appended to the sequence to accommodate changes in the size of the character sequence.

The constructor for [link boost_asio.reference.basic_streambuf `basic_streambuf`] accepts a `size_t` argument specifying the maximum of the sum of the sizes of the input sequence and output sequence. During the lifetime of the `basic_streambuf` object, the following invariant holds: 

   size() <= max_size()


Any member function that would, if successful, cause the invariant to be violated shall throw an exception of class `std::length_error`.

The constructor for `basic_streambuf` takes an Allocator argument. A copy of this argument is used for any memory allocation performed, by the constructor and by all member functions, during the lifetime of each `basic_streambuf` object.


[heading Examples]
  
Writing directly from an streambuf to a socket: 

   boost::asio::streambuf b;
   std::ostream os(&b);
   os << "Hello, World!\n";

   // try sending some data in input sequence
   size_t n = sock.send(b.data());

   b.consume(n); // sent data is removed from input sequence




Reading from a socket directly into a streambuf: 

   boost::asio::streambuf b;

   // reserve 512 bytes in output sequence
   boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(512);

   size_t n = sock.receive(bufs);

   // received data is "committed" from output sequence to input sequence
   b.commit(n);

   std::istream is(&b);
   std::string s;
   is >> s;





[heading Requirements]

[*Header: ][^boost/asio/streambuf.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:system_timer system_timer]

[indexterm1 system_timer] 
Typedef for a timer based on the system clock. 


  typedef basic_waitable_timer< chrono::system_clock > system_timer;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.basic_waitable_timer.clock_type [*clock_type]]]
    [The clock type. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.duration [*duration]]]
    [The duration type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.service_type [*service_type]]]
    [The type of the service that will be used to provide I/O operations. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.time_point [*time_point]]]
    [The time point type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.basic_waitable_timer.traits_type [*traits_type]]]
    [The wait traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.async_wait [*async_wait]]]
    [Start an asynchronous wait on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.basic_waitable_timer [*basic_waitable_timer]]]
    [Constructor. 

     Constructor to set a particular expiry time as an absolute time. 

     Constructor to set a particular expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel [*cancel]]]
    [Cancel any asynchronous operations that are waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.cancel_one [*cancel_one]]]
    [Cancels one asynchronous operation that is waiting on the timer. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_at [*expires_at]]]
    [Get the timer's expiry time as an absolute time. 

     Set the timer's expiry time as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.expires_from_now [*expires_from_now]]]
    [Get the timer's expiry time relative to now. 

     Set the timer's expiry time relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.wait [*wait]]]
    [Perform a blocking wait on the timer. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.basic_waitable_timer.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.basic_waitable_timer.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.basic_waitable_timer.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.

Most applications will use the boost::asio::waitable\_timer typedef.


[heading Remarks]
      
This waitable timer functionality is for use with the C++11 standard library's `<chrono>` facility, or with the Boost.Chrono library.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.


[heading Examples]
  
Performing a blocking wait: 

   // Construct a timer without setting an expiry time.
   boost::asio::waitable_timer timer(io_service);

   // Set an expiry time relative to now.
   timer.expires_from_now(boost::posix_time::seconds(5));

   // Wait for the timer to expire.
   timer.wait();





Performing an asynchronous wait: 

   void handler(const boost::system::error_code& error)
   {
     if (!error)
     {
       // Timer expired.
     }
   }

   ...

   // Construct a timer with an absolute expiry time.
   boost::asio::waitable_timer timer(io_service,
       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));

   // Start an asynchronous wait.
   timer.async_wait(handler);





[heading Changing an active waitable_timer's expiry time]
  


Changing the expiry time of a timer while there are pending asynchronous waits causes those wait operations to be cancelled. To ensure that the action associated with the timer is performed only once, use something like this: used:



   void on_some_event()
   {
     if (my_timer.expires_from_now(seconds(5)) > 0)
     {
       // We managed to cancel the timer. Start new asynchronous wait.
       my_timer.async_wait(on_timeout);
     }
     else
     {
       // Too late, timer has already expired!
     }
   }

   void on_timeout(const boost::system::error_code& e)
   {
     if (e != boost::asio::error::operation_aborted)
     {
       // Timer was not cancelled, take necessary action.
     }
   }





* The `boost::asio::basic_waitable_timer::expires_from_now()` function cancels any pending asynchronous waits, and returns the number of asynchronous waits that were cancelled. If it returns 0 then you were too late and the wait handler has already been executed, or will soon be executed. If it returns 1 then the wait handler was successfully cancelled.


* If a wait handler is cancelled, the boost::system::error\_code passed to it contains the value `boost::asio::error::operation_aborted`. 




This typedef uses the C++11 `<chrono>` standard library facility, if available. Otherwise, it may use the Boost.Chrono library. To explicitly utilise Boost.Chrono, use the [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] template directly: 

   typedef basic_waitable_timer<boost::chrono::system_clock> timer;




[heading Requirements]

[*Header: ][^boost/asio/system_timer.hpp]

[*Convenience header: ]None


[endsect]


[section:time_traits_lt__ptime__gt_ time_traits< boost::posix_time::ptime >]


Time traits specialised for posix\_time. 


  template<>
  struct time_traits< boost::posix_time::ptime >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.time_traits_lt__ptime__gt_.duration_type [*duration_type]]]
    [The duration type. ]
  
  ]

  [

    [[link boost_asio.reference.time_traits_lt__ptime__gt_.time_type [*time_type]]]
    [The time type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.time_traits_lt__ptime__gt_.add [*add]]]
    [Add a duration to a time. ]
  ]
  
  [
    [[link boost_asio.reference.time_traits_lt__ptime__gt_.less_than [*less_than]]]
    [Test whether one time is less than another. ]
  ]
  
  [
    [[link boost_asio.reference.time_traits_lt__ptime__gt_.now [*now]]]
    [Get the current time. ]
  ]
  
  [
    [[link boost_asio.reference.time_traits_lt__ptime__gt_.subtract [*subtract]]]
    [Subtract one time from another. ]
  ]
  
  [
    [[link boost_asio.reference.time_traits_lt__ptime__gt_.to_posix_duration [*to_posix_duration]]]
    [Convert to POSIX duration type. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/time_traits.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:add time_traits< boost::posix_time::ptime >::add]

[indexterm2 add..time_traits< boost::posix_time::ptime >] 
Add a duration to a time. 


  static time_type add(
      const time_type & t,
      const duration_type & d);



[endsect]



[section:duration_type time_traits< boost::posix_time::ptime >::duration_type]

[indexterm2 duration_type..time_traits< boost::posix_time::ptime >] 
The duration type. 


  typedef boost::posix_time::time_duration duration_type;



[heading Requirements]

[*Header: ][^boost/asio/time_traits.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:less_than time_traits< boost::posix_time::ptime >::less_than]

[indexterm2 less_than..time_traits< boost::posix_time::ptime >] 
Test whether one time is less than another. 


  static bool less_than(
      const time_type & t1,
      const time_type & t2);



[endsect]



[section:now time_traits< boost::posix_time::ptime >::now]

[indexterm2 now..time_traits< boost::posix_time::ptime >] 
Get the current time. 


  static time_type now();



[endsect]



[section:subtract time_traits< boost::posix_time::ptime >::subtract]

[indexterm2 subtract..time_traits< boost::posix_time::ptime >] 
Subtract one time from another. 


  static duration_type subtract(
      const time_type & t1,
      const time_type & t2);



[endsect]



[section:time_type time_traits< boost::posix_time::ptime >::time_type]

[indexterm2 time_type..time_traits< boost::posix_time::ptime >] 
The time type. 


  typedef boost::posix_time::ptime time_type;



[heading Requirements]

[*Header: ][^boost/asio/time_traits.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:to_posix_duration time_traits< boost::posix_time::ptime >::to_posix_duration]

[indexterm2 to_posix_duration..time_traits< boost::posix_time::ptime >] 
Convert to POSIX duration type. 


  static boost::posix_time::time_duration to_posix_duration(
      const duration_type & d);



[endsect]



[endsect]


[section:transfer_all transfer_all]

[indexterm1 transfer_all] 
Return a completion condition function object that indicates that a read or write operation should continue until all of the data has been transferred, or until an error occurs. 


  unspecified transfer_all();


This function is used to create an object, of unspecified type, that meets CompletionCondition requirements.


[heading Example]
  
Reading until a buffer is full: 

   boost::array<char, 128> buf;
   boost::system::error_code ec;
   std::size_t n = boost::asio::read(
       sock, boost::asio::buffer(buf),
       boost::asio::transfer_all(), ec);
   if (ec)
   {
     // An error occurred.
   }
   else
   {
     // n == 128
   }






[heading Requirements]

[*Header: ][^boost/asio/completion_condition.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:transfer_at_least transfer_at_least]

[indexterm1 transfer_at_least] 
Return a completion condition function object that indicates that a read or write operation should continue until a minimum number of bytes has been transferred, or until an error occurs. 


  unspecified transfer_at_least(
      std::size_t minimum);


This function is used to create an object, of unspecified type, that meets CompletionCondition requirements.


[heading Example]
  
Reading until a buffer is full or contains at least 64 bytes: 

   boost::array<char, 128> buf;
   boost::system::error_code ec;
   std::size_t n = boost::asio::read(
       sock, boost::asio::buffer(buf),
       boost::asio::transfer_at_least(64), ec);
   if (ec)
   {
     // An error occurred.
   }
   else
   {
     // n >= 64 && n <= 128
   }






[heading Requirements]

[*Header: ][^boost/asio/completion_condition.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:transfer_exactly transfer_exactly]

[indexterm1 transfer_exactly] 
Return a completion condition function object that indicates that a read or write operation should continue until an exact number of bytes has been transferred, or until an error occurs. 


  unspecified transfer_exactly(
      std::size_t size);


This function is used to create an object, of unspecified type, that meets CompletionCondition requirements.


[heading Example]
  
Reading until a buffer is full or contains exactly 64 bytes: 

   boost::array<char, 128> buf;
   boost::system::error_code ec;
   std::size_t n = boost::asio::read(
       sock, boost::asio::buffer(buf),
       boost::asio::transfer_exactly(64), ec);
   if (ec)
   {
     // An error occurred.
   }
   else
   {
     // n == 64
   }






[heading Requirements]

[*Header: ][^boost/asio/completion_condition.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:use_service use_service]

[indexterm1 use_service] 

  template<
      typename ``[link boost_asio.reference.Service Service]``>
  Service & use_service(
      io_service & ios);


This function is used to locate a service object that corresponds to the given service type. If there is no existing implementation of the service, then the [link boost_asio.reference.io_service `io_service`] will create a new instance of the service.


[heading Parameters]
    

[variablelist
  
[[ios][The [link boost_asio.reference.io_service `io_service`] object that owns the service.]]

]


[heading Return Value]
      
The service interface implementing the specified service type. Ownership of the service interface is not transferred to the caller. 



[heading Requirements]

[*Header: ][^boost/asio/io_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:wait_traits wait_traits]


Wait traits suitable for use with the [link boost_asio.reference.basic_waitable_timer `basic_waitable_timer`] class template. 


  template<
      typename Clock>
  struct wait_traits


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.wait_traits.to_wait_duration [*to_wait_duration]]]
    [Convert a clock duration into a duration used for waiting. ]
  ]
  
]

[heading Requirements]

[*Header: ][^boost/asio/wait_traits.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:to_wait_duration wait_traits::to_wait_duration]

[indexterm2 to_wait_duration..wait_traits] 
Convert a clock duration into a duration used for waiting. 


  static Clock::duration to_wait_duration(
      const typename Clock::duration & d);



[heading Return Value]
      
`d`. 




[endsect]



[endsect]

[section:waitable_timer_service waitable_timer_service]


Default service implementation for a timer. 


  template<
      typename Clock,
      typename ``[link boost_asio.reference.WaitTraits WaitTraits]`` = boost::asio::wait_traits<Clock>>
  class waitable_timer_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.waitable_timer_service.clock_type [*clock_type]]]
    [The clock type. ]
  
  ]

  [

    [[link boost_asio.reference.waitable_timer_service.duration [*duration]]]
    [The duration type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.waitable_timer_service.implementation_type [*implementation_type]]]
    [The implementation type of the waitable timer. ]
  
  ]

  [

    [[link boost_asio.reference.waitable_timer_service.time_point [*time_point]]]
    [The time point type of the clock. ]
  
  ]

  [

    [[link boost_asio.reference.waitable_timer_service.traits_type [*traits_type]]]
    [The wait traits type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.waitable_timer_service.async_wait [*async_wait]]]
    []
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.cancel [*cancel]]]
    [Cancel any asynchronous wait operations associated with the timer. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.cancel_one [*cancel_one]]]
    [Cancels one asynchronous wait operation associated with the timer. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.construct [*construct]]]
    [Construct a new timer implementation. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.destroy [*destroy]]]
    [Destroy a timer implementation. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.expires_at [*expires_at]]]
    [Get the expiry time for the timer as an absolute time. 

     Set the expiry time for the timer as an absolute time. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.expires_from_now [*expires_from_now]]]
    [Get the expiry time for the timer relative to now. 

     Set the expiry time for the timer relative to now. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.wait [*wait]]]
    []
  ]
  
  [
    [[link boost_asio.reference.waitable_timer_service.waitable_timer_service [*waitable_timer_service]]]
    [Construct a new timer service for the specified io_service. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.waitable_timer_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/waitable_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:async_wait waitable_timer_service::async_wait]

[indexterm2 async_wait..waitable_timer_service] 

  template<
      typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
  void async_wait(
      implementation_type & impl,
      WaitHandler handler);



[endsect]



[section:cancel waitable_timer_service::cancel]

[indexterm2 cancel..waitable_timer_service] 
Cancel any asynchronous wait operations associated with the timer. 


  std::size_t cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:cancel_one waitable_timer_service::cancel_one]

[indexterm2 cancel_one..waitable_timer_service] 
Cancels one asynchronous wait operation associated with the timer. 


  std::size_t cancel_one(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:clock_type waitable_timer_service::clock_type]

[indexterm2 clock_type..waitable_timer_service] 
The clock type. 


  typedef Clock clock_type;



[heading Requirements]

[*Header: ][^boost/asio/waitable_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:construct waitable_timer_service::construct]

[indexterm2 construct..waitable_timer_service] 
Construct a new timer implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy waitable_timer_service::destroy]

[indexterm2 destroy..waitable_timer_service] 
Destroy a timer implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:duration waitable_timer_service::duration]

[indexterm2 duration..waitable_timer_service] 
The duration type of the clock. 


  typedef clock_type::duration duration;



[heading Requirements]

[*Header: ][^boost/asio/waitable_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:expires_at waitable_timer_service::expires_at]

[indexterm2 expires_at..waitable_timer_service] 
Get the expiry time for the timer as an absolute time. 


  time_point ``[link boost_asio.reference.waitable_timer_service.expires_at.overload1 expires_at]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.waitable_timer_service.expires_at.overload1 more...]]``


Set the expiry time for the timer as an absolute time. 


  std::size_t ``[link boost_asio.reference.waitable_timer_service.expires_at.overload2 expires_at]``(
      implementation_type & impl,
      const time_point & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.waitable_timer_service.expires_at.overload2 more...]]``


[section:overload1 waitable_timer_service::expires_at (1 of 2 overloads)]


Get the expiry time for the timer as an absolute time. 


  time_point expires_at(
      const implementation_type & impl) const;



[endsect]



[section:overload2 waitable_timer_service::expires_at (2 of 2 overloads)]


Set the expiry time for the timer as an absolute time. 


  std::size_t expires_at(
      implementation_type & impl,
      const time_point & expiry_time,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:expires_from_now waitable_timer_service::expires_from_now]

[indexterm2 expires_from_now..waitable_timer_service] 
Get the expiry time for the timer relative to now. 


  duration ``[link boost_asio.reference.waitable_timer_service.expires_from_now.overload1 expires_from_now]``(
      const implementation_type & impl) const;
  ``  [''''&raquo;''' [link boost_asio.reference.waitable_timer_service.expires_from_now.overload1 more...]]``


Set the expiry time for the timer relative to now. 


  std::size_t ``[link boost_asio.reference.waitable_timer_service.expires_from_now.overload2 expires_from_now]``(
      implementation_type & impl,
      const duration & expiry_time,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.waitable_timer_service.expires_from_now.overload2 more...]]``


[section:overload1 waitable_timer_service::expires_from_now (1 of 2 overloads)]


Get the expiry time for the timer relative to now. 


  duration expires_from_now(
      const implementation_type & impl) const;



[endsect]



[section:overload2 waitable_timer_service::expires_from_now (2 of 2 overloads)]


Set the expiry time for the timer relative to now. 


  std::size_t expires_from_now(
      implementation_type & impl,
      const duration & expiry_time,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:get_io_service waitable_timer_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..waitable_timer_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id waitable_timer_service::id]

[indexterm2 id..waitable_timer_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type waitable_timer_service::implementation_type]

[indexterm2 implementation_type..waitable_timer_service] 
The implementation type of the waitable timer. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/waitable_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:time_point waitable_timer_service::time_point]

[indexterm2 time_point..waitable_timer_service] 
The time point type of the clock. 


  typedef clock_type::time_point time_point;



[heading Requirements]

[*Header: ][^boost/asio/waitable_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:traits_type waitable_timer_service::traits_type]

[indexterm2 traits_type..waitable_timer_service] 
The wait traits type. 


  typedef WaitTraits traits_type;



[heading Requirements]

[*Header: ][^boost/asio/waitable_timer_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:wait waitable_timer_service::wait]

[indexterm2 wait..waitable_timer_service] 

  void wait(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:waitable_timer_service waitable_timer_service::waitable_timer_service]

[indexterm2 waitable_timer_service..waitable_timer_service] 
Construct a new timer service for the specified [link boost_asio.reference.io_service `io_service`]. 


  waitable_timer_service(
      boost::asio::io_service & io_service);



[endsect]



[endsect]

[section:windows__basic_handle windows::basic_handle]


Provides Windows handle functionality. 


  template<
      typename ``[link boost_asio.reference.HandleService HandleService]``>
  class basic_handle :
    public basic_io_object< HandleService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.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.windows__basic_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.basic_handle [*basic_handle]]]
    [Construct a basic_handle without opening it. 

     Construct a basic_handle on an existing native handle. 

     Move-construct a basic_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_handle from another. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle._basic_handle [*~basic_handle]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] class template provides the ability to wrap a Windows handle.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign windows::basic_handle::assign]

[indexterm2 assign..windows::basic_handle] 
Assign an existing native handle to the handle. 


  void ``[link boost_asio.reference.windows__basic_handle.assign.overload1 assign]``(
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_handle.assign.overload2 assign]``(
      const native_handle_type & handle,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.assign.overload2 more...]]``


[section:overload1 windows::basic_handle::assign (1 of 2 overloads)]


Assign an existing native handle to the handle. 


  void assign(
      const native_handle_type & handle);



[endsect]



[section:overload2 windows::basic_handle::assign (2 of 2 overloads)]


Assign an existing native handle to the handle. 


  boost::system::error_code assign(
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]


[endsect]

[section:basic_handle windows::basic_handle::basic_handle]

[indexterm2 basic_handle..windows::basic_handle] 
Construct a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] without opening it. 


  explicit ``[link boost_asio.reference.windows__basic_handle.basic_handle.overload1 basic_handle]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.basic_handle.overload1 more...]]``


Construct a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] on an existing native handle. 


  ``[link boost_asio.reference.windows__basic_handle.basic_handle.overload2 basic_handle]``(
      boost::asio::io_service & io_service,
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.basic_handle.overload2 more...]]``


Move-construct a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] from another. 


  ``[link boost_asio.reference.windows__basic_handle.basic_handle.overload3 basic_handle]``(
      basic_handle && other);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.basic_handle.overload3 more...]]``


[section:overload1 windows::basic_handle::basic_handle (1 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] without opening it. 


  basic_handle(
      boost::asio::io_service & io_service);


This constructor creates a handle without opening it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the handle will use to dispatch handlers for any asynchronous operations performed on the handle. ]]

]




[endsect]



[section:overload2 windows::basic_handle::basic_handle (2 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] on an existing native handle. 


  basic_handle(
      boost::asio::io_service & io_service,
      const native_handle_type & handle);


This constructor creates a handle object to hold an existing native handle.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the handle will use to dispatch handlers for any asynchronous operations performed on the handle.]]

[[handle][A native handle.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 windows::basic_handle::basic_handle (3 of 3 overloads)]


Move-construct a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] from another. 


  basic_handle(
      basic_handle && other);


This constructor moves a handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_handle(io_service&) constructor`. 




[endsect]


[endsect]

[section:cancel windows::basic_handle::cancel]

[indexterm2 cancel..windows::basic_handle] 
Cancel all asynchronous operations associated with the handle. 


  void ``[link boost_asio.reference.windows__basic_handle.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_handle.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.cancel.overload2 more...]]``


[section:overload1 windows::basic_handle::cancel (1 of 2 overloads)]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_handle::cancel (2 of 2 overloads)]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_handle::close]

[indexterm2 close..windows::basic_handle] 
Close the handle. 


  void ``[link boost_asio.reference.windows__basic_handle.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_handle.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.close.overload2 more...]]``


[section:overload1 windows::basic_handle::close (1 of 2 overloads)]


Close the handle. 


  void close();


This function is used to close the handle. 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 windows::basic_handle::close (2 of 2 overloads)]


Close the handle. 


  boost::system::error_code close(
      boost::system::error_code & ec);


This function is used to close the handle. 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_implementation windows::basic_handle::get_implementation]

[indexterm2 get_implementation..windows::basic_handle] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.windows__basic_handle.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.windows__basic_handle.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.get_implementation.overload2 more...]]``


[section:overload1 windows::basic_handle::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 windows::basic_handle::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service windows::basic_handle::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..windows::basic_handle] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service windows::basic_handle::get_service]

[indexterm2 get_service..windows::basic_handle] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.windows__basic_handle.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.windows__basic_handle.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.get_service.overload2 more...]]``


[section:overload1 windows::basic_handle::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 windows::basic_handle::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation windows::basic_handle::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..windows::basic_handle] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type windows::basic_handle::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..windows::basic_handle] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::basic_handle::is_open]

[indexterm2 is_open..windows::basic_handle] 
Determine whether the handle is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer windows::basic_handle::lowest_layer]

[indexterm2 lowest_layer..windows::basic_handle] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.windows__basic_handle.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.windows__basic_handle.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_handle.lowest_layer.overload2 more...]]``


[section:overload1 windows::basic_handle::lowest_layer (1 of 2 overloads)]


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 [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] 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:overload2 windows::basic_handle::lowest_layer (2 of 2 overloads)]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type windows::basic_handle::lowest_layer_type]

[indexterm2 lowest_layer_type..windows::basic_handle] 
A [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] is always the lowest layer. 


  typedef basic_handle< HandleService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.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.windows__basic_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.basic_handle [*basic_handle]]]
    [Construct a basic_handle without opening it. 

     Construct a basic_handle on an existing native handle. 

     Move-construct a basic_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_handle from another. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle._basic_handle [*~basic_handle]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] class template provides the ability to wrap a Windows handle.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/windows/basic_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native windows::basic_handle::native]

[indexterm2 native..windows::basic_handle] 
(Deprecated: Use `native_handle()`.) Get the native handle representation. 


  native_type native();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle windows::basic_handle::native_handle]

[indexterm2 native_handle..windows::basic_handle] 
Get the native handle representation. 


  native_handle_type native_handle();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type windows::basic_handle::native_handle_type]

[indexterm2 native_handle_type..windows::basic_handle] 
The native representation of a handle. 


  typedef HandleService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type windows::basic_handle::native_type]

[indexterm2 native_type..windows::basic_handle] 
(Deprecated: Use native\_handle\_type.) The native representation of a handle. 


  typedef HandleService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ windows::basic_handle::operator=]

[indexterm2 operator=..windows::basic_handle] 
Move-assign a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] from another. 


  basic_handle & operator=(
      basic_handle && other);


This assignment operator moves a handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_handle(io_service&) constructor`. 




[endsect]



[section:service windows::basic_handle::service]


['Inherited from basic_io_object.]

[indexterm2 service..windows::basic_handle] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type windows::basic_handle::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..windows::basic_handle] 
The type of the service that will be used to provide I/O operations. 


  typedef HandleService service_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:_basic_handle windows::basic_handle::~basic_handle]

[indexterm2 ~basic_handle..windows::basic_handle] 
Protected destructor to prevent deletion through this type. 


  ~basic_handle();



[endsect]



[endsect]

[section:windows__basic_object_handle windows::basic_object_handle]


Provides object-oriented handle functionality. 


  template<
      typename ``[link boost_asio.reference.ObjectHandleService ObjectHandleService]`` = object_handle_service>
  class basic_object_handle :
    public windows::basic_handle< ObjectHandleService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_object_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.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.windows__basic_object_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.async_wait [*async_wait]]]
    [Start an asynchronous wait on the object handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.basic_object_handle [*basic_object_handle]]]
    [Construct a basic_object_handle without opening it. 

     Construct a basic_object_handle on an existing native handle. 

     Move-construct a basic_object_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_object_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.wait [*wait]]]
    [Perform a blocking wait on the object handle. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_object_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_object_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_object_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] class template provides asynchronous and blocking object-oriented handle functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign windows::basic_object_handle::assign]

[indexterm2 assign..windows::basic_object_handle] 
Assign an existing native handle to the handle. 


  void ``[link boost_asio.reference.windows__basic_object_handle.assign.overload1 assign]``(
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_object_handle.assign.overload2 assign]``(
      const native_handle_type & handle,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.assign.overload2 more...]]``


[section:overload1 windows::basic_object_handle::assign (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Assign an existing native handle to the handle. 


  void assign(
      const native_handle_type & handle);



[endsect]



[section:overload2 windows::basic_object_handle::assign (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Assign an existing native handle to the handle. 


  boost::system::error_code assign(
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_wait windows::basic_object_handle::async_wait]

[indexterm2 async_wait..windows::basic_object_handle] 
Start an asynchronous wait on the object handle. 


  template<
      typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
  void async_wait(
      WaitHandler handler);


This function is be used to initiate an asynchronous wait against the object handle. It always returns immediately.


[heading Parameters]
    

[variablelist
  
[[handler][The handler to be called when the object handle is set to the signalled state. 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()`. ]]

]




[endsect]


[section:basic_object_handle windows::basic_object_handle::basic_object_handle]

[indexterm2 basic_object_handle..windows::basic_object_handle] 
Construct a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] without opening it. 


  explicit ``[link boost_asio.reference.windows__basic_object_handle.basic_object_handle.overload1 basic_object_handle]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.basic_object_handle.overload1 more...]]``


Construct a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] on an existing native handle. 


  ``[link boost_asio.reference.windows__basic_object_handle.basic_object_handle.overload2 basic_object_handle]``(
      boost::asio::io_service & io_service,
      const native_handle_type & native_handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.basic_object_handle.overload2 more...]]``


Move-construct a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] from another. 


  ``[link boost_asio.reference.windows__basic_object_handle.basic_object_handle.overload3 basic_object_handle]``(
      basic_object_handle && other);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.basic_object_handle.overload3 more...]]``


[section:overload1 windows::basic_object_handle::basic_object_handle (1 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] without opening it. 


  basic_object_handle(
      boost::asio::io_service & io_service);


This constructor creates an object handle without opening it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the object handle will use to dispatch handlers for any asynchronous operations performed on the handle. ]]

]




[endsect]



[section:overload2 windows::basic_object_handle::basic_object_handle (2 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] on an existing native handle. 


  basic_object_handle(
      boost::asio::io_service & io_service,
      const native_handle_type & native_handle);


This constructor creates an object handle object to hold an existing native handle.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the object handle will use to dispatch handlers for any asynchronous operations performed on the handle.]]

[[native_handle][The new underlying handle implementation.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 windows::basic_object_handle::basic_object_handle (3 of 3 overloads)]


Move-construct a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] from another. 


  basic_object_handle(
      basic_object_handle && other);


This constructor moves an object handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_object_handle(io_service&) constructor`. 




[endsect]


[endsect]

[section:cancel windows::basic_object_handle::cancel]

[indexterm2 cancel..windows::basic_object_handle] 
Cancel all asynchronous operations associated with the handle. 


  void ``[link boost_asio.reference.windows__basic_object_handle.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_object_handle.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.cancel.overload2 more...]]``


[section:overload1 windows::basic_object_handle::cancel (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_object_handle::cancel (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_object_handle::close]

[indexterm2 close..windows::basic_object_handle] 
Close the handle. 


  void ``[link boost_asio.reference.windows__basic_object_handle.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_object_handle.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.close.overload2 more...]]``


[section:overload1 windows::basic_object_handle::close (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Close the handle. 


  void close();


This function is used to close the handle. 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 windows::basic_object_handle::close (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Close the handle. 


  boost::system::error_code close(
      boost::system::error_code & ec);


This function is used to close the handle. 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_implementation windows::basic_object_handle::get_implementation]

[indexterm2 get_implementation..windows::basic_object_handle] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.windows__basic_object_handle.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.windows__basic_object_handle.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.get_implementation.overload2 more...]]``


[section:overload1 windows::basic_object_handle::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 windows::basic_object_handle::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service windows::basic_object_handle::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..windows::basic_object_handle] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service windows::basic_object_handle::get_service]

[indexterm2 get_service..windows::basic_object_handle] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.windows__basic_object_handle.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.windows__basic_object_handle.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.get_service.overload2 more...]]``


[section:overload1 windows::basic_object_handle::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 windows::basic_object_handle::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation windows::basic_object_handle::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..windows::basic_object_handle] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type windows::basic_object_handle::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..windows::basic_object_handle] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::basic_object_handle::is_open]


['Inherited from windows::basic_handle.]

[indexterm2 is_open..windows::basic_object_handle] 
Determine whether the handle is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer windows::basic_object_handle::lowest_layer]

[indexterm2 lowest_layer..windows::basic_object_handle] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.windows__basic_object_handle.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.windows__basic_object_handle.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.lowest_layer.overload2 more...]]``


[section:overload1 windows::basic_object_handle::lowest_layer (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


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 [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] 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:overload2 windows::basic_object_handle::lowest_layer (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type windows::basic_object_handle::lowest_layer_type]


['Inherited from windows::basic_handle.]

[indexterm2 lowest_layer_type..windows::basic_object_handle] 
A [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] is always the lowest layer. 


  typedef basic_handle< ObjectHandleService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.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.windows__basic_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.basic_handle [*basic_handle]]]
    [Construct a basic_handle without opening it. 

     Construct a basic_handle on an existing native handle. 

     Move-construct a basic_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_handle from another. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle._basic_handle [*~basic_handle]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] class template provides the ability to wrap a Windows handle.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/windows/basic_object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native windows::basic_object_handle::native]


['Inherited from windows::basic_handle.]

[indexterm2 native..windows::basic_object_handle] 
(Deprecated: Use `native_handle()`.) Get the native handle representation. 


  native_type native();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle windows::basic_object_handle::native_handle]


['Inherited from windows::basic_handle.]

[indexterm2 native_handle..windows::basic_object_handle] 
Get the native handle representation. 


  native_handle_type native_handle();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type windows::basic_object_handle::native_handle_type]

[indexterm2 native_handle_type..windows::basic_object_handle] 
The native representation of a handle. 


  typedef ObjectHandleService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type windows::basic_object_handle::native_type]


['Inherited from windows::basic_handle.]

[indexterm2 native_type..windows::basic_object_handle] 
(Deprecated: Use native\_handle\_type.) The native representation of a handle. 


  typedef ObjectHandleService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ windows::basic_object_handle::operator=]

[indexterm2 operator=..windows::basic_object_handle] 
Move-assign a [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] from another. 


  basic_object_handle & operator=(
      basic_object_handle && other);


This assignment operator moves an object handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_object_handle(io_service&) constructor`. 




[endsect]



[section:service windows::basic_object_handle::service]


['Inherited from basic_io_object.]

[indexterm2 service..windows::basic_object_handle] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type windows::basic_object_handle::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..windows::basic_object_handle] 
The type of the service that will be used to provide I/O operations. 


  typedef ObjectHandleService service_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:wait windows::basic_object_handle::wait]

[indexterm2 wait..windows::basic_object_handle] 
Perform a blocking wait on the object handle. 


  void ``[link boost_asio.reference.windows__basic_object_handle.wait.overload1 wait]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.wait.overload1 more...]]``

  void ``[link boost_asio.reference.windows__basic_object_handle.wait.overload2 wait]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_object_handle.wait.overload2 more...]]``


[section:overload1 windows::basic_object_handle::wait (1 of 2 overloads)]


Perform a blocking wait on the object handle. 


  void wait();


This function is used to wait for the object handle to be set to the signalled state. This function blocks and does not return until the object handle has been set to the signalled state.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload2 windows::basic_object_handle::wait (2 of 2 overloads)]


Perform a blocking wait on the object handle. 


  void wait(
      boost::system::error_code & ec);


This function is used to wait for the object handle to be set to the signalled state. This function blocks and does not return until the object handle has been set to the signalled state.


[heading Parameters]
    

[variablelist
  
[[ec][Set to indicate what error occurred, if any. ]]

]




[endsect]


[endsect]


[endsect]

[section:windows__basic_random_access_handle windows::basic_random_access_handle]


Provides random-access handle functionality. 


  template<
      typename ``[link boost_asio.reference.RandomAccessHandleService RandomAccessHandleService]`` = random_access_handle_service>
  class basic_random_access_handle :
    public windows::basic_handle< RandomAccessHandleService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.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.windows__basic_random_access_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.async_read_some_at [*async_read_some_at]]]
    [Start an asynchronous read at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.async_write_some_at [*async_write_some_at]]]
    [Start an asynchronous write at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle [*basic_random_access_handle]]]
    [Construct a basic_random_access_handle without opening it. 

     Construct a basic_random_access_handle on an existing native handle. 

     Move-construct a basic_random_access_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_random_access_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.read_some_at [*read_some_at]]]
    [Read some data from the handle at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.write_some_at [*write_some_at]]]
    [Write some data to the handle at the specified offset. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_random_access_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_random_access_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_random_access_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] class template provides asynchronous and blocking random-access handle functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign windows::basic_random_access_handle::assign]

[indexterm2 assign..windows::basic_random_access_handle] 
Assign an existing native handle to the handle. 


  void ``[link boost_asio.reference.windows__basic_random_access_handle.assign.overload1 assign]``(
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_random_access_handle.assign.overload2 assign]``(
      const native_handle_type & handle,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.assign.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::assign (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Assign an existing native handle to the handle. 


  void assign(
      const native_handle_type & handle);



[endsect]



[section:overload2 windows::basic_random_access_handle::assign (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Assign an existing native handle to the handle. 


  boost::system::error_code assign(
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_read_some_at windows::basic_random_access_handle::async_read_some_at]

[indexterm2 async_read_some_at..windows::basic_random_access_handle] 
Start an asynchronous read at the specified offset. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some_at(
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read data from the random-access handle. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[offset][The offset at which the data will be read.]]

[[buffers][One or more buffers into which the data will be read. 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 read 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 read.
   ); 
``
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 read operation may not read all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read_at `async_read_at`]  function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   handle.async_read_some_at(42, boost::asio::buffer(data, size), handler);


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. 




[endsect]



[section:async_write_some_at windows::basic_random_access_handle::async_write_some_at]

[indexterm2 async_write_some_at..windows::basic_random_access_handle] 
Start an asynchronous write at the specified offset. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some_at(
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write data to the random-access handle. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[offset][The offset at which the data will be written.]]

[[buffers][One or more data buffers to be written to the handle. 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 write 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 written.
   ); 
``
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 write operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write_at `async_write_at`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   handle.async_write_some_at(42, boost::asio::buffer(data, size), handler);


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. 




[endsect]


[section:basic_random_access_handle windows::basic_random_access_handle::basic_random_access_handle]

[indexterm2 basic_random_access_handle..windows::basic_random_access_handle] 
Construct a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] without opening it. 


  explicit ``[link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle.overload1 basic_random_access_handle]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle.overload1 more...]]``


Construct a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] on an existing native handle. 


  ``[link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle.overload2 basic_random_access_handle]``(
      boost::asio::io_service & io_service,
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle.overload2 more...]]``


Move-construct a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] from another. 


  ``[link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle.overload3 basic_random_access_handle]``(
      basic_random_access_handle && other);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle.overload3 more...]]``


[section:overload1 windows::basic_random_access_handle::basic_random_access_handle (1 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] without opening it. 


  basic_random_access_handle(
      boost::asio::io_service & io_service);


This constructor creates a random-access handle without opening it. The handle needs to be opened before data can be written to or or read from it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the random-access handle will use to dispatch handlers for any asynchronous operations performed on the handle. ]]

]




[endsect]



[section:overload2 windows::basic_random_access_handle::basic_random_access_handle (2 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] on an existing native handle. 


  basic_random_access_handle(
      boost::asio::io_service & io_service,
      const native_handle_type & handle);


This constructor creates a random-access handle object to hold an existing native handle.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the random-access handle will use to dispatch handlers for any asynchronous operations performed on the handle.]]

[[handle][The new underlying handle implementation.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 windows::basic_random_access_handle::basic_random_access_handle (3 of 3 overloads)]


Move-construct a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] from another. 


  basic_random_access_handle(
      basic_random_access_handle && other);


This constructor moves a random-access handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_random_access_handle(io_service&)` constructor. 




[endsect]


[endsect]

[section:cancel windows::basic_random_access_handle::cancel]

[indexterm2 cancel..windows::basic_random_access_handle] 
Cancel all asynchronous operations associated with the handle. 


  void ``[link boost_asio.reference.windows__basic_random_access_handle.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_random_access_handle.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.cancel.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::cancel (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_random_access_handle::cancel (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_random_access_handle::close]

[indexterm2 close..windows::basic_random_access_handle] 
Close the handle. 


  void ``[link boost_asio.reference.windows__basic_random_access_handle.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_random_access_handle.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.close.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::close (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Close the handle. 


  void close();


This function is used to close the handle. 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 windows::basic_random_access_handle::close (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Close the handle. 


  boost::system::error_code close(
      boost::system::error_code & ec);


This function is used to close the handle. 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_implementation windows::basic_random_access_handle::get_implementation]

[indexterm2 get_implementation..windows::basic_random_access_handle] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.windows__basic_random_access_handle.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.windows__basic_random_access_handle.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.get_implementation.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 windows::basic_random_access_handle::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service windows::basic_random_access_handle::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..windows::basic_random_access_handle] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service windows::basic_random_access_handle::get_service]

[indexterm2 get_service..windows::basic_random_access_handle] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.windows__basic_random_access_handle.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.windows__basic_random_access_handle.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.get_service.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 windows::basic_random_access_handle::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation windows::basic_random_access_handle::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..windows::basic_random_access_handle] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type windows::basic_random_access_handle::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..windows::basic_random_access_handle] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::basic_random_access_handle::is_open]


['Inherited from windows::basic_handle.]

[indexterm2 is_open..windows::basic_random_access_handle] 
Determine whether the handle is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer windows::basic_random_access_handle::lowest_layer]

[indexterm2 lowest_layer..windows::basic_random_access_handle] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.windows__basic_random_access_handle.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.windows__basic_random_access_handle.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.lowest_layer.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::lowest_layer (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


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 [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] 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:overload2 windows::basic_random_access_handle::lowest_layer (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type windows::basic_random_access_handle::lowest_layer_type]


['Inherited from windows::basic_handle.]

[indexterm2 lowest_layer_type..windows::basic_random_access_handle] 
A [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] is always the lowest layer. 


  typedef basic_handle< RandomAccessHandleService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.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.windows__basic_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.basic_handle [*basic_handle]]]
    [Construct a basic_handle without opening it. 

     Construct a basic_handle on an existing native handle. 

     Move-construct a basic_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_handle from another. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle._basic_handle [*~basic_handle]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] class template provides the ability to wrap a Windows handle.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native windows::basic_random_access_handle::native]


['Inherited from windows::basic_handle.]

[indexterm2 native..windows::basic_random_access_handle] 
(Deprecated: Use `native_handle()`.) Get the native handle representation. 


  native_type native();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle windows::basic_random_access_handle::native_handle]


['Inherited from windows::basic_handle.]

[indexterm2 native_handle..windows::basic_random_access_handle] 
Get the native handle representation. 


  native_handle_type native_handle();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type windows::basic_random_access_handle::native_handle_type]

[indexterm2 native_handle_type..windows::basic_random_access_handle] 
The native representation of a handle. 


  typedef RandomAccessHandleService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type windows::basic_random_access_handle::native_type]

[indexterm2 native_type..windows::basic_random_access_handle] 
(Deprecated: Use native\_handle\_type.) The native representation of a handle. 


  typedef RandomAccessHandleService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ windows::basic_random_access_handle::operator=]

[indexterm2 operator=..windows::basic_random_access_handle] 
Move-assign a [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] from another. 


  basic_random_access_handle & operator=(
      basic_random_access_handle && other);


This assignment operator moves a random-access handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_random_access_handle(io_service&)` constructor. 




[endsect]


[section:read_some_at windows::basic_random_access_handle::read_some_at]

[indexterm2 read_some_at..windows::basic_random_access_handle] 
Read some data from the handle at the specified offset. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload1 read_some_at]``(
      boost::uint64_t offset,
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload2 read_some_at]``(
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.read_some_at.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::read_some_at (1 of 2 overloads)]


Read some data from the handle at the specified offset. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some_at(
      boost::uint64_t offset,
      const MutableBufferSequence & buffers);


This function is used to read data from the random-access handle. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[offset][The offset at which the data will be read.]]

[[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. 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_at `read_at`]  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: 

   handle.read_some_at(42, 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. 




[endsect]



[section:overload2 windows::basic_random_access_handle::read_some_at (2 of 2 overloads)]


Read some data from the handle at the specified offset. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some_at(
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);


This function is used to read data from the random-access handle. The function call will block until one or more bytes of data has been read successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[offset][The offset at which the data will be read.]]

[[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_at `read_at`]  function if you need to ensure that the requested amount of data is read before the blocking operation completes. 




[endsect]


[endsect]


[section:service windows::basic_random_access_handle::service]


['Inherited from basic_io_object.]

[indexterm2 service..windows::basic_random_access_handle] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type windows::basic_random_access_handle::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..windows::basic_random_access_handle] 
The type of the service that will be used to provide I/O operations. 


  typedef RandomAccessHandleService service_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:write_some_at windows::basic_random_access_handle::write_some_at]

[indexterm2 write_some_at..windows::basic_random_access_handle] 
Write some data to the handle at the specified offset. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload1 write_some_at]``(
      boost::uint64_t offset,
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload2 write_some_at]``(
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_random_access_handle.write_some_at.overload2 more...]]``


[section:overload1 windows::basic_random_access_handle::write_some_at (1 of 2 overloads)]


Write some data to the handle at the specified offset. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some_at(
      boost::uint64_t offset,
      const ConstBufferSequence & buffers);


This function is used to write data to the random-access handle. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[offset][The offset at which the data will be written.]]

[[buffers][One or more data buffers to be written to the handle.]]

]


[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.]]

]


[heading Remarks]
      
The write\_some\_at operation may not write all of the data. Consider using the [link boost_asio.reference.write_at `write_at`]  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: 

   handle.write_some_at(42, 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. 




[endsect]



[section:overload2 windows::basic_random_access_handle::write_some_at (2 of 2 overloads)]


Write some data to the handle at the specified offset. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some_at(
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);


This function is used to write data to the random-access handle. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[offset][The offset at which the data will be written.]]

[[buffers][One or more data buffers to be written to the handle.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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_at `write_at`]  function if you need to ensure that all data is written before the blocking operation completes. 




[endsect]


[endsect]


[endsect]

[section:windows__basic_stream_handle windows::basic_stream_handle]


Provides stream-oriented handle functionality. 


  template<
      typename ``[link boost_asio.reference.StreamHandleService StreamHandleService]`` = stream_handle_service>
  class basic_stream_handle :
    public windows::basic_handle< StreamHandleService >


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.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.windows__basic_stream_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle [*basic_stream_handle]]]
    [Construct a basic_stream_handle without opening it. 

     Construct a basic_stream_handle on an existing native handle. 

     Move-construct a basic_stream_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.read_some [*read_some]]]
    [Read some data from the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.write_some [*write_some]]]
    [Write some data to the handle. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_stream_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_stream_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_stream_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] class template provides asynchronous and blocking stream-oriented handle functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.




[heading Requirements]

[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]

[section:assign windows::basic_stream_handle::assign]

[indexterm2 assign..windows::basic_stream_handle] 
Assign an existing native handle to the handle. 


  void ``[link boost_asio.reference.windows__basic_stream_handle.assign.overload1 assign]``(
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.assign.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_stream_handle.assign.overload2 assign]``(
      const native_handle_type & handle,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.assign.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::assign (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Assign an existing native handle to the handle. 


  void assign(
      const native_handle_type & handle);



[endsect]



[section:overload2 windows::basic_stream_handle::assign (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Assign an existing native handle to the handle. 


  boost::system::error_code assign(
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]


[endsect]


[section:async_read_some windows::basic_stream_handle::async_read_some]

[indexterm2 async_read_some..windows::basic_stream_handle] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      const MutableBufferSequence & buffers,
      ReadHandler handler);


This function is used to asynchronously read data from the stream handle. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more buffers into which the data will be read. 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 read 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 read.
   ); 
``
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 read operation may not read all of the requested number of bytes. Consider using the [link boost_asio.reference.async_read `async_read`]  function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.


[heading Example]
  
To read into a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   handle.async_read_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]



[section:async_write_some windows::basic_stream_handle::async_write_some]

[indexterm2 async_write_some..windows::basic_stream_handle] 
Start an asynchronous write. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some(
      const ConstBufferSequence & buffers,
      WriteHandler handler);


This function is used to asynchronously write data to the stream handle. The function call always returns immediately.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the handle. 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 write 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 written.
   ); 
``
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 write operation may not transmit all of the data to the peer. Consider using the [link boost_asio.reference.async_write `async_write`]  function if you need to ensure that all data is written before the asynchronous operation completes.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   handle.async_write_some(boost::asio::buffer(data, size), handler);


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. 




[endsect]


[section:basic_stream_handle windows::basic_stream_handle::basic_stream_handle]

[indexterm2 basic_stream_handle..windows::basic_stream_handle] 
Construct a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] without opening it. 


  explicit ``[link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle.overload1 basic_stream_handle]``(
      boost::asio::io_service & io_service);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle.overload1 more...]]``


Construct a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] on an existing native handle. 


  ``[link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle.overload2 basic_stream_handle]``(
      boost::asio::io_service & io_service,
      const native_handle_type & handle);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle.overload2 more...]]``


Move-construct a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] from another. 


  ``[link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle.overload3 basic_stream_handle]``(
      basic_stream_handle && other);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle.overload3 more...]]``


[section:overload1 windows::basic_stream_handle::basic_stream_handle (1 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] without opening it. 


  basic_stream_handle(
      boost::asio::io_service & io_service);


This constructor creates a stream handle without opening it. The handle needs to be opened and then connected or accepted before data can be sent or received on it.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the stream handle will use to dispatch handlers for any asynchronous operations performed on the handle. ]]

]




[endsect]



[section:overload2 windows::basic_stream_handle::basic_stream_handle (2 of 3 overloads)]


Construct a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] on an existing native handle. 


  basic_stream_handle(
      boost::asio::io_service & io_service,
      const native_handle_type & handle);


This constructor creates a stream handle object to hold an existing native handle.


[heading Parameters]
    

[variablelist
  
[[io_service][The [link boost_asio.reference.io_service `io_service`] object that the stream handle will use to dispatch handlers for any asynchronous operations performed on the handle.]]

[[handle][The new underlying handle implementation.]]

]


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload3 windows::basic_stream_handle::basic_stream_handle (3 of 3 overloads)]


Move-construct a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] from another. 


  basic_stream_handle(
      basic_stream_handle && other);


This constructor moves a stream handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_handle(io_service&) constructor`. 




[endsect]


[endsect]

[section:cancel windows::basic_stream_handle::cancel]

[indexterm2 cancel..windows::basic_stream_handle] 
Cancel all asynchronous operations associated with the handle. 


  void ``[link boost_asio.reference.windows__basic_stream_handle.cancel.overload1 cancel]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.cancel.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_stream_handle.cancel.overload2 cancel]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.cancel.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::cancel (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_stream_handle::cancel (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Cancel all asynchronous operations associated with the handle. 


  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 windows::basic_stream_handle::close]

[indexterm2 close..windows::basic_stream_handle] 
Close the handle. 


  void ``[link boost_asio.reference.windows__basic_stream_handle.close.overload1 close]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.close.overload1 more...]]``

  boost::system::error_code ``[link boost_asio.reference.windows__basic_stream_handle.close.overload2 close]``(
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.close.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::close (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


Close the handle. 


  void close();


This function is used to close the handle. 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 windows::basic_stream_handle::close (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Close the handle. 


  boost::system::error_code close(
      boost::system::error_code & ec);


This function is used to close the handle. 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_implementation windows::basic_stream_handle::get_implementation]

[indexterm2 get_implementation..windows::basic_stream_handle] 
Get the underlying implementation of the I/O object. 


  implementation_type & ``[link boost_asio.reference.windows__basic_stream_handle.get_implementation.overload1 get_implementation]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.get_implementation.overload1 more...]]``

  const implementation_type & ``[link boost_asio.reference.windows__basic_stream_handle.get_implementation.overload2 get_implementation]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.get_implementation.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::get_implementation (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  implementation_type & get_implementation();



[endsect]



[section:overload2 windows::basic_stream_handle::get_implementation (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the underlying implementation of the I/O object. 


  const implementation_type & get_implementation() const;



[endsect]


[endsect]


[section:get_io_service windows::basic_stream_handle::get_io_service]


['Inherited from basic_io_object.]

[indexterm2 get_io_service..windows::basic_stream_handle] 
Get the [link boost_asio.reference.io_service `io_service`] associated with the object. 


  boost::asio::io_service & get_io_service();


This function may be used to obtain the [link boost_asio.reference.io_service `io_service`] object that the I/O object uses to dispatch handlers for asynchronous operations.


[heading Return Value]
      
A reference to the [link boost_asio.reference.io_service `io_service`] object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller. 




[endsect]


[section:get_service windows::basic_stream_handle::get_service]

[indexterm2 get_service..windows::basic_stream_handle] 
Get the service associated with the I/O object. 


  service_type & ``[link boost_asio.reference.windows__basic_stream_handle.get_service.overload1 get_service]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.get_service.overload1 more...]]``

  const service_type & ``[link boost_asio.reference.windows__basic_stream_handle.get_service.overload2 get_service]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.get_service.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::get_service (1 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  service_type & get_service();



[endsect]



[section:overload2 windows::basic_stream_handle::get_service (2 of 2 overloads)]


['Inherited from basic_io_object.]


Get the service associated with the I/O object. 


  const service_type & get_service() const;



[endsect]


[endsect]


[section:implementation windows::basic_stream_handle::implementation]


['Inherited from basic_io_object.]

[indexterm2 implementation..windows::basic_stream_handle] 
(Deprecated: Use `get_implementation()`.) The underlying implementation of the I/O object. 


  implementation_type implementation;



[endsect]



[section:implementation_type windows::basic_stream_handle::implementation_type]


['Inherited from basic_io_object.]

[indexterm2 implementation_type..windows::basic_stream_handle] 
The underlying implementation type of I/O object. 


  typedef service_type::implementation_type implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::basic_stream_handle::is_open]


['Inherited from windows::basic_handle.]

[indexterm2 is_open..windows::basic_stream_handle] 
Determine whether the handle is open. 


  bool is_open() const;



[endsect]


[section:lowest_layer windows::basic_stream_handle::lowest_layer]

[indexterm2 lowest_layer..windows::basic_stream_handle] 
Get a reference to the lowest layer. 


  lowest_layer_type & ``[link boost_asio.reference.windows__basic_stream_handle.lowest_layer.overload1 lowest_layer]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.lowest_layer.overload1 more...]]``


Get a const reference to the lowest layer. 


  const lowest_layer_type & ``[link boost_asio.reference.windows__basic_stream_handle.lowest_layer.overload2 lowest_layer]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.lowest_layer.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::lowest_layer (1 of 2 overloads)]


['Inherited from windows::basic_handle.]


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 [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] 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:overload2 windows::basic_stream_handle::lowest_layer (2 of 2 overloads)]


['Inherited from windows::basic_handle.]


Get a const reference to the lowest layer. 


  const lowest_layer_type & lowest_layer() const;


This function returns a const reference to the lowest layer in a stack of layers. Since a [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] cannot contain any further layers, it simply returns a reference to itself.


[heading Return Value]
      
A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller. 




[endsect]


[endsect]


[section:lowest_layer_type windows::basic_stream_handle::lowest_layer_type]


['Inherited from windows::basic_handle.]

[indexterm2 lowest_layer_type..windows::basic_stream_handle] 
A [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] is always the lowest layer. 


  typedef basic_handle< StreamHandleService > lowest_layer_type;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_handle.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.windows__basic_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.basic_handle [*basic_handle]]]
    [Construct a basic_handle without opening it. 

     Construct a basic_handle on an existing native handle. 

     Move-construct a basic_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_handle from another. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_handle._basic_handle [*~basic_handle]]]
    [Protected destructor to prevent deletion through this type. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_handle `windows::basic_handle`] class template provides the ability to wrap a Windows handle.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native windows::basic_stream_handle::native]


['Inherited from windows::basic_handle.]

[indexterm2 native..windows::basic_stream_handle] 
(Deprecated: Use `native_handle()`.) Get the native handle representation. 


  native_type native();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle windows::basic_stream_handle::native_handle]


['Inherited from windows::basic_handle.]

[indexterm2 native_handle..windows::basic_stream_handle] 
Get the native handle representation. 


  native_handle_type native_handle();


This function may be used to obtain the underlying representation of the handle. This is intended to allow access to native handle functionality that is not otherwise provided. 


[endsect]



[section:native_handle_type windows::basic_stream_handle::native_handle_type]

[indexterm2 native_handle_type..windows::basic_stream_handle] 
The native representation of a handle. 


  typedef StreamHandleService::native_handle_type native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type windows::basic_stream_handle::native_type]

[indexterm2 native_type..windows::basic_stream_handle] 
(Deprecated: Use native\_handle\_type.) The native representation of a handle. 


  typedef StreamHandleService::native_handle_type native_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:operator_eq_ windows::basic_stream_handle::operator=]

[indexterm2 operator=..windows::basic_stream_handle] 
Move-assign a [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] from another. 


  basic_stream_handle & operator=(
      basic_stream_handle && other);


This assignment operator moves a stream handle from one object to another.


[heading Parameters]
    

[variablelist
  
[[other][The other [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] object from which the move will occur.]]

]


[heading Remarks]
      
Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_handle(io_service&) constructor`. 




[endsect]


[section:read_some windows::basic_stream_handle::read_some]

[indexterm2 read_some..windows::basic_stream_handle] 
Read some data from the handle. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_stream_handle.read_some.overload1 read_some]``(
      const MutableBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.read_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_stream_handle.read_some.overload2 read_some]``(
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.read_some.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::read_some (1 of 2 overloads)]


Read some data from the handle. 


  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 handle. 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.


[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.]]

]


[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: 

   handle.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. 




[endsect]



[section:overload2 windows::basic_stream_handle::read_some (2 of 2 overloads)]


Read some data from the handle. 


  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 read data from the stream handle. 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.]]

]


[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:service windows::basic_stream_handle::service]


['Inherited from basic_io_object.]

[indexterm2 service..windows::basic_stream_handle] 
(Deprecated: Use `get_service()`.) The service associated with the I/O object. 


  service_type & service;



[heading Remarks]
      
Available only for services that do not support movability. 




[endsect]



[section:service_type windows::basic_stream_handle::service_type]


['Inherited from basic_io_object.]

[indexterm2 service_type..windows::basic_stream_handle] 
The type of the service that will be used to provide I/O operations. 


  typedef StreamHandleService service_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/basic_stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:write_some windows::basic_stream_handle::write_some]

[indexterm2 write_some..windows::basic_stream_handle] 
Write some data to the handle. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_stream_handle.write_some.overload1 write_some]``(
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.write_some.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.windows__basic_stream_handle.write_some.overload2 write_some]``(
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__basic_stream_handle.write_some.overload2 more...]]``


[section:overload1 windows::basic_stream_handle::write_some (1 of 2 overloads)]


Write some data to the handle. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      const ConstBufferSequence & buffers);


This function is used to write data to the stream handle. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the handle.]]

]


[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.]]

]


[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: 

   handle.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. 




[endsect]



[section:overload2 windows::basic_stream_handle::write_some (2 of 2 overloads)]


Write some data to the handle. 


  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 write data to the stream handle. The function call will block until one or more bytes of the data has been written successfully, or until an error occurs.


[heading Parameters]
    

[variablelist
  
[[buffers][One or more data buffers to be written to the handle.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[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]


[endsect]


[section:windows__object_handle windows::object_handle]

[indexterm1 windows::object_handle] 
Typedef for the typical usage of an object handle. 


  typedef basic_object_handle object_handle;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_object_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_object_handle.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.windows__basic_object_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.async_wait [*async_wait]]]
    [Start an asynchronous wait on the object handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.basic_object_handle [*basic_object_handle]]]
    [Construct a basic_object_handle without opening it. 

     Construct a basic_object_handle on an existing native handle. 

     Move-construct a basic_object_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_object_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.wait [*wait]]]
    [Perform a blocking wait on the object handle. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_object_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_object_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_object_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_object_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_object_handle `windows::basic_object_handle`] class template provides asynchronous and blocking object-oriented handle functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/windows/object_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:windows__object_handle_service windows::object_handle_service]


Default service implementation for an object handle. 


  class object_handle_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__object_handle_service.implementation_type [*implementation_type]]]
    [The type of an object handle implementation. ]
  
  ]

  [

    [[link boost_asio.reference.windows__object_handle_service.native_handle_type [*native_handle_type]]]
    [The native handle type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__object_handle_service.assign [*assign]]]
    [Assign an existing native handle to an object handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.async_wait [*async_wait]]]
    [Start an asynchronous wait. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.close [*close]]]
    [Close an object handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.construct [*construct]]]
    [Construct a new object handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.destroy [*destroy]]]
    [Destroy an object handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.move_assign [*move_assign]]]
    [Move-assign from another object handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.move_construct [*move_construct]]]
    [Move-construct a new object handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.native_handle [*native_handle]]]
    [Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.object_handle_service [*object_handle_service]]]
    [Construct a new object handle service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.windows__object_handle_service.wait [*wait]]]
    []
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__object_handle_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/windows/object_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign windows::object_handle_service::assign]

[indexterm2 assign..windows::object_handle_service] 
Assign an existing native handle to an object handle. 


  boost::system::error_code assign(
      implementation_type & impl,
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]



[section:async_wait windows::object_handle_service::async_wait]

[indexterm2 async_wait..windows::object_handle_service] 
Start an asynchronous wait. 


  template<
      typename ``[link boost_asio.reference.WaitHandler WaitHandler]``>
  void async_wait(
      implementation_type & impl,
      WaitHandler handler);



[endsect]



[section:cancel windows::object_handle_service::cancel]

[indexterm2 cancel..windows::object_handle_service] 
Cancel all asynchronous operations associated with the handle. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close windows::object_handle_service::close]

[indexterm2 close..windows::object_handle_service] 
Close an object handle implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct windows::object_handle_service::construct]

[indexterm2 construct..windows::object_handle_service] 
Construct a new object handle implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy windows::object_handle_service::destroy]

[indexterm2 destroy..windows::object_handle_service] 
Destroy an object handle implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:get_io_service windows::object_handle_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..windows::object_handle_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id windows::object_handle_service::id]

[indexterm2 id..windows::object_handle_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type windows::object_handle_service::implementation_type]

[indexterm2 implementation_type..windows::object_handle_service] 
The type of an object handle implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/object_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::object_handle_service::is_open]

[indexterm2 is_open..windows::object_handle_service] 
Determine whether the handle is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:move_assign windows::object_handle_service::move_assign]

[indexterm2 move_assign..windows::object_handle_service] 
Move-assign from another object handle implementation. 


  void move_assign(
      implementation_type & impl,
      object_handle_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct windows::object_handle_service::move_construct]

[indexterm2 move_construct..windows::object_handle_service] 
Move-construct a new object handle implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native_handle windows::object_handle_service::native_handle]

[indexterm2 native_handle..windows::object_handle_service] 
Get the native handle implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type windows::object_handle_service::native_handle_type]

[indexterm2 native_handle_type..windows::object_handle_service] 
The native handle type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/object_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:object_handle_service windows::object_handle_service::object_handle_service]

[indexterm2 object_handle_service..windows::object_handle_service] 
Construct a new object handle service for the specified [link boost_asio.reference.io_service `io_service`]. 


  object_handle_service(
      boost::asio::io_service & io_service);



[endsect]



[section:wait windows::object_handle_service::wait]

[indexterm2 wait..windows::object_handle_service] 

  void wait(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[endsect]

[section:windows__overlapped_ptr windows::overlapped_ptr]


Wraps a handler to create an OVERLAPPED object for use with overlapped I/O. 


  class overlapped_ptr :
    noncopyable


[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__overlapped_ptr.complete [*complete]]]
    [Post completion notification for overlapped operation. Releases ownership. ]
  ]
  
  [
    [[link boost_asio.reference.windows__overlapped_ptr.get [*get]]]
    [Get the contained OVERLAPPED object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__overlapped_ptr.overlapped_ptr [*overlapped_ptr]]]
    [Construct an empty overlapped_ptr. 

     Construct an overlapped_ptr to contain the specified handler. ]
  ]
  
  [
    [[link boost_asio.reference.windows__overlapped_ptr.release [*release]]]
    [Release ownership of the OVERLAPPED object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__overlapped_ptr.reset [*reset]]]
    [Reset to empty. 

     Reset to contain the specified handler, freeing any current OVERLAPPED object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__overlapped_ptr._overlapped_ptr [*~overlapped_ptr]]]
    [Destructor automatically frees the OVERLAPPED object unless released. ]
  ]
  
]

A special-purpose smart pointer used to wrap an application handler so that it can be passed as the LPOVERLAPPED argument to overlapped I/O functions.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 



[heading Requirements]

[*Header: ][^boost/asio/windows/overlapped_ptr.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:complete windows::overlapped_ptr::complete]

[indexterm2 complete..windows::overlapped_ptr] 
Post completion notification for overlapped operation. Releases ownership. 


  void complete(
      const boost::system::error_code & ec,
      std::size_t bytes_transferred);



[endsect]


[section:get windows::overlapped_ptr::get]

[indexterm2 get..windows::overlapped_ptr] 
Get the contained OVERLAPPED object. 


  OVERLAPPED * ``[link boost_asio.reference.windows__overlapped_ptr.get.overload1 get]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__overlapped_ptr.get.overload1 more...]]``

  const OVERLAPPED * ``[link boost_asio.reference.windows__overlapped_ptr.get.overload2 get]``() const;
  ``  [''''&raquo;''' [link boost_asio.reference.windows__overlapped_ptr.get.overload2 more...]]``


[section:overload1 windows::overlapped_ptr::get (1 of 2 overloads)]


Get the contained OVERLAPPED object. 


  OVERLAPPED * get();



[endsect]



[section:overload2 windows::overlapped_ptr::get (2 of 2 overloads)]


Get the contained OVERLAPPED object. 


  const OVERLAPPED * get() const;



[endsect]


[endsect]

[section:overlapped_ptr windows::overlapped_ptr::overlapped_ptr]

[indexterm2 overlapped_ptr..windows::overlapped_ptr] 
Construct an empty [link boost_asio.reference.windows__overlapped_ptr `windows::overlapped_ptr`]. 


  ``[link boost_asio.reference.windows__overlapped_ptr.overlapped_ptr.overload1 overlapped_ptr]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__overlapped_ptr.overlapped_ptr.overload1 more...]]``


Construct an [link boost_asio.reference.windows__overlapped_ptr `windows::overlapped_ptr`] to contain the specified handler. 


  template<
      typename ``[link boost_asio.reference.Handler Handler]``>
  explicit ``[link boost_asio.reference.windows__overlapped_ptr.overlapped_ptr.overload2 overlapped_ptr]``(
      boost::asio::io_service & io_service,
      Handler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__overlapped_ptr.overlapped_ptr.overload2 more...]]``


[section:overload1 windows::overlapped_ptr::overlapped_ptr (1 of 2 overloads)]


Construct an empty [link boost_asio.reference.windows__overlapped_ptr `windows::overlapped_ptr`]. 


  overlapped_ptr();



[endsect]



[section:overload2 windows::overlapped_ptr::overlapped_ptr (2 of 2 overloads)]


Construct an [link boost_asio.reference.windows__overlapped_ptr `windows::overlapped_ptr`] to contain the specified handler. 


  template<
      typename ``[link boost_asio.reference.Handler Handler]``>
  overlapped_ptr(
      boost::asio::io_service & io_service,
      Handler handler);



[endsect]


[endsect]


[section:release windows::overlapped_ptr::release]

[indexterm2 release..windows::overlapped_ptr] 
Release ownership of the OVERLAPPED object. 


  OVERLAPPED * release();



[endsect]


[section:reset windows::overlapped_ptr::reset]

[indexterm2 reset..windows::overlapped_ptr] 
Reset to empty. 


  void ``[link boost_asio.reference.windows__overlapped_ptr.reset.overload1 reset]``();
  ``  [''''&raquo;''' [link boost_asio.reference.windows__overlapped_ptr.reset.overload1 more...]]``


Reset to contain the specified handler, freeing any current OVERLAPPED object. 


  template<
      typename ``[link boost_asio.reference.Handler Handler]``>
  void ``[link boost_asio.reference.windows__overlapped_ptr.reset.overload2 reset]``(
      boost::asio::io_service & io_service,
      Handler handler);
  ``  [''''&raquo;''' [link boost_asio.reference.windows__overlapped_ptr.reset.overload2 more...]]``


[section:overload1 windows::overlapped_ptr::reset (1 of 2 overloads)]


Reset to empty. 


  void reset();



[endsect]



[section:overload2 windows::overlapped_ptr::reset (2 of 2 overloads)]


Reset to contain the specified handler, freeing any current OVERLAPPED object. 


  template<
      typename ``[link boost_asio.reference.Handler Handler]``>
  void reset(
      boost::asio::io_service & io_service,
      Handler handler);



[endsect]


[endsect]


[section:_overlapped_ptr windows::overlapped_ptr::~overlapped_ptr]

[indexterm2 ~overlapped_ptr..windows::overlapped_ptr] 
Destructor automatically frees the OVERLAPPED object unless released. 


  ~overlapped_ptr();



[endsect]



[endsect]


[section:windows__random_access_handle windows::random_access_handle]

[indexterm1 windows::random_access_handle] 
Typedef for the typical usage of a random-access handle. 


  typedef basic_random_access_handle random_access_handle;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_random_access_handle.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.windows__basic_random_access_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.async_read_some_at [*async_read_some_at]]]
    [Start an asynchronous read at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.async_write_some_at [*async_write_some_at]]]
    [Start an asynchronous write at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.basic_random_access_handle [*basic_random_access_handle]]]
    [Construct a basic_random_access_handle without opening it. 

     Construct a basic_random_access_handle on an existing native handle. 

     Move-construct a basic_random_access_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_random_access_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.read_some_at [*read_some_at]]]
    [Read some data from the handle at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.write_some_at [*write_some_at]]]
    [Write some data to the handle at the specified offset. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_random_access_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_random_access_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_random_access_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_random_access_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_random_access_handle `windows::basic_random_access_handle`] class template provides asynchronous and blocking random-access handle functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe. 




[heading Requirements]

[*Header: ][^boost/asio/windows/random_access_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:windows__random_access_handle_service windows::random_access_handle_service]


Default service implementation for a random-access handle. 


  class random_access_handle_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__random_access_handle_service.implementation_type [*implementation_type]]]
    [The type of a random-access handle implementation. ]
  
  ]

  [

    [[link boost_asio.reference.windows__random_access_handle_service.native_handle_type [*native_handle_type]]]
    [The native handle type. ]
  
  ]

  [

    [[link boost_asio.reference.windows__random_access_handle_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native handle type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__random_access_handle_service.assign [*assign]]]
    [Assign an existing native handle to a random-access handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.async_read_some_at [*async_read_some_at]]]
    [Start an asynchronous read at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.async_write_some_at [*async_write_some_at]]]
    [Start an asynchronous write at the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.close [*close]]]
    [Close a random-access handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.construct [*construct]]]
    [Construct a new random-access handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.destroy [*destroy]]]
    [Destroy a random-access handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.move_assign [*move_assign]]]
    [Move-assign from another random-access handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.move_construct [*move_construct]]]
    [Move-construct a new random-access handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.native_handle [*native_handle]]]
    [Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.random_access_handle_service [*random_access_handle_service]]]
    [Construct a new random-access handle service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.read_some_at [*read_some_at]]]
    [Read some data from the specified offset. ]
  ]
  
  [
    [[link boost_asio.reference.windows__random_access_handle_service.write_some_at [*write_some_at]]]
    [Write the given data at the specified offset. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__random_access_handle_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign windows::random_access_handle_service::assign]

[indexterm2 assign..windows::random_access_handle_service] 
Assign an existing native handle to a random-access handle. 


  boost::system::error_code assign(
      implementation_type & impl,
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]



[section:async_read_some_at windows::random_access_handle_service::async_read_some_at]

[indexterm2 async_read_some_at..windows::random_access_handle_service] 
Start an asynchronous read at the specified offset. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some_at(
      implementation_type & impl,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some_at windows::random_access_handle_service::async_write_some_at]

[indexterm2 async_write_some_at..windows::random_access_handle_service] 
Start an asynchronous write at the specified offset. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename ``[link boost_asio.reference.WriteHandler WriteHandler]``>
  void async_write_some_at(
      implementation_type & impl,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      WriteHandler handler);



[endsect]



[section:cancel windows::random_access_handle_service::cancel]

[indexterm2 cancel..windows::random_access_handle_service] 
Cancel all asynchronous operations associated with the handle. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close windows::random_access_handle_service::close]

[indexterm2 close..windows::random_access_handle_service] 
Close a random-access handle implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct windows::random_access_handle_service::construct]

[indexterm2 construct..windows::random_access_handle_service] 
Construct a new random-access handle implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy windows::random_access_handle_service::destroy]

[indexterm2 destroy..windows::random_access_handle_service] 
Destroy a random-access handle implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:get_io_service windows::random_access_handle_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..windows::random_access_handle_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id windows::random_access_handle_service::id]

[indexterm2 id..windows::random_access_handle_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type windows::random_access_handle_service::implementation_type]

[indexterm2 implementation_type..windows::random_access_handle_service] 
The type of a random-access handle implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::random_access_handle_service::is_open]

[indexterm2 is_open..windows::random_access_handle_service] 
Determine whether the handle is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:move_assign windows::random_access_handle_service::move_assign]

[indexterm2 move_assign..windows::random_access_handle_service] 
Move-assign from another random-access handle implementation. 


  void move_assign(
      implementation_type & impl,
      random_access_handle_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct windows::random_access_handle_service::move_construct]

[indexterm2 move_construct..windows::random_access_handle_service] 
Move-construct a new random-access handle implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native windows::random_access_handle_service::native]

[indexterm2 native..windows::random_access_handle_service] 
(Deprecated: Use `native_handle()`.) Get the native handle implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle windows::random_access_handle_service::native_handle]

[indexterm2 native_handle..windows::random_access_handle_service] 
Get the native handle implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type windows::random_access_handle_service::native_handle_type]

[indexterm2 native_handle_type..windows::random_access_handle_service] 
The native handle type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type windows::random_access_handle_service::native_type]

[indexterm2 native_type..windows::random_access_handle_service] 
(Deprecated: Use native\_handle\_type.) The native handle type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/random_access_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:random_access_handle_service windows::random_access_handle_service::random_access_handle_service]

[indexterm2 random_access_handle_service..windows::random_access_handle_service] 
Construct a new random-access handle service for the specified [link boost_asio.reference.io_service `io_service`]. 


  random_access_handle_service(
      boost::asio::io_service & io_service);



[endsect]



[section:read_some_at windows::random_access_handle_service::read_some_at]

[indexterm2 read_some_at..windows::random_access_handle_service] 
Read some data from the specified offset. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``>
  std::size_t read_some_at(
      implementation_type & impl,
      boost::uint64_t offset,
      const MutableBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]



[section:write_some_at windows::random_access_handle_service::write_some_at]

[indexterm2 write_some_at..windows::random_access_handle_service] 
Write the given data at the specified offset. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some_at(
      implementation_type & impl,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]



[endsect]


[section:windows__stream_handle windows::stream_handle]

[indexterm1 windows::stream_handle] 
Typedef for the typical usage of a stream-oriented handle. 


  typedef basic_stream_handle stream_handle;


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.implementation_type [*implementation_type]]]
    [The underlying implementation type of I/O object. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.lowest_layer_type [*lowest_layer_type]]]
    [A basic_handle is always the lowest layer. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.native_handle_type [*native_handle_type]]]
    [The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native representation of a handle. ]
  
  ]

  [

    [[link boost_asio.reference.windows__basic_stream_handle.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.windows__basic_stream_handle.assign [*assign]]]
    [Assign an existing native handle to the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.basic_stream_handle [*basic_stream_handle]]]
    [Construct a basic_stream_handle without opening it. 

     Construct a basic_stream_handle on an existing native handle. 

     Move-construct a basic_stream_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.close [*close]]]
    [Close the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.get_io_service [*get_io_service]]]
    [Get the io_service associated with the object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.lowest_layer [*lowest_layer]]]
    [Get a reference to the lowest layer. 

     Get a const reference to the lowest layer. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.native_handle [*native_handle]]]
    [Get the native handle representation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.operator_eq_ [*operator=]]]
    [Move-assign a basic_stream_handle from another. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.read_some [*read_some]]]
    [Read some data from the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.write_some [*write_some]]]
    [Write some data to the handle. ]
  ]
  
]

[heading Protected Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_stream_handle.get_implementation [*get_implementation]]]
    [Get the underlying implementation of the I/O object. ]
  ]
  
  [
    [[link boost_asio.reference.windows__basic_stream_handle.get_service [*get_service]]]
    [Get the service associated with the I/O object. ]
  ]
  
]

[heading Protected Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__basic_stream_handle.implementation [*implementation]]]
    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
  ]

  [
    [[link boost_asio.reference.windows__basic_stream_handle.service [*service]]]
    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
  ]

]

The [link boost_asio.reference.windows__basic_stream_handle `windows::basic_stream_handle`] class template provides asynchronous and blocking stream-oriented handle functionality.


[heading Thread Safety]
  
[*Distinct] [*objects:] Safe.

[*Shared] [*objects:] Unsafe.





[heading Requirements]

[*Header: ][^boost/asio/windows/stream_handle.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]


[section:windows__stream_handle_service windows::stream_handle_service]


Default service implementation for a stream handle. 


  class stream_handle_service :
    public io_service::service


[heading Types]
[table
  [[Name][Description]]

  [

    [[link boost_asio.reference.windows__stream_handle_service.implementation_type [*implementation_type]]]
    [The type of a stream handle implementation. ]
  
  ]

  [

    [[link boost_asio.reference.windows__stream_handle_service.native_handle_type [*native_handle_type]]]
    [The native handle type. ]
  
  ]

  [

    [[link boost_asio.reference.windows__stream_handle_service.native_type [*native_type]]]
    [(Deprecated: Use native_handle_type.) The native handle type. ]
  
  ]

]

[heading Member Functions]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__stream_handle_service.assign [*assign]]]
    [Assign an existing native handle to a stream handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.async_read_some [*async_read_some]]]
    [Start an asynchronous read. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.async_write_some [*async_write_some]]]
    [Start an asynchronous write. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.cancel [*cancel]]]
    [Cancel all asynchronous operations associated with the handle. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.close [*close]]]
    [Close a stream handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.construct [*construct]]]
    [Construct a new stream handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.destroy [*destroy]]]
    [Destroy a stream handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.get_io_service [*get_io_service]]]
    [Get the io_service object that owns the service. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.is_open [*is_open]]]
    [Determine whether the handle is open. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.move_assign [*move_assign]]]
    [Move-assign from another stream handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.move_construct [*move_construct]]]
    [Move-construct a new stream handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.native [*native]]]
    [(Deprecated: Use native_handle().) Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.native_handle [*native_handle]]]
    [Get the native handle implementation. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.read_some [*read_some]]]
    [Read some data from the stream. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.stream_handle_service [*stream_handle_service]]]
    [Construct a new stream handle service for the specified io_service. ]
  ]
  
  [
    [[link boost_asio.reference.windows__stream_handle_service.write_some [*write_some]]]
    [Write the given data to the stream. ]
  ]
  
]

[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.windows__stream_handle_service.id [*id]]]
    [The unique service identifier. ]
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/windows/stream_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:assign windows::stream_handle_service::assign]

[indexterm2 assign..windows::stream_handle_service] 
Assign an existing native handle to a stream handle. 


  boost::system::error_code assign(
      implementation_type & impl,
      const native_handle_type & handle,
      boost::system::error_code & ec);



[endsect]



[section:async_read_some windows::stream_handle_service::async_read_some]

[indexterm2 async_read_some..windows::stream_handle_service] 
Start an asynchronous read. 


  template<
      typename ``[link boost_asio.reference.MutableBufferSequence MutableBufferSequence]``,
      typename ``[link boost_asio.reference.ReadHandler ReadHandler]``>
  void async_read_some(
      implementation_type & impl,
      const MutableBufferSequence & buffers,
      ReadHandler handler);



[endsect]



[section:async_write_some windows::stream_handle_service::async_write_some]

[indexterm2 async_write_some..windows::stream_handle_service] 
Start an asynchronous write. 


  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 handler);



[endsect]



[section:cancel windows::stream_handle_service::cancel]

[indexterm2 cancel..windows::stream_handle_service] 
Cancel all asynchronous operations associated with the handle. 


  boost::system::error_code cancel(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:close windows::stream_handle_service::close]

[indexterm2 close..windows::stream_handle_service] 
Close a stream handle implementation. 


  boost::system::error_code close(
      implementation_type & impl,
      boost::system::error_code & ec);



[endsect]



[section:construct windows::stream_handle_service::construct]

[indexterm2 construct..windows::stream_handle_service] 
Construct a new stream handle implementation. 


  void construct(
      implementation_type & impl);



[endsect]



[section:destroy windows::stream_handle_service::destroy]

[indexterm2 destroy..windows::stream_handle_service] 
Destroy a stream handle implementation. 


  void destroy(
      implementation_type & impl);



[endsect]



[section:get_io_service windows::stream_handle_service::get_io_service]


['Inherited from io_service.]

[indexterm2 get_io_service..windows::stream_handle_service] 
Get the [link boost_asio.reference.io_service `io_service`] object that owns the service. 


  boost::asio::io_service & get_io_service();



[endsect]



[section:id windows::stream_handle_service::id]

[indexterm2 id..windows::stream_handle_service] 
The unique service identifier. 


  static boost::asio::io_service::id id;



[endsect]



[section:implementation_type windows::stream_handle_service::implementation_type]

[indexterm2 implementation_type..windows::stream_handle_service] 
The type of a stream handle implementation. 


  typedef implementation_defined implementation_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/stream_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:is_open windows::stream_handle_service::is_open]

[indexterm2 is_open..windows::stream_handle_service] 
Determine whether the handle is open. 


  bool is_open(
      const implementation_type & impl) const;



[endsect]



[section:move_assign windows::stream_handle_service::move_assign]

[indexterm2 move_assign..windows::stream_handle_service] 
Move-assign from another stream handle implementation. 


  void move_assign(
      implementation_type & impl,
      stream_handle_service & other_service,
      implementation_type & other_impl);



[endsect]



[section:move_construct windows::stream_handle_service::move_construct]

[indexterm2 move_construct..windows::stream_handle_service] 
Move-construct a new stream handle implementation. 


  void move_construct(
      implementation_type & impl,
      implementation_type & other_impl);



[endsect]



[section:native windows::stream_handle_service::native]

[indexterm2 native..windows::stream_handle_service] 
(Deprecated: Use `native_handle()`.) Get the native handle implementation. 


  native_type native(
      implementation_type & impl);



[endsect]



[section:native_handle windows::stream_handle_service::native_handle]

[indexterm2 native_handle..windows::stream_handle_service] 
Get the native handle implementation. 


  native_handle_type native_handle(
      implementation_type & impl);



[endsect]



[section:native_handle_type windows::stream_handle_service::native_handle_type]

[indexterm2 native_handle_type..windows::stream_handle_service] 
The native handle type. 


  typedef implementation_defined native_handle_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/stream_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:native_type windows::stream_handle_service::native_type]

[indexterm2 native_type..windows::stream_handle_service] 
(Deprecated: Use native\_handle\_type.) The native handle type. 


  typedef implementation_defined native_type;



[heading Requirements]

[*Header: ][^boost/asio/windows/stream_handle_service.hpp]

[*Convenience header: ][^boost/asio.hpp]


[endsect]



[section:read_some windows::stream_handle_service::read_some]

[indexterm2 read_some..windows::stream_handle_service] 
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]



[section:stream_handle_service windows::stream_handle_service::stream_handle_service]

[indexterm2 stream_handle_service..windows::stream_handle_service] 
Construct a new stream handle service for the specified [link boost_asio.reference.io_service `io_service`]. 


  stream_handle_service(
      boost::asio::io_service & io_service);



[endsect]



[section:write_some windows::stream_handle_service::write_some]

[indexterm2 write_some..windows::stream_handle_service] 
Write the given data to the stream. 


  template<
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_some(
      implementation_type & impl,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);



[endsect]



[endsect]

[section:write write]

[indexterm1 write] 
Write a certain amount of data to a stream before returning. 

      
  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.write.overload1 write]``(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.write.overload2 write]``(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write.overload3 write]``(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write.overload4 write]``(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.write.overload5 write]``(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload5 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.write.overload6 write]``(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload6 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write.overload7 write]``(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload7 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write.overload8 write]``(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write.overload8 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/write.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 write (1 of 8 overloads)]


Write all of the supplied data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the stream.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::write(s, 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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write(
       s, buffers,
       boost::asio::transfer_all()); 







[endsect]



[section:overload2 write (2 of 8 overloads)]


Write all of the supplied data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the stream.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::write(s, boost::asio::buffer(data, size), ec); 


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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write(
       s, buffers,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload3 write (3 of 8 overloads)]


Write a certain amount of data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t write(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the stream.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the stream's write\_some function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::write(s, boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32)); 


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. 




[endsect]



[section:overload4 write (4 of 8 overloads)]


Write a certain amount of data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t write(
      SyncWriteStream & s,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the stream.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the stream's write\_some function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes written. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]



[section:overload5 write (5 of 8 overloads)]


Write all of the supplied data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator>
  std::size_t write(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write(
       s, b,
       boost::asio::transfer_all()); 







[endsect]



[section:overload6 write (6 of 8 overloads)]


Write all of the supplied data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator>
  std::size_t write(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* An error occurred.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write(
       s, b,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload7 write (7 of 8 overloads)]


Write a certain amount of data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t write(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the stream's write\_some function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload8 write (8 of 8 overloads)]


Write a certain amount of data to a stream before returning. 


  template<
      typename ``[link boost_asio.reference.SyncWriteStream SyncWriteStream]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t write(
      SyncWriteStream & s,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a stream. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the stream's write\_some function.


[heading Parameters]
    

[variablelist
  
[[s][The stream to which the data is to be written. The type must support the SyncWriteStream concept.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the stream's write\_some function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes written. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]


[endsect]

[section:write_at write_at]

[indexterm1 write_at] 
Write a certain amount of data at a specified offset before returning. 

      
  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.write_at.overload1 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload1 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t ``[link boost_asio.reference.write_at.overload2 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload2 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write_at.overload3 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload3 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write_at.overload4 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload4 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.write_at.overload5 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload5 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator>
  std::size_t ``[link boost_asio.reference.write_at.overload6 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload6 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write_at.overload7 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload7 more...]]``

  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t ``[link boost_asio.reference.write_at.overload8 write_at]``(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);
  ``  [''''&raquo;''' [link boost_asio.reference.write_at.overload8 more...]]``

[heading Requirements]

[*Header: ][^boost/asio/write_at.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:overload1 write_at (1 of 8 overloads)]


Write all of the supplied data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the device.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::write_at(d, 42, 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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write_at(
       d, offset, buffers,
       boost::asio::transfer_all()); 







[endsect]



[section:overload2 write_at (2 of 8 overloads)]


Write all of the supplied data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the device.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::write_at(d, 42,
       boost::asio::buffer(data, size), ec); 


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.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write_at(
       d, offset, buffers,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload3 write_at (3 of 8 overloads)]


Write a certain amount of data at a specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the device.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the device's write\_some\_at function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Example]
  
To write a single data buffer use the [link boost_asio.reference.buffer `buffer`]  function as follows: 

   boost::asio::write_at(d, 42, boost::asio::buffer(data, size),
       boost::asio::transfer_at_least(32)); 


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. 




[endsect]



[section:overload4 write_at (4 of 8 overloads)]


Write a certain amount of data at a specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename ``[link boost_asio.reference.ConstBufferSequence ConstBufferSequence]``,
      typename CompletionCondition>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      const ConstBufferSequence & buffers,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied buffers has been written. That is, the bytes transferred is equal to the sum of the buffer sizes.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[buffers][One or more buffers containing the data to be written. The sum of the buffer sizes indicates the maximum number of bytes to write to the device.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the device's write\_some\_at function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes written. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]



[section:overload5 write_at (5 of 8 overloads)]


Write all of the supplied data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure.]]

]


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write_at(
       d, 42, b,
       boost::asio::transfer_all()); 







[endsect]



[section:overload6 write_at (6 of 8 overloads)]


Write all of the supplied data at the specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* An error occurred.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Remarks]
      
This overload is equivalent to calling: 

   boost::asio::write_at(
       d, 42, b,
       boost::asio::transfer_all(), ec); 







[endsect]



[section:overload7 write_at (7 of 8 overloads)]


Write a certain amount of data at a specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the device's write\_some\_at function.]]

]


[heading Return Value]
      
The number of bytes transferred.


[heading Exceptions]
    

[variablelist
  
[[boost::system::system_error][Thrown on failure. ]]

]




[endsect]



[section:overload8 write_at (8 of 8 overloads)]


Write a certain amount of data at a specified offset before returning. 


  template<
      typename ``[link boost_asio.reference.SyncRandomAccessWriteDevice SyncRandomAccessWriteDevice]``,
      typename Allocator,
      typename CompletionCondition>
  std::size_t write_at(
      SyncRandomAccessWriteDevice & d,
      boost::uint64_t offset,
      basic_streambuf< Allocator > & b,
      CompletionCondition completion_condition,
      boost::system::error_code & ec);


This function is used to write a certain number of bytes of data to a random access device at a specified offset. The call will block until one of the following conditions is true:


* All of the data in the supplied [link boost_asio.reference.basic_streambuf `basic_streambuf`] has been written.


* The completion\_condition function object returns 0.

This operation is implemented in terms of zero or more calls to the device's write\_some\_at function.


[heading Parameters]
    

[variablelist
  
[[d][The device to which the data is to be written. The type must support the SyncRandomAccessWriteDevice concept.]]

[[offset][The offset at which the data will be written.]]

[[b][The [link boost_asio.reference.basic_streambuf `basic_streambuf`] object from which data will be written.]]

[[completion_condition][The function object to be called to determine whether the write operation is complete. The signature of the function object must be: 
``
   std::size_t completion_condition(
     // Result of latest write_some_at operation.
     const boost::system::error_code& error,

     // Number of bytes transferred so far.
     std::size_t bytes_transferred
   ); 
``
A return value of 0 indicates that the write operation is complete. A non-zero return value indicates the maximum number of bytes to be written on the next call to the device's write\_some\_at function.]]

[[ec][Set to indicate what error occurred, if any.]]

]


[heading Return Value]
      
The number of bytes written. If an error occurs, returns the total number of bytes successfully transferred prior to the error. 




[endsect]


[endsect]

[section:is_error_code_enum_lt__addrinfo_errors__gt_ boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >]



  template<>
  struct boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_error_code_enum_lt__addrinfo_errors__gt_.value [*value]]]
    []
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >::value]

[indexterm2 value..boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >] 

  static const bool value = true;



[endsect]



[endsect]

[section:is_error_code_enum_lt__basic_errors__gt_ boost::system::is_error_code_enum< boost::asio::error::basic_errors >]



  template<>
  struct boost::system::is_error_code_enum< boost::asio::error::basic_errors >


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_error_code_enum_lt__basic_errors__gt_.value [*value]]]
    []
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value boost::system::is_error_code_enum< boost::asio::error::basic_errors >::value]

[indexterm2 value..boost::system::is_error_code_enum< boost::asio::error::basic_errors >] 

  static const bool value = true;



[endsect]



[endsect]

[section:is_error_code_enum_lt__misc_errors__gt_ boost::system::is_error_code_enum< boost::asio::error::misc_errors >]



  template<>
  struct boost::system::is_error_code_enum< boost::asio::error::misc_errors >


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_error_code_enum_lt__misc_errors__gt_.value [*value]]]
    []
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value boost::system::is_error_code_enum< boost::asio::error::misc_errors >::value]

[indexterm2 value..boost::system::is_error_code_enum< boost::asio::error::misc_errors >] 

  static const bool value = true;



[endsect]



[endsect]

[section:is_error_code_enum_lt__netdb_errors__gt_ boost::system::is_error_code_enum< boost::asio::error::netdb_errors >]



  template<>
  struct boost::system::is_error_code_enum< boost::asio::error::netdb_errors >


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_error_code_enum_lt__netdb_errors__gt_.value [*value]]]
    []
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/error.hpp]

[*Convenience header: ][^boost/asio.hpp]


[section:value boost::system::is_error_code_enum< boost::asio::error::netdb_errors >::value]

[indexterm2 value..boost::system::is_error_code_enum< boost::asio::error::netdb_errors >] 

  static const bool value = true;



[endsect]



[endsect]

[section:is_error_code_enum_lt__ssl_errors__gt_ boost::system::is_error_code_enum< boost::asio::error::ssl_errors >]



  template<>
  struct boost::system::is_error_code_enum< boost::asio::error::ssl_errors >


[heading Data Members]
[table
  [[Name][Description]]

  [
    [[link boost_asio.reference.is_error_code_enum_lt__ssl_errors__gt_.value [*value]]]
    []
  ]

]

[heading Requirements]

[*Header: ][^boost/asio/ssl/error.hpp]

[*Convenience header: ][^boost/asio/ssl.hpp]


[section:value boost::system::is_error_code_enum< boost::asio::error::ssl_errors >::value]

[indexterm2 value..boost::system::is_error_code_enum< boost::asio::error::ssl_errors >] 

  static const bool value = true;



[endsect]



[endsect]

[endsect]