Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

Reference

Requirements on asynchronous operations
Accept handler requirements
Buffer-oriented asynchronous random-access read device requirements
Buffer-oriented asynchronous random-access write device requirements
Buffer-oriented asynchronous read stream requirements
Buffer-oriented asynchronous write stream requirements
Buffered handshake handler requirements
Completion handler requirements
Composed connect handler requirements
Connect handler requirements
Constant buffer sequence requirements
Convertible to const buffer requirements
Convertible to mutable buffer requirements
Datagram socket service requirements
Descriptor service requirements
Endpoint requirements
Gettable serial port option requirements
Gettable socket option requirements
Handlers
Handle service requirements
SSL handshake handler requirements
Internet protocol requirements
I/O control command requirements
I/O object service requirements
Mutable buffer sequence requirements
Object handle service requirements
Protocol requirements
Random access handle service requirements
Raw socket service requirements
Read handler requirements
Resolve handler requirements
Resolver service requirements
Sequenced packet socket service requirements
Serial port service requirements
Service requirements
Settable serial port option requirements
Settable socket option requirements
SSL shutdown handler requirements
Signal handler requirements
Signal set service requirements
Socket acceptor service requirements
Socket service requirements
Stream descriptor service requirements
Stream handle service requirements
Stream socket service requirements
Buffer-oriented synchronous random-access read device requirements
Buffer-oriented synchronous random-access write device requirements
Buffer-oriented synchronous read stream requirements
Buffer-oriented synchronous write stream requirements
Time traits requirements
Timer service requirements
Waitable timer service requirements
Wait handler requirements
Wait traits requirements
Write handler requirements
add_service
asio_handler_allocate
asio_handler_deallocate
asio_handler_invoke
asio_handler_is_continuation
async_connect
async_read
async_read_at
async_read_until
async_result
async_write
async_write_at
basic_datagram_socket
basic_deadline_timer
basic_io_object
basic_raw_socket
basic_seq_packet_socket
basic_serial_port
basic_signal_set
basic_socket
basic_socket_acceptor
basic_socket_iostream
basic_socket_streambuf
basic_stream_socket
basic_streambuf
basic_waitable_timer
basic_yield_context
buffer
buffer_cast
buffer_copy
buffer_size
buffered_read_stream
buffered_stream
buffered_write_stream
buffers_begin
buffers_end
buffers_iterator
connect
const_buffer
const_buffers_1
coroutine
datagram_socket_service
deadline_timer
deadline_timer_service
error::addrinfo_category
error::addrinfo_errors
error::basic_errors
error::get_addrinfo_category
error::get_misc_category
error::get_netdb_category
error::get_ssl_category
error::get_system_category
error::make_error_code
error::misc_category
error::misc_errors
error::netdb_category
error::netdb_errors
error::ssl_category
error::ssl_errors
error::system_category
generic::basic_endpoint
generic::datagram_protocol
generic::raw_protocol
generic::seq_packet_protocol
generic::stream_protocol
handler_type
has_service
high_resolution_timer
invalid_service_owner
io_service
io_service::id
io_service::service
io_service::strand
io_service::work
ip::address
ip::address_v4
ip::address_v6
ip::basic_endpoint
ip::basic_resolver
ip::basic_resolver_entry
ip::basic_resolver_iterator
ip::basic_resolver_query
ip::host_name
ip::icmp
ip::multicast::enable_loopback
ip::multicast::hops
ip::multicast::join_group
ip::multicast::leave_group
ip::multicast::outbound_interface
ip::resolver_query_base
ip::resolver_service
ip::tcp
ip::udp
ip::unicast::hops
ip::v6_only
is_match_condition
is_read_buffered
is_write_buffered
local::basic_endpoint
local::connect_pair
local::datagram_protocol
local::stream_protocol
mutable_buffer
mutable_buffers_1
null_buffers
placeholders::bytes_transferred
placeholders::error
placeholders::iterator
placeholders::signal_number
posix::basic_descriptor
posix::basic_stream_descriptor
posix::descriptor_base
posix::stream_descriptor
posix::stream_descriptor_service
raw_socket_service
read
read_at
read_until
seq_packet_socket_service
serial_port
serial_port_base
serial_port_base::baud_rate
serial_port_base::character_size
serial_port_base::flow_control
serial_port_base::parity
serial_port_base::stop_bits
serial_port_service
service_already_exists
signal_set
signal_set_service
socket_acceptor_service
socket_base
spawn
ssl::context
ssl::context_base
ssl::error::get_stream_category
ssl::error::make_error_code
ssl::error::stream_category
ssl::error::stream_errors
ssl::rfc2818_verification
ssl::stream
ssl::stream::impl_struct
ssl::stream_base
ssl::verify_client_once
ssl::verify_context
ssl::verify_fail_if_no_peer_cert
ssl::verify_mode
ssl::verify_none
ssl::verify_peer
steady_timer
strand
stream_socket_service
streambuf
system_timer
time_traits< boost::posix_time::ptime >
transfer_all
transfer_at_least
transfer_exactly
use_future
use_future_t
use_service
wait_traits
waitable_timer_service
windows::basic_handle
windows::basic_object_handle
windows::basic_random_access_handle
windows::basic_stream_handle
windows::object_handle
windows::object_handle_service
windows::overlapped_ptr
windows::random_access_handle
windows::random_access_handle_service
windows::stream_handle
windows::stream_handle_service
write
write_at
yield_context
boost::system::is_error_code_enum< boost::asio::error::addrinfo_errors >
boost::system::is_error_code_enum< boost::asio::error::basic_errors >
boost::system::is_error_code_enum< boost::asio::error::misc_errors >
boost::system::is_error_code_enum< boost::asio::error::netdb_errors >
boost::system::is_error_code_enum< boost::asio::error::ssl_errors >
boost::system::is_error_code_enum< boost::asio::ssl::error::stream_errors >

Core

Classes

const_buffer
const_buffers_1
coroutine
invalid_service_owner
io_service
io_service::id
io_service::service
io_service::strand
io_service::work
mutable_buffer
mutable_buffers_1
null_buffers
service_already_exists
streambuf
use_future_t
yield_context

Class Templates

basic_io_object
basic_streambuf
basic_yield_context
buffered_read_stream
buffered_stream
buffered_write_stream
buffers_iterator

Free Functions

add_service
asio_handler_allocate
asio_handler_deallocate
asio_handler_invoke
asio_handler_is_continuation
async_read
async_read_at
async_read_until
async_write
async_write_at
buffer
buffer_cast
buffer_copy
buffer_size
buffers_begin
buffers_end
has_service
read
read_at
read_until
spawn
transfer_all
transfer_at_least
transfer_exactly
use_service
write
write_at

Special Values

use_future

Boost.Bind Placeholders

placeholders::bytes_transferred
placeholders::error
placeholders::iterator
placeholders::signal_number

Error Codes

error::basic_errors
error::netdb_errors
error::addrinfo_errors
error::misc_errors

Type Traits

async_result
handler_type
is_match_condition
is_read_buffered
is_write_buffered

Type Requirements

Asynchronous operations
AsyncRandomAccessReadDevice
AsyncRandomAccessWriteDevice
AsyncReadStream
AsyncWriteStream
CompletionHandler
ConstBufferSequence
ConvertibleToConstBuffer
ConvertibleToMutableBuffer
Handler
IoObjectService
MutableBufferSequence
ReadHandler
Service
SyncRandomAccessReadDevice
SyncRandomAccessWriteDevice
SyncReadStream
SyncWriteStream
WriteHandler

Networking

Classes

generic::datagram_protocol
generic::datagram_protocol::endpoint
generic::datagram_protocol::socket
generic::raw_protocol
generic::raw_protocol::endpoint
generic::raw_protocol::socket
generic::seq_packet_protocol
generic::seq_packet_protocol::endpoint
generic::seq_packet_protocol::socket
generic::stream_protocol
generic::stream_protocol::endpoint
generic::stream_protocol::iostream
generic::stream_protocol::socket
ip::address
ip::address_v4
ip::address_v6
ip::icmp
ip::icmp::endpoint
ip::icmp::resolver
ip::icmp::socket
ip::resolver_query_base
ip::tcp
ip::tcp::acceptor
ip::tcp::endpoint
ip::tcp::iostream
ip::tcp::resolver
ip::tcp::socket
ip::udp
ip::udp::endpoint
ip::udp::resolver
ip::udp::socket
socket_base

Free Functions

async_connect
connect
ip::host_name

Class Templates

basic_datagram_socket
basic_raw_socket
basic_seq_packet_socket
basic_socket
basic_socket_acceptor
basic_socket_iostream
basic_socket_streambuf
basic_stream_socket
generic::basic_endpoint
ip::basic_endpoint
ip::basic_resolver
ip::basic_resolver_entry
ip::basic_resolver_iterator
ip::basic_resolver_query

Services

datagram_socket_service
ip::resolver_service
raw_socket_service
seq_packet_socket_service
socket_acceptor_service
stream_socket_service

Socket Options

ip::multicast::enable_loopback
ip::multicast::hops
ip::multicast::join_group
ip::multicast::leave_group
ip::multicast::outbound_interface
ip::tcp::no_delay
ip::unicast::hops
ip::v6_only
socket_base::broadcast
socket_base::debug
socket_base::do_not_route
socket_base::enable_connection_aborted
socket_base::keep_alive
socket_base::linger
socket_base::receive_buffer_size
socket_base::receive_low_watermark
socket_base::reuse_address
socket_base::send_buffer_size
socket_base::send_low_watermark

I/O Control Commands

socket_base::bytes_readable
socket_base::non_blocking_io

Type Requirements

AcceptHandler
ComposedConnectHandler
ConnectHandler
DatagramSocketService
Endpoint
GettableSocketOption
InternetProtocol
IoControlCommand
Protocol
RawSocketService
ResolveHandler
ResolverService
SeqPacketSocketService
SettableSocketOption
SocketAcceptorService
SocketService
StreamSocketService

Timers

SSL

Serial Ports

Signal Handling

Classes

deadline_timer
high_resolution_timer
steady_timer
system_timer

Class Templates

basic_deadline_timer
basic_waitable_timer
time_traits
wait_traits

Services

deadline_timer_service
waitable_timer_service

Type Requirements

TimerService
TimeTraits
WaitableTimerService
WaitHandler
WaitTraits

Classes

ssl::context
ssl::context_base
ssl::rfc2818_verification
ssl::stream_base
ssl::verify_context

Class Templates

ssl::stream

Type Requirements

BufferedHandshakeHandler
HandshakeHandler
ShutdownHandler

Classes

serial_port
serial_port_base

Class Templates

basic_serial_port

Services

serial_port_service

Serial Port Options

serial_port_base::baud_rate
serial_port_base::flow_control
serial_port_base::parity
serial_port_base::stop_bits
serial_port_base::character_size

Type Requirements

GettableSerialPortOption
SerialPortService
SettableSerialPortOption

Classes

signal_set

Class Templates

basic_signal_set

Services

signal_set_service

Type Requirements

SignalSetService
SignalHandler

POSIX-specific

Windows-specific

Classes

local::stream_protocol
local::stream_protocol::acceptor
local::stream_protocol::endpoint
local::stream_protocol::iostream
local::stream_protocol::socket
local::datagram_protocol
local::datagram_protocol::endpoint
local::datagram_protocol::socket
posix::descriptor_base
posix::stream_descriptor

Free Functions

local::connect_pair

Class Templates

local::basic_endpoint
posix::basic_descriptor
posix::basic_stream_descriptor

Services

posix::stream_descriptor_service

Type Requirements

DescriptorService
StreamDescriptorService

Classes

windows::object_handle
windows::overlapped_ptr
windows::random_access_handle
windows::stream_handle

Class Templates

windows::basic_handle
windows::basic_object_handle
windows::basic_random_access_handle
windows::basic_stream_handle

Services

windows::object_handle_service
windows::random_access_handle_service
windows::stream_handle_service

Type Requirements

HandleService
ObjectHandleService
RandomAccessHandleService
StreamHandleService

In Boost.Asio, an asynchronous operation is initiated by a function that is named with the prefix async_. These functions will be referred to as initiating functions.

All initiating functions in Boost.Asio take a function object meeting handler requirements as the final parameter. These handlers accept as their first parameter an lvalue of type const error_code.

Implementations of asynchronous operations in Boost.Asio may call the application programming interface (API) provided by the operating system. If such an operating system API call results in an error, the handler will be invoked with a const error_code lvalue that evaluates to true. Otherwise the handler will be invoked with a const error_code lvalue that evaluates to false.

Unless otherwise noted, when the behaviour of an asynchronous operation is defined "as if" implemented by a POSIX function, the handler will be invoked with a value of type error_code that corresponds to the failure condition described by POSIX for that function, if any. Otherwise the handler will be invoked with an implementation-defined error_code value that reflects the operating system error.

Asynchronous operations will not fail with an error condition that indicates interruption by a signal (POSIX EINTR). Asynchronous operations will not fail with any error condition associated with non-blocking operations (POSIX EWOULDBLOCK, EAGAIN or EINPROGRESS; Windows WSAEWOULDBLOCK or WSAEINPROGRESS).

All asynchronous operations have an associated io_service object. Where the initiating function is a member function, the associated io_service is that returned by the get_io_service() member function on the same object. Where the initiating function is not a member function, the associated io_service is that returned by the get_io_service() member function of the first argument to the initiating function.

Arguments to initiating functions will be treated as follows:

— If the parameter is declared as a const reference or by-value, the program is not required to guarantee the validity of the argument after the initiating function completes. The implementation may make copies of the argument, and all copies will be destroyed no later than immediately after invocation of the handler.

— If the parameter is declared as a non-const reference, const pointer or non-const pointer, the program must guarantee the validity of the argument until the handler is invoked.

The library implementation is only permitted to make calls to an initiating function's arguments' copy constructors or destructors from a thread that satisfies one of the following conditions:

— The thread is executing any member function of the associated io_service object.

— The thread is executing the destructor of the associated io_service object.

— The thread is executing one of the io_service service access functions use_service, add_service or has_service, where the first argument is the associated io_service object.

— The thread is executing any member function, constructor or destructor of an object of a class defined in this clause, where the object's get_io_service() member function returns the associated io_service object.

— The thread is executing any function defined in this clause, where any argument to the function has an get_io_service() member function that returns the associated io_service object.

The io_service object associated with an asynchronous operation will have unfinished work, as if by maintaining the existence of one or more objects of class io_service::work constructed using the io_service, until immediately after the handler for the asynchronous operation has been invoked.

When an asynchronous operation is complete, the handler for the operation will be invoked as if by:

  1. Constructing a bound completion handler bch for the handler, as described below.
  2. Calling ios.post(bch) to schedule the handler for deferred invocation, where ios is the associated io_service.

This implies that the handler must not be called directly from within the initiating function, even if the asynchronous operation completes immediately.

A bound completion handler is a handler object that contains a copy of a user-supplied handler, where the user-supplied handler accepts one or more arguments. The bound completion handler does not accept any arguments, and contains values to be passed as arguments to the user-supplied handler. The bound completion handler forwards the asio_handler_allocate(), asio_handler_deallocate(), and asio_handler_invoke() calls to the corresponding functions for the user-supplied handler. A bound completion handler meets the requirements for a completion handler.

For example, a bound completion handler for a ReadHandler may be implemented as follows:

template<class ReadHandler>
struct bound_read_handler
{
  bound_read_handler(ReadHandler handler, const error_code& ec, size_t s)
    : handler_(handler), ec_(ec), s_(s)
  {
  }

  void operator()()
  {
    handler_(ec_, s_);
  }

  ReadHandler handler_;
  const error_code ec_;
  const size_t s_;
};

template<class ReadHandler>
void* asio_handler_allocate(size_t size,
                            bound_read_handler<ReadHandler>* this_handler)
{
  using boost::asio::asio_handler_allocate;
  return asio_handler_allocate(size, &this_handler->handler_);
}

template<class ReadHandler>
void asio_handler_deallocate(void* pointer, std::size_t size,
                             bound_read_handler<ReadHandler>* this_handler)
{
  using boost::asio::asio_handler_deallocate;
  asio_handler_deallocate(pointer, size, &this_handler->handler_);
}

template<class F, class ReadHandler>
void asio_handler_invoke(const F& f,
                         bound_read_handler<ReadHandler>* this_handler)
{
  using boost::asio::asio_handler_invoke;
  asio_handler_invoke(f, &this_handler->handler_);
}

If the thread that initiates an asynchronous operation terminates before the associated handler is invoked, the behaviour is implementation-defined. Specifically, on Windows versions prior to Vista, unfinished operations are cancelled when the initiating thread exits.

The handler argument to an initiating function defines a handler identity. That is, the original handler argument and any copies of the handler argument will be considered equivalent. If the implementation needs to allocate storage for an asynchronous operation, the implementation will perform asio_handler_allocate(size, &h), where size is the required size in bytes, and h is the handler. The implementation will perform asio_handler_deallocate(p, size, &h), where p is a pointer to the storage, to deallocate the storage prior to the invocation of the handler via asio_handler_invoke. Multiple storage blocks may be allocated for a single asynchronous operation.

Return type of an initiating function

By default, initiating functions return void. This is always the case when the handler is a function pointer, C++11 lambda, or a function object produced by boost::bind or std::bind.

For other types, the return type may be customised via a two-step process:

  1. A specialisation of the handler_type template, which is used to determine the true handler type based on the asynchronous operation's handler's signature.
  2. A specialisation of the async_result template, which is used both to determine the return type and to extract the return value from the handler.

These two templates have been specialised to provide support for stackful coroutines and the C++11 std::future class.

As an example, consider what happens when enabling std::future support by using the boost::asio::use_future special value, as in:

std::future<std::size_t> length =
  my_socket.async_read_some(my_buffer, boost::asio::use_future);

When a handler signature has the form:

void handler(error_code ec, result_type result);

the initiating function returns a std::future templated on result_type. In the above async_read_some example, this is std::size_t. If the asynchronous operation fails, the error_code is converted into a system_error exception and passed back to the caller through the future.

Where a handler signature has the form:

void handler(error_code ec);

the initiating function instead returns std::future<void>.

An accept handler must meet the requirements for a handler. A value h of an accept handler class should work correctly in the expression h(ec), where ec is an lvalue of type const error_code.

Examples

A free function as an accept handler:

void accept_handler(
    const boost::system::error_code& ec)
{
  ...
}

An accept handler function object:

struct accept_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec)
  {
    ...
  }
  ...
};

A non-static class member function adapted to an accept handler using bind():

void my_class::accept_handler(
    const boost::system::error_code& ec)
{
  ...
}
...
acceptor.async_accept(...,
    boost::bind(&my_class::accept_handler,
      this, boost::asio::placeholders::error));

In the table below, a denotes an asynchronous random access read device object, o denotes an offset of type boost::uint64_t, mb denotes an object satisfying mutable buffer sequence requirements, and h denotes an object satisfying read handler requirements.

Table 7.1. Buffer-oriented asynchronous random-access read device requirements

operation

type

semantics, pre/post-conditions

a.get_io_service();

io_service&

Returns the io_service object through which the async_read_some_at handler h will be invoked.

a.async_read_some_at(o, mb, h);

void

Initiates an asynchronous operation to read one or more bytes of data from the device a at the offset o. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The async_read_some_at operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous read operation is invoked,

whichever comes first.

If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.


In the table below, a denotes an asynchronous write stream object, o denotes an offset of type boost::uint64_t, cb denotes an object satisfying constant buffer sequence requirements, and h denotes an object satisfying write handler requirements.

Table 7.2. Buffer-oriented asynchronous random-access write device requirements

operation

type

semantics, pre/post-conditions

a.get_io_service();

io_service&

Returns the io_service object through which the async_write_some_at handler h will be invoked.

a.async_write_some_at(o, cb, h);

void

Initiates an asynchronous operation to write one or more bytes of data to the device a at offset o. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The async_write_some_at operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous write operation is invoked,

whichever comes first.

If the total size of all buffers in the sequence cb is 0, the asynchronous write operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes written.


In the table below, a denotes an asynchronous read stream object, mb denotes an object satisfying mutable buffer sequence requirements, and h denotes an object satisfying read handler requirements.

Table 7.3. Buffer-oriented asynchronous read stream requirements

operation

type

semantics, pre/post-conditions

a.get_io_service();

io_service&

Returns the io_service object through which the async_read_some handler h will be invoked.

a.async_read_some(mb, h);

void

Initiates an asynchronous operation to read one or more bytes of data from the stream a. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The async_read_some operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous read operation is invoked,

whichever comes first.

If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.


In the table below, a denotes an asynchronous write stream object, cb denotes an object satisfying constant buffer sequence requirements, and h denotes an object satisfying write handler requirements.

Table 7.4. Buffer-oriented asynchronous write stream requirements

operation

type

semantics, pre/post-conditions

a.get_io_service();

io_service&

Returns the io_service object through which the async_write_some handler h will be invoked.

a.async_write_some(cb, h);

void

Initiates an asynchronous operation to write one or more bytes of data to the stream a. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The async_write_some operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous write operation is invoked,

whichever comes first.

If the total size of all buffers in the sequence cb is 0, the asynchronous write operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes written.


A buffered handshake handler must meet the requirements for a handler. A value h of a buffered handshake handler class should work correctly in the expression h(ec, s), where ec is an lvalue of type const error_code and s is an lvalue of type const size_t.

Examples

A free function as a buffered handshake handler:

void handshake_handler(
    const boost::system::error_code& ec,
    std::size_t bytes_transferred)
{
  ...
}

A buffered handshake handler function object:

struct handshake_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec,
      std::size_t bytes_transferred)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a buffered handshake handler using bind():

void my_class::handshake_handler(
    const boost::system::error_code& ec,
    std::size_t bytes_transferred)
{
  ...
}
...
socket.async_handshake(...,
    boost::bind(&my_class::handshake_handler,
      this, boost::asio::placeholders::error,
      boost::asio::placeholders::bytes_transferred));

A completion handler must meet the requirements for a handler. A value h of a completion handler class should work correctly in the expression h().

Examples

A free function as a completion handler:

void completion_handler()
{
  ...
}

A completion handler function object:

struct completion_handler
{
  ...
  void operator()()
  {
    ...
  }
  ...
};

A non-static class member function adapted to a completion handler using bind():

void my_class::completion_handler()
{
  ...
}
...
my_io_service.post(boost::bind(&my_class::completion_handler, this));

A composed connect handler must meet the requirements for a handler. A value h of a composed connect handler class should work correctly in the expression h(ec, i), where ec is an lvalue of type const error_code and i is an lvalue of the type Iterator used in the corresponding connect() or async_connect()` function.

Examples

A free function as a composed connect handler:

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

A composed connect handler function object:

struct connect_handler
{
  ...
  template <typename Iterator>
  void operator()(
      const boost::system::error_code& ec,
      Iterator iterator)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a composed connect handler using bind():

void my_class::connect_handler(
    const boost::system::error_code& ec,
    boost::asio::ip::tcp::resolver::iterator iterator)
{
  ...
}
...
boost::asio::async_connect(...,
    boost::bind(&my_class::connect_handler,
      this, boost::asio::placeholders::error,
      boost::asio::placeholders::iterator));

A connect handler must meet the requirements for a handler. A value h of a connect handler class should work correctly in the expression h(ec), where ec is an lvalue of type const error_code.

Examples

A free function as a connect handler:

void connect_handler(
    const boost::system::error_code& ec)
{
  ...
}

A connect handler function object:

struct connect_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a connect handler using bind():

void my_class::connect_handler(
    const boost::system::error_code& ec)
{
  ...
}
...
socket.async_connect(...,
    boost::bind(&my_class::connect_handler,
      this, boost::asio::placeholders::error));

In the table below, X denotes a class containing objects of type T, a denotes a value of type X and u denotes an identifier.

Table 7.5. ConstBufferSequence requirements

expression

return type

assertion/note
pre/post-condition

X::value_type

T

T meets the requirements for ConvertibleToConstBuffer.

X::const_iterator

iterator type pointing to T

const_iterator meets the requirements for bidirectional iterators (C++ Std, 24.1.4).

X(a);

post: equal_const_buffer_seq(a, X(a)) where the binary predicate equal_const_buffer_seq is defined as

bool equal_const_buffer_seq(
  const X& x1, const X& x2)
{
  return
    distance(x1.begin(), x1.end())
      == distance(x2.begin(), x2.end())
        && equal(x1.begin(), x1.end(),
                 x2.begin(), equal_buffer);
}

and the binary predicate equal_buffer is defined as

bool equal_buffer(
  const X::value_type& v1,
  const X::value_type& v2)
{
  const_buffer b1(v1);
  const_buffer b2(v2);
  return
    buffer_cast<const void*>(b1)
      == buffer_cast<const void*>(b2)
        && buffer_size(b1) == buffer_size(b2);
}

X u(a);

post:

distance(a.begin(), a.end())
  == distance(u.begin(), u.end())
    && equal(a.begin(), a.end(),
             u.begin(), equal_buffer)

where the binary predicate equal_buffer is defined as

bool equal_buffer(
  const X::value_type& v1,
  const X::value_type& v2)
{
  const_buffer b1(v1);
  const_buffer b2(v2);
  return
    buffer_cast<const void*>(b1)
      == buffer_cast<const void*>(b2)
        && buffer_size(b1) == buffer_size(b2);
}

(&a)->~X();

void

note: the destructor is applied to every element of a; all the memory is deallocated.

a.begin();

const_iterator or convertible to const_iterator

a.end();

const_iterator or convertible to const_iterator


A type that meets the requirements for convertibility to a const buffer must meet the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

In the table below, X denotes a class meeting the requirements for convertibility to a const buffer, a and b denote values of type X, and u, v and w denote identifiers.

Table 7.6. ConvertibleToConstBuffer requirements

expression

postcondition

const_buffer u(a);
const_buffer v(a);

buffer_cast<const void*>(u) == buffer_cast<const void*>(v)
  && buffer_size(u) == buffer_size(v)

const_buffer u(a);
const_buffer v = a;

buffer_cast<const void*>(u) == buffer_cast<const void*>(v)
  && buffer_size(u) == buffer_size(v)

const_buffer u(a);
const_buffer v; v = a;

buffer_cast<const void*>(u) == buffer_cast<const void*>(v)
  && buffer_size(u) == buffer_size(v)

const_buffer u(a);
const X& v = a;
const_buffer w(v);

buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
  && buffer_size(u) == buffer_size(w)

const_buffer u(a);
X v(a);
const_buffer w(v);

buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
  && buffer_size(u) == buffer_size(w)

const_buffer u(a);
X v = a;
const_buffer w(v);

buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
  && buffer_size(u) == buffer_size(w)

const_buffer u(a);
X v(b); v = a;
const_buffer w(v);

buffer_cast<const void*>(u) == buffer_cast<const void*>(w)
  && buffer_size(u) == buffer_size(w)


A type that meets the requirements for convertibility to a mutable buffer must meet the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

In the table below, X denotes a class meeting the requirements for convertibility to a mutable buffer, a and b denote values of type X, and u, v and w denote identifiers.

Table 7.7. ConvertibleToMutableBuffer requirements

expression

postcondition

mutable_buffer u(a);
mutable_buffer v(a);

buffer_cast<void*>(u) == buffer_cast<void*>(v)
  && buffer_size(u) == buffer_size(v)

mutable_buffer u(a);
mutable_buffer v = a;

buffer_cast<void*>(u) == buffer_cast<void*>(v)
  && buffer_size(u) == buffer_size(v)

mutable_buffer u(a);
mutable_buffer v; v = a;

buffer_cast<void*>(u) == buffer_cast<void*>(v)
  && buffer_size(u) == buffer_size(v)

mutable_buffer u(a);
const X& v = a;
mutable_buffer w(v);

buffer_cast<void*>(u) == buffer_cast<void*>(w)
  && buffer_size(u) == buffer_size(w)

mutable_buffer u(a);
X v(a);
mutable_buffer w(v);

buffer_cast<void*>(u) == buffer_cast<void*>(w)
  && buffer_size(u) == buffer_size(w)

mutable_buffer u(a);
X v = a;
mutable_buffer w(v);

buffer_cast<void*>(u) == buffer_cast<void*>(w)
  && buffer_size(u) == buffer_size(w)

mutable_buffer u(a);
X v(b); v = a;
mutable_buffer w(v);

buffer_cast<void*>(u) == buffer_cast<void*>(w)
  && buffer_size(u) == buffer_size(w)


A datagram socket service must meet the requirements for a socket service, as well as the additional requirements listed below.

In the table below, X denotes a datagram socket service class for protocol Protocol, a denotes a value of type X, b denotes a value of type X::implementation_type, e denotes a value of type Protocol::endpoint, ec denotes a value of type error_code, f denotes a value of type socket_base::message_flags, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.8. DatagramSocketService requirements

expression

return type

assertion/note
pre/post-condition

a.receive(b, mb, f, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a connected socket b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0.

a.async_receive(b, mb, f, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.receive_from(b, mb, e, f, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from an unconnected socket b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0.

a.async_receive_from(b, mb, e, f, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from an unconnected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

The program must ensure the object e is valid until the handler for the asynchronous operation is invoked.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.send(b, cb, f, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a connected socket b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0.

a.async_send(b, cb, f, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

const typename Protocol::endpoint& u = e;
a.send_to(b, cb, u, f, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to an unconnected socket b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0.

const typename Protocol::endpoint& u = e;
a.async_send(b, cb, u, f, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to an unconnected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A descriptor service must meet the requirements for an I/O object service with support for movability, as well as the additional requirements listed below.

In the table below, X denotes a descriptor service class, a and ao denote values of type X, b and c denote values of type X::implementation_type, n denotes a value of type X::native_handle_type, ec denotes a value of type error_code, i denotes a value meeting IoControlCommand requirements, and u and v denote identifiers.

Table 7.9. DescriptorService requirements

expression

return type

assertion/note
pre/post-condition

X::native_handle_type

The implementation-defined native representation of a descriptor. Must satisfy the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

a.construct(b);

From IoObjectService requirements.
post: !a.is_open(b).

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous operations, as if by calling a.close(b, ec).

a.move_construct(b, c);

From IoObjectService requirements. The underlying native representation is moved from c to b.

a.move_assign(b, ao, c);

From IoObjectService requirements. Implicitly cancels asynchronous operations associated with b, as if by calling a.close(b, ec). Then the underlying native representation is moved from c to b.

a.assign(b, n, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.is_open(b);

bool

const X& u = a;
const X::implementation_type& v = b;
u.is_open(v);

bool

a.close(b, ec);

error_code

If a.is_open() is true, causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.
post: !a.is_open(b).

a.native_handle(b);

X::native_handle_type

a.cancel(b, ec);

error_code

pre: a.is_open(b).
Causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.

a.io_control(b, i, ec);

error_code

pre: a.is_open(b).


An endpoint must meet the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

In the table below, X denotes an endpoint class, a denotes a value of type X, s denotes a size in bytes, and u denotes an identifier.

Table 7.10. Endpoint requirements

expression

type

assertion/note
pre/post-conditions

X::protocol_type

type meeting protocol requirements

X u;

X();

a.protocol();

protocol_type

a.data();

a pointer

Returns a pointer suitable for passing as the address argument to POSIX functions such as accept(), getpeername(), getsockname() and recvfrom(). The implementation shall perform a reinterpret_cast on the pointer to convert it to sockaddr*.

const X& u = a; u.data();

a pointer

Returns a pointer suitable for passing as the address argument to POSIX functions such as connect(), or as the dest_addr argument to POSIX functions such as sendto(). The implementation shall perform a reinterpret_cast on the pointer to convert it to const sockaddr*.

a.size();

size_t

Returns a value suitable for passing as the address_len argument to POSIX functions such as connect(), or as the dest_len argument to POSIX functions such as sendto(), after appropriate integer conversion has been performed.

a.resize(s);

post: a.size() == s
Passed the value contained in the address_len argument to POSIX functions such as accept(), getpeername(), getsockname() and recvfrom(), after successful completion of the function. Permitted to throw an exception if the protocol associated with the endpoint object a does not support the specified size.

a.capacity();

size_t

Returns a value suitable for passing as the address_len argument to POSIX functions such as accept(), getpeername(), getsockname() and recvfrom(), after appropriate integer conversion has been performed.


In the table below, X denotes a serial port option class, a denotes a value of X, ec denotes a value of type error_code, and s denotes a value of implementation-defined type storage (where storage is the type DCB on Windows and termios on POSIX platforms), and u denotes an identifier.

Table 7.11. GettableSerialPortOption requirements

expression

type

assertion/note
pre/post-conditions

const storage& u = s;
a.load(u, ec);

error_code

Retrieves the value of the serial port option from the storage.

If successful, sets ec such that !ec is true. If an error occurred, sets ec such that !!ec is true. Returns ec.


In the table below, X denotes a socket option class, a denotes a value of X, p denotes a value that meets the protocol requirements, and u denotes an identifier.

Table 7.12. GettableSocketOption requirements

expression

type

assertion/note
pre/post-conditions

a.level(p);

int

Returns a value suitable for passing as the level argument to POSIX getsockopt() (or equivalent).

a.name(p);

int

Returns a value suitable for passing as the option_name argument to POSIX getsockopt() (or equivalent).

a.data(p);

a pointer, convertible to void*

Returns a pointer suitable for passing as the option_value argument to POSIX getsockopt() (or equivalent).

a.size(p);

size_t

Returns a value suitable for passing as the option_len argument to POSIX getsockopt() (or equivalent), after appropriate integer conversion has been performed.

a.resize(p, s);

post: a.size(p) == s.
Passed the value contained in the option_len argument to POSIX getsockopt() (or equivalent) after successful completion of the function. Permitted to throw an exception if the socket option object a does not support the specified size.


A handler must meet the requirements of CopyConstructible types (C++ Std, 20.1.3).

In the table below, X denotes a handler class, h denotes a value of X, p denotes a pointer to a block of allocated memory of type void*, s denotes the size for a block of allocated memory, and f denotes a function object taking no arguments.

Table 7.13. Handler requirements

expression

return type

assertion/note
pre/post-conditions

using boost::asio::asio_handler_allocate;
asio_handler_allocate(s, &h);

void*

Returns a pointer to a block of memory of size s. The pointer must satisfy the same alignment requirements as a pointer returned by ::operator new(). Throws bad_alloc on failure.

The asio_handler_allocate() function is located using argument-dependent lookup. The function boost::asio::asio_handler_allocate() serves as a default if no user-supplied function is available.

using boost::asio::asio_handler_deallocate;
asio_handler_deallocate(p, s, &h);

Frees a block of memory associated with a pointer p, of at least size s, that was previously allocated using asio_handler_allocate().

The asio_handler_deallocate() function is located using argument-dependent lookup. The function boost::asio::asio_handler_deallocate() serves as a default if no user-supplied function is available.

using boost::asio::asio_handler_invoke;
asio_handler_invoke(f, &h);

Causes the function object f to be executed as if by calling f().

The asio_handler_invoke() function is located using argument-dependent lookup. The function boost::asio::asio_handler_invoke() serves as a default if no user-supplied function is available.


A handle service must meet the requirements for an I/O object service with support for movability, as well as the additional requirements listed below.

In the table below, X denotes a handle service class, a and ao denote values of type X, b and c denote values of type X::implementation_type, n denotes a value of type X::native_handle_type, ec denotes a value of type error_code, and u and v denote identifiers.

Table 7.14. HandleService requirements

expression

return type

assertion/note
pre/post-condition

X::native_handle_type

The implementation-defined native representation of a handle. Must satisfy the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

a.construct(b);

From IoObjectService requirements.
post: !a.is_open(b).

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous operations, as if by calling a.close(b, ec).

a.move_construct(b, c);

From IoObjectService requirements. The underlying native representation is moved from c to b.

a.move_assign(b, ao, c);

From IoObjectService requirements. Implicitly cancels asynchronous operations associated with b, as if by calling a.close(b, ec). Then the underlying native representation is moved from c to b.

a.assign(b, n, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.is_open(b);

bool

const X& u = a;
const X::implementation_type& v = b;
u.is_open(v);

bool

a.close(b, ec);

error_code

If a.is_open() is true, causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.
post: !a.is_open(b).

a.native_handle(b);

X::native_handle_type

a.cancel(b, ec);

error_code

pre: a.is_open(b).
Causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.


A handshake handler must meet the requirements for a handler. A value h of a handshake handler class should work correctly in the expression h(ec), where ec is an lvalue of type const error_code.

Examples

A free function as a handshake handler:

void handshake_handler(
    const boost::system::error_code& ec)
{
  ...
}

A handshake handler function object:

struct handshake_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a handshake handler using bind():

void my_class::handshake_handler(
    const boost::system::error_code& ec)
{
  ...
}
...
ssl_stream.async_handshake(...,
    boost::bind(&my_class::handshake_handler,
      this, boost::asio::placeholders::error));

An internet protocol must meet the requirements for a protocol as well as the additional requirements listed below.

In the table below, X denotes an internet protocol class, a denotes a value of type X, and b denotes a value of type X.

Table 7.15. InternetProtocol requirements

expression

return type

assertion/note
pre/post-conditions

X::resolver

ip::basic_resolver<X>

The type of a resolver for the protocol.

X::v4()

X

Returns an object representing the IP version 4 protocol.

X::v6()

X

Returns an object representing the IP version 6 protocol.

a == b

convertible to bool

Returns whether two protocol objects are equal.

a != b

convertible to bool

Returns !(a == b).


In the table below, X denotes an I/O control command class, a denotes a value of X, and u denotes an identifier.

Table 7.16. IoControlCommand requirements

expression

type

assertion/note
pre/post-conditions

a.name();

int

Returns a value suitable for passing as the request argument to POSIX ioctl() (or equivalent).

a.data();

a pointer, convertible to void*


An I/O object service must meet the requirements for a service, as well as the requirements listed below.

In the table below, X denotes an I/O object service class, a and ao denote values of type X, b and c denote values of type X::implementation_type, and u denotes an identifier.

Table 7.17. IoObjectService requirements

expression

return type

assertion/note
pre/post-condition

X::implementation_type

X::implementation_type u;

note: X::implementation_type has a public default constructor and destructor.

a.construct(b);

a.destroy(b);

note: destroy() will only be called on a value that has previously been initialised with construct() or move_construct().

a.move_construct(b, c);

note: only required for I/O objects that support movability.

a.move_assign(b, ao, c);

note: only required for I/O objects that support movability.


In the table below, X denotes a class containing objects of type T, a denotes a value of type X and u denotes an identifier.

Table 7.18. MutableBufferSequence requirements

expression

return type

assertion/note
pre/post-condition

X::value_type

T

T meets the requirements for ConvertibleToMutableBuffer.

X::const_iterator

iterator type pointing to T

const_iterator meets the requirements for bidirectional iterators (C++ Std, 24.1.4).

X(a);

post: equal_mutable_buffer_seq(a, X(a)) where the binary predicate equal_mutable_buffer_seq is defined as

bool equal_mutable_buffer_seq(
  const X& x1, const X& x2)
{
  return
    distance(x1.begin(), x1.end())
      == distance(x2.begin(), x2.end())
        && equal(x1.begin(), x1.end(),
                 x2.begin(), equal_buffer);
}

and the binary predicate equal_buffer is defined as

bool equal_buffer(
  const X::value_type& v1,
  const X::value_type& v2)
{
  mutable_buffer b1(v1);
  mutable_buffer b2(v2);
  return
    buffer_cast<const void*>(b1)
      == buffer_cast<const void*>(b2)
        && buffer_size(b1) == buffer_size(b2);
}

X u(a);

post:

distance(a.begin(), a.end())
  == distance(u.begin(), u.end())
    && equal(a.begin(), a.end(),
             u.begin(), equal_buffer)

where the binary predicate equal_buffer is defined as

bool equal_buffer(
  const X::value_type& v1,
  const X::value_type& v2)
{
  mutable_buffer b1(v1);
  mutable_buffer b2(v2);
  return
    buffer_cast<const void*>(b1)
      == buffer_cast<const void*>(b2)
        && buffer_size(b1) == buffer_size(b2);
}

(&a)->~X();

void

note: the destructor is applied to every element of a; all the memory is deallocated.

a.begin();

const_iterator or convertible to const_iterator

a.end();

const_iterator or convertible to const_iterator


An object handle service must meet the requirements for a handle service, as well as the additional requirements listed below.

In the table below, X denotes an object handle service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, and wh denotes a value meeting WaitHandler requirements.

Table 7.19. ObjectHandleService requirements

expression

return type

assertion/note
pre/post-condition

a.wait(b, ec);

error_code

pre: a.is_open(b).

Synchronously waits for the object represented by handle b to become signalled.

a.async_wait(b, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to wait for the object represented by handle b to become signalled. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.


A protocol must meet the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

In the table below, X denotes a protocol class, and a denotes a value of X.

Table 7.20. Protocol requirements

expression

return type

assertion/note
pre/post-conditions

X::endpoint

type meeting endpoint requirements

a.family()

int

Returns a value suitable for passing as the domain argument to POSIX socket() (or equivalent).

a.type()

int

Returns a value suitable for passing as the type argument to POSIX socket() (or equivalent).

a.protocol()

int

Returns a value suitable for passing as the protocol argument to POSIX socket() (or equivalent).


A random access handle service must meet the requirements for a handle service, as well as the additional requirements listed below.

In the table below, X denotes a random access handle service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, o denotes an offset of type boost::uint64_t, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.21. RandomAccessHandleService requirements

expression

return type

assertion/note
pre/post-condition

a.read_some_at(b, o, mb, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a handle b at offset o.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0. If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.

a.async_read_some_at(b, o, mb, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a handle b at offset o. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.write_some_at(b, o, cb, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a handle b at offset o.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0. If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.

a.async_write_some_at(b, o, cb, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a handle b at offset o. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence cb is 0, the asynchronous operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A raw socket service must meet the requirements for a socket service, as well as the additional requirements listed below.

In the table below, X denotes a raw socket service class for protocol Protocol, a denotes a value of type X, b denotes a value of type X::implementation_type, e denotes a value of type Protocol::endpoint, ec denotes a value of type error_code, f denotes a value of type socket_base::message_flags, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.22. RawSocketService requirements

expression

return type

assertion/note
pre/post-condition

a.receive(b, mb, f, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a connected socket b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0.

a.async_receive(b, mb, f, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.receive_from(b, mb, e, f, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from an unconnected socket b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0.

a.async_receive_from(b, mb, e, f, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from an unconnected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

The program must ensure the object e is valid until the handler for the asynchronous operation is invoked.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.send(b, cb, f, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a connected socket b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0.

a.async_send(b, cb, f, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

const typename Protocol::endpoint& u = e;
a.send_to(b, cb, u, f, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to an unconnected socket b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0.

const typename Protocol::endpoint& u = e;
a.async_send(b, cb, u, f, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to an unconnected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A read handler must meet the requirements for a handler. A value h of a read handler class should work correctly in the expression h(ec, s), where ec is an lvalue of type const error_code and s is an lvalue of type const size_t.

Examples

A free function as a read handler:

void read_handler(
    const boost::system::error_code& ec,
    std::size_t bytes_transferred)
{
  ...
}

A read handler function object:

struct read_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec,
      std::size_t bytes_transferred)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a read handler using bind():

void my_class::read_handler(
    const boost::system::error_code& ec,
    std::size_t bytes_transferred)
{
  ...
}
...
socket.async_read(...,
    boost::bind(&my_class::read_handler,
      this, boost::asio::placeholders::error,
      boost::asio::placeholders::bytes_transferred));

A resolve handler must meet the requirements for a handler. A value h of a resolve handler class should work correctly in the expression h(ec, i), where ec is an lvalue of type const error_code and i is an lvalue of type const ip::basic_resolver_iterator<InternetProtocol>. InternetProtocol is the template parameter of the resolver_service which is used to initiate the asynchronous operation.

Examples

A free function as a resolve handler:

void resolve_handler(
    const boost::system::error_code& ec,
    boost::asio::ip::tcp::resolver::iterator iterator)
{
  ...
}

A resolve handler function object:

struct resolve_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec,
      boost::asio::ip::tcp::resolver::iterator iterator)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a resolve handler using bind():

void my_class::resolve_handler(
    const boost::system::error_code& ec,
    boost::asio::ip::tcp::resolver::iterator iterator)
{
  ...
}
...
resolver.async_resolve(...,
    boost::bind(&my_class::resolve_handler,
      this, boost::asio::placeholders::error,
      boost::asio::placeholders::iterator));

A resolver service must meet the requirements for an I/O object service, as well as the additional requirements listed below.

In the table below, X denotes a resolver service class for protocol InternetProtocol, a denotes a value of type X, b denotes a value of type X::implementation_type, q denotes a value of type ip::basic_resolver_query<InternetProtocol>, e denotes a value of type ip::basic_endpoint<InternetProtocol>, ec denotes a value of type error_code, and h denotes a value meeting ResolveHandler requirements.

Table 7.23. ResolverService requirements

expression

return type

assertion/note
pre/post-condition

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous resolve operations, as if by calling a.cancel(b, ec).

a.cancel(b, ec);

error_code

Causes any outstanding asynchronous resolve operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.

a.resolve(b, q, ec);

ip::basic_resolver_iterator<
  InternetProtocol>

On success, returns an iterator i such that i != ip::basic_resolver_iterator<InternetProtocol>(). Otherwise returns ip::basic_resolver_iterator<InternetProtocol>().

a.async_resolve(b, q, h);

Initiates an asynchronous resolve operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

If the operation completes successfully, the ResolveHandler object h shall be invoked with an iterator object i such that the condition i != ip::basic_resolver_iterator<InternetProtocol>() holds. Otherwise it is invoked with ip::basic_resolver_iterator<InternetProtocol>().

a.resolve(b, e, ec);

ip::basic_resolver_iterator<
  InternetProtocol>

On success, returns an iterator i such that i != ip::basic_resolver_iterator<InternetProtocol>(). Otherwise returns ip::basic_resolver_iterator<InternetProtocol>().

a.async_resolve(b, e, h);

Initiates an asynchronous resolve operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

If the operation completes successfully, the ResolveHandler object h shall be invoked with an iterator object i such that the condition i != ip::basic_resolver_iterator<InternetProtocol>() holds. Otherwise it is invoked with ip::basic_resolver_iterator<InternetProtocol>().


A sequenced packet socket service must meet the requirements for a socket service, as well as the additional requirements listed below.

In the table below, X denotes a stream socket service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, f denotes a value of type socket_base::message_flags, g denotes an lvalue of type socket_base::message_flags, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.24. StreamSocketService requirements

expression

return type

assertion/note
pre/post-condition

a.receive(b, mb, f, g, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a connected socket b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, sets g to the flags associated with the received data, and returns the number of bytes read. Otherwise, sets g to 0 and returns 0.

a.async_receive(b, mb, f, g, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, sets g to the flags associated with the received data, then invokes the ReadHandler object rh with the number of bytes transferred. Otherwise, sets g to 0 and invokes rh with 0 bytes transferred.

a.send(b, cb, f, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a connected socket b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0.

a.async_send(b, cb, f, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A serial port service must meet the requirements for an I/O object service with support for movability, as well as the additional requirements listed below.

In the table below, X denotes a serial port service class, a and ao denote values of type X, d denotes a serial port device name of type std::string, b and c denote values of type X::implementation_type, n denotes a value of type X::native_handle_type, ec denotes a value of type error_code, s denotes a value meeting SettableSerialPortOption requirements, g denotes a value meeting GettableSerialPortOption requirements, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements. and u and v denote identifiers.

Table 7.25. SerialPortService requirements

expression

return type

assertion/note
pre/post-condition

X::native_handle_type

The implementation-defined native representation of a serial port. Must satisfy the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

a.construct(b);

From IoObjectService requirements.
post: !a.is_open(b).

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous operations, as if by calling a.close(b, ec).

a.move_construct(b, c);

From IoObjectService requirements. The underlying native representation is moved from c to b.

a.move_assign(b, ao, c);

From IoObjectService requirements. Implicitly cancels asynchronous operations associated with b, as if by calling a.close(b, ec). Then the underlying native representation is moved from c to b.

const std::string& u = d;
a.open(b, u, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.assign(b, n, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.is_open(b);

bool

const X& u = a;
const X::implementation_type& v = b;
u.is_open(v);

bool

a.close(b, ec);

error_code

If a.is_open() is true, causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.
post: !a.is_open(b).

a.native_handle(b);

X::native_handle_type

a.cancel(b, ec);

error_code

pre: a.is_open(b).
Causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.

a.set_option(b, s, ec);

error_code

pre: a.is_open(b).

a.get_option(b, g, ec);

error_code

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.get_option(v, g, ec);

error_code

pre: a.is_open(b).

a.send_break(b, ec);

error_code

pre: a.is_open(b).

a.read_some(b, mb, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a serial port b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0. If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

a.async_read_some(b, mb, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a serial port b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.write_some(b, cb, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a serial port b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0. If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.

a.async_write_some(b, cb, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a serial port b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence cb is 0, the asynchronous operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A class is a service if it is publicly derived from another service, or if it is a class derived from io_service::service and contains a publicly-accessible declaration as follows:

static io_service::id id;

All services define a one-argument constructor that takes a reference to the io_service object that owns the service. This constructor is explicit, preventing its participation in automatic conversions. For example:

class my_service : public io_service::service
{
public:
  static io_service::id id;
  explicit my_service(io_service& ios);
private:
  virtual void shutdown_service();
  ...
};

A service's shutdown_service member function must cause all copies of user-defined handler objects that are held by the service to be destroyed.

In the table below, X denotes a serial port option class, a denotes a value of X, ec denotes a value of type error_code, and s denotes a value of implementation-defined type storage (where storage is the type DCB on Windows and termios on POSIX platforms), and u denotes an identifier.

Table 7.26. SettableSerialPortOption requirements

expression

type

assertion/note
pre/post-conditions

const X& u = a;
u.store(s, ec);

error_code

Saves the value of the serial port option to the storage.

If successful, sets ec such that !ec is true. If an error occurred, sets ec such that !!ec is true. Returns ec.


In the table below, X denotes a socket option class, a denotes a value of X, p denotes a value that meets the protocol requirements, and u denotes an identifier.

Table 7.27. SettableSocketOption requirements

expression

type

assertion/note
pre/post-conditions

a.level(p);

int

Returns a value suitable for passing as the level argument to POSIX setsockopt() (or equivalent).

a.name(p);

int

Returns a value suitable for passing as the option_name argument to POSIX setsockopt() (or equivalent).

const X& u = a; u.data(p);

a pointer, convertible to const void*

Returns a pointer suitable for passing as the option_value argument to POSIX setsockopt() (or equivalent).

a.size(p);

size_t

Returns a value suitable for passing as the option_len argument to POSIX setsockopt() (or equivalent), after appropriate integer conversion has been performed.


A shutdown handler must meet the requirements for a handler. A value h of a shutdown handler class should work correctly in the expression h(ec), where ec is an lvalue of type const error_code.

Examples

A free function as a shutdown handler:

void shutdown_handler(
    const boost::system::error_code& ec)
{
  ...
}

A shutdown handler function object:

struct shutdown_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a shutdown handler using bind():

void my_class::shutdown_handler(
    const boost::system::error_code& ec)
{
  ...
}
...
ssl_stream.async_shutdown(
    boost::bind(&my_class::shutdown_handler,
      this, boost::asio::placeholders::error));

A signal handler must meet the requirements for a handler. A value h of a signal handler class should work correctly in the expression h(ec, n), where ec is an lvalue of type const error_code and n is an lvalue of type const int.

Examples

A free function as a signal handler:

void signal_handler(
    const boost::system::error_code& ec,
    int signal_number)
{
  ...
}

A signal handler function object:

struct signal_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec,
      int signal_number)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a signal handler using bind():

void my_class::signal_handler(
    const boost::system::error_code& ec,
    int signal_number)
{
  ...
}
...
my_signal_set.async_wait(
    boost::bind(&my_class::signal_handler,
      this, boost::asio::placeholders::error,
      boost::asio::placeholders::signal_number));

A signal set service must meet the requirements for an I/O object service, as well as the additional requirements listed below.

In the table below, X denotes a signal set service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, n denotes a value of type int, and sh denotes a value meeting SignalHandler requirements.

Table 7.28. SignalSetService requirements

expression

return type

assertion/note
pre/post-condition

a.construct(b);

From IoObjectService requirements.

a.destroy(b);

From IoObjectService requirements. Implicitly clears the registered signals as if by calling a.clear(b, ec), then implicitly cancels outstanding asynchronous operations as if by calling a.cancel(b, ec).

a.add(b, n, ec);

error_code

a.remove(b, n, ec);

error_code

a.clear(b, ec);

error_code

a.cancel(b, ec);

error_code

a.async_wait(b, sh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to wait for the delivery of one of the signals registered for the signal set b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

If the operation completes successfully, the SignalHandler object sh is invoked with the number identifying the delivered signal. Otherwise it is invoked with 0.


A socket acceptor service must meet the requirements for an I/O object service, as well as the additional requirements listed below.

In the table below, X denotes a socket acceptor service class for protocol Protocol, a and ao denote values of type X, b and c denote values of type X::implementation_type, p denotes a value of type Protocol, n denotes a value of type X::native_handle_type, e denotes a value of type Protocol::endpoint, ec denotes a value of type error_code, s denotes a value meeting SettableSocketOption requirements, g denotes a value meeting GettableSocketOption requirements, i denotes a value meeting IoControlCommand requirements, k denotes a value of type basic_socket<Protocol, SocketService> where SocketService is a type meeting socket service requirements, ah denotes a value meeting AcceptHandler requirements, and u and v denote identifiers.

Table 7.29. SocketAcceptorService requirements

expression

return type

assertion/note
pre/post-condition

X::native_handle_type

The implementation-defined native representation of a socket acceptor. Must satisfy the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

a.construct(b);

From IoObjectService requirements.
post: !a.is_open(b).

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous operations, as if by calling a.close(b, ec).

a.move_construct(b, c);

From IoObjectService requirements. The underlying native representation is moved from c to b.

a.move_assign(b, ao, c);

From IoObjectService requirements. Implicitly cancels asynchronous operations associated with b, as if by calling a.close(b, ec). Then the underlying native representation is moved from c to b.

a.open(b, p, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.assign(b, p, n, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.is_open(b);

bool

const X& u = a;
const X::implementation_type& v = b;
u.is_open(v);

bool

a.close(b, ec);

error_code

If a.is_open() is true, causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.
post: !a.is_open(b).

a.native_handle(b);

X::native_handle_type

a.cancel(b, ec);

error_code

pre: a.is_open(b).
Causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.

a.set_option(b, s, ec);

error_code

pre: a.is_open(b).

a.get_option(b, g, ec);

error_code

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.get_option(v, g, ec);

error_code

pre: a.is_open(b).

a.io_control(b, i, ec);

error_code

pre: a.is_open(b).

const typename Protocol::endpoint& u = e;
a.bind(b, u, ec);

error_code

pre: a.is_open(b).

a.local_endpoint(b, ec);

Protocol::endpoint

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.local_endpoint(v, ec);

Protocol::endpoint

pre: a.is_open(b).

a.accept(b, k, &e, ec);

error_code

pre: a.is_open(b) && !k.is_open().
post: k.is_open()

a.accept(b, k, 0, ec);

error_code

pre: a.is_open(b) && !k.is_open().
post: k.is_open()

a.async_accept(b, k, &e, ah);

pre: a.is_open(b) && !k.is_open().
Initiates an asynchronous accept operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The program must ensure the objects k and e are valid until the handler for the asynchronous operation is invoked.

a.async_accept(b, k, 0, ah);

pre: a.is_open(b) && !k.is_open().
Initiates an asynchronous accept operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The program must ensure the object k is valid until the handler for the asynchronous operation is invoked.


A socket service must meet the requirements for an I/O object service with support for movability, as well as the additional requirements listed below.

In the table below, X denotes a socket service class for protocol Protocol, a and ao denote values of type X, b and c denote values of type X::implementation_type, p denotes a value of type Protocol, n denotes a value of type X::native_handle_type, e denotes a value of type Protocol::endpoint, ec denotes a value of type error_code, s denotes a value meeting SettableSocketOption requirements, g denotes a value meeting GettableSocketOption requirements, i denotes a value meeting IoControlCommand requirements, h denotes a value of type socket_base::shutdown_type, ch denotes a value meeting ConnectHandler requirements, and u and v denote identifiers.

Table 7.30. SocketService requirements

expression

return type

assertion/note
pre/post-condition

X::native_handle_type

The implementation-defined native representation of a socket. Must satisfy the requirements of CopyConstructible types (C++ Std, 20.1.3), and the requirements of Assignable types (C++ Std, 23.1).

a.construct(b);

From IoObjectService requirements.
post: !a.is_open(b).

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous operations, as if by calling a.close(b, ec).

a.move_construct(b, c);

From IoObjectService requirements. The underlying native representation is moved from c to b.

a.move_assign(b, ao, c);

From IoObjectService requirements. Implicitly cancels asynchronous operations associated with b, as if by calling a.close(b, ec). Then the underlying native representation is moved from c to b.

a.open(b, p, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.assign(b, p, n, ec);

error_code

pre: !a.is_open(b).
post: !!ec || a.is_open(b).

a.is_open(b);

bool

const X& u = a;
const X::implementation_type& v = b;
u.is_open(v);

bool

a.close(b, ec);

error_code

If a.is_open() is true, causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.
post: !a.is_open(b).

a.native_handle(b);

X::native_handle_type

a.cancel(b, ec);

error_code

pre: a.is_open(b).
Causes any outstanding asynchronous operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted.

a.set_option(b, s, ec);

error_code

pre: a.is_open(b).

a.get_option(b, g, ec);

error_code

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.get_option(v, g, ec);

error_code

pre: a.is_open(b).

a.io_control(b, i, ec);

error_code

pre: a.is_open(b).

a.at_mark(b, ec);

bool

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.at_mark(v, ec);

bool

pre: a.is_open(b).

a.available(b, ec);

size_t

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.available(v, ec);

size_t

pre: a.is_open(b).

const typename Protocol::endpoint& u = e;
a.bind(b, u, ec);

error_code

pre: a.is_open(b).

a.shutdown(b, h, ec);

error_code

pre: a.is_open(b).

a.local_endpoint(b, ec);

Protocol::endpoint

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.local_endpoint(v, ec);

Protocol::endpoint

pre: a.is_open(b).

a.remote_endpoint(b, ec);

Protocol::endpoint

pre: a.is_open(b).

const X& u = a;
const X::implementation_type& v = b;
u.remote_endpoint(v, ec);

Protocol::endpoint

pre: a.is_open(b).

const typename Protocol::endpoint& u = e;
a.connect(b, u, ec);

error_code

pre: a.is_open(b).

const typename Protocol::endpoint& u = e;
a.async_connect(b, u, ch);

pre: a.is_open(b).
Initiates an asynchronous connect operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.


A stream descriptor service must meet the requirements for a descriptor service, as well as the additional requirements listed below.

In the table below, X denotes a stream descriptor service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.31. StreamDescriptorService requirements

expression

return type

assertion/note
pre/post-condition

a.read_some(b, mb, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a descriptor b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0. If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

a.async_read_some(b, mb, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a descriptor b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.write_some(b, cb, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a descriptor b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0. If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.

a.async_write_some(b, cb, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a descriptor b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence cb is 0, the asynchronous operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A stream handle service must meet the requirements for a handle service, as well as the additional requirements listed below.

In the table below, X denotes a stream handle service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.32. StreamHandleService requirements

expression

return type

assertion/note
pre/post-condition

a.read_some(b, mb, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a handle b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0. If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

a.async_read_some(b, mb, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a handle b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.write_some(b, cb, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a handle b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0. If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.

a.async_write_some(b, cb, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a handle b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence cb is 0, the asynchronous operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


A stream socket service must meet the requirements for a socket service, as well as the additional requirements listed below.

In the table below, X denotes a stream socket service class, a denotes a value of type X, b denotes a value of type X::implementation_type, ec denotes a value of type error_code, f denotes a value of type socket_base::message_flags, mb denotes a value satisfying mutable buffer sequence requirements, rh denotes a value meeting ReadHandler requirements, cb denotes a value satisfying constant buffer sequence requirements, and wh denotes a value meeting WriteHandler requirements.

Table 7.33. StreamSocketService requirements

expression

return type

assertion/note
pre/post-condition

a.receive(b, mb, f, ec);

size_t

pre: a.is_open(b).

Reads one or more bytes of data from a connected socket b.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read. Otherwise returns 0. If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

a.async_receive(b, mb, f, rh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to read one or more bytes of data from a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The mutable buffer sequence mb specifies memory where the data should be placed. The operation shall always fill a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of mb until such time as the read operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of mb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence mb is 0, the asynchronous read operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes due to graceful connection closure by the peer, the operation shall fail with error::eof.

If the operation completes successfully, the ReadHandler object rh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.

a.send(b, cb, f, ec);

size_t

pre: a.is_open(b).

Writes one or more bytes of data to a connected socket b.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written. Otherwise returns 0. If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.

a.async_send(b, cb, f, wh);

void

pre: a.is_open(b).

Initiates an asynchronous operation to write one or more bytes of data to a connected socket b. The operation is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The constant buffer sequence cb specifies memory where the data to be written is located. The operation shall always write a buffer in the sequence completely before proceeding to the next.

The implementation shall maintain one or more copies of cb until such time as the write operation no longer requires access to the memory specified by the buffers in the sequence. The program must ensure the memory is valid until:

— the last copy of cb is destroyed, or

— the handler for the asynchronous operation is invoked,

whichever comes first. If the total size of all buffers in the sequence cb is 0, the asynchronous operation shall complete immediately and pass 0 as the argument to the handler that specifies the number of bytes read.

If the operation completes successfully, the WriteHandler object wh is invoked with the number of bytes transferred. Otherwise it is invoked with 0.


In the table below, a denotes a synchronous random-access read device object, o denotes an offset of type boost::uint64_t, mb denotes an object satisfying mutable buffer sequence requirements, and ec denotes an object of type error_code.

Table 7.34. Buffer-oriented synchronous random-access read device requirements

operation

type

semantics, pre/post-conditions

a.read_some_at(o, mb);

size_t

Equivalent to:

error_code ec;
size_t s = a.read_some_at(o, mb, ec);
if (ec) throw system_error(ec);
return s;

a.read_some_at(o, mb, ec);

size_t

Reads one or more bytes of data from the device a at offset o.

The mutable buffer sequence mb specifies memory where the data should be placed. The read_some_at operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read and sets ec such that !ec is true. If an error occurred, returns 0 and sets ec such that !!ec is true.

If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.


In the table below, a denotes a synchronous random-access write device object, o denotes an offset of type boost::uint64_t, cb denotes an object satisfying constant buffer sequence requirements, and ec denotes an object of type error_code.

Table 7.35. Buffer-oriented synchronous random-access write device requirements

operation

type

semantics, pre/post-conditions

a.write_some_at(o, cb);

size_t

Equivalent to:

error_code ec;
size_t s = a.write_some(o, cb, ec);
if (ec) throw system_error(ec);
return s;

a.write_some_at(o, cb, ec);

size_t

Writes one or more bytes of data to the device a at offset o.

The constant buffer sequence cb specifies memory where the data to be written is located. The write_some_at operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written and sets ec such that !ec is true. If an error occurred, returns 0 and sets ec such that !!ec is true.

If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.


In the table below, a denotes a synchronous read stream object, mb denotes an object satisfying mutable buffer sequence requirements, and ec denotes an object of type error_code.

Table 7.36. Buffer-oriented synchronous read stream requirements

operation

type

semantics, pre/post-conditions

a.read_some(mb);

size_t

Equivalent to:

error_code ec;
size_t s = a.read_some(mb, ec);
if (ec) throw system_error(ec);
return s;

a.read_some(mb, ec);

size_t

Reads one or more bytes of data from the stream a.

The mutable buffer sequence mb specifies memory where the data should be placed. The read_some operation shall always fill a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes read and sets ec such that !ec is true. If an error occurred, returns 0 and sets ec such that !!ec is true.

If the total size of all buffers in the sequence mb is 0, the function shall return 0 immediately.


In the table below, a denotes a synchronous write stream object, cb denotes an object satisfying constant buffer sequence requirements, and ec denotes an object of type error_code.

Table 7.37. Buffer-oriented synchronous write stream requirements

operation

type

semantics, pre/post-conditions

a.write_some(cb);

size_t

Equivalent to:

error_code ec;
size_t s = a.write_some(cb, ec);
if (ec) throw system_error(ec);
return s;

a.write_some(cb, ec);

size_t

Writes one or more bytes of data to the stream a.

The constant buffer sequence cb specifies memory where the data to be written is located. The write_some operation shall always write a buffer in the sequence completely before proceeding to the next.

If successful, returns the number of bytes written and sets ec such that !ec is true. If an error occurred, returns 0 and sets ec such that !!ec is true.

If the total size of all buffers in the sequence cb is 0, the function shall return 0 immediately.


In the table below, X denotes a time traits class for time type Time, t, t1, and t2 denote values of type Time, and d denotes a value of type X::duration_type.

Table 7.38. TimeTraits requirements

expression

return type

assertion/note
pre/post-condition

X::time_type

Time

Represents an absolute time. Must support default construction, and meet the requirements for CopyConstructible and Assignable.

X::duration_type

Represents the difference between two absolute times. Must support default construction, and meet the requirements for CopyConstructible and Assignable. A duration can be positive, negative, or zero.

X::now();

time_type

Returns the current time.

X::add(t, d);

time_type

Returns a new absolute time resulting from adding the duration d to the absolute time t.

X::subtract(t1, t2);

duration_type

Returns the duration resulting from subtracting t2 from t1.

X::less_than(t1, t2);

bool

Returns whether t1 is to be treated as less than t2.

X::to_posix_duration(d);

date_time::time_duration_type

Returns the date_time::time_duration_type value that most closely represents the duration d.


A timer service must meet the requirements for an I/O object service, as well as the additional requirements listed below.

In the table below, X denotes a timer service class for time type Time and traits type TimeTraits, a denotes a value of type X, b denotes a value of type X::implementation_type, t denotes a value of type Time, d denotes a value of type TimeTraits::duration_type, e denotes a value of type error_code, and h denotes a value meeting WaitHandler requirements.

Table 7.39. TimerService requirements

expression

return type

assertion/note
pre/post-condition

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous wait operations, as if by calling a.cancel(b, e).

a.cancel(b, e);

size_t

Causes any outstanding asynchronous wait operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted. Sets e to indicate success or failure. Returns the number of operations that were cancelled.

a.expires_at(b);

Time

a.expires_at(b, t, e);

size_t

Implicitly cancels asynchronous wait operations, as if by calling a.cancel(b, e). Returns the number of operations that were cancelled.
post: a.expires_at(b) == t.

a.expires_from_now(b);

TimeTraits::duration_type

Returns a value equivalent to TimeTraits::subtract(a.expires_at(b), TimeTraits::now()).

a.expires_from_now(b, d, e);

size_t

Equivalent to a.expires_at(b, TimeTraits::add(TimeTraits::now(), d), e).

a.wait(b, e);

error_code

Sets e to indicate success or failure. Returns e.
post: !!e || !TimeTraits::lt(TimeTraits::now(), a.expires_at(b)).

a.async_wait(b, h);

Initiates an asynchronous wait operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The handler shall be posted for execution only if the condition !!ec || !TimeTraits::lt(TimeTraits::now(), a.expires_at(b)) holds, where ec is the error code to be passed to the handler.


A waitable timer service must meet the requirements for an I/O object service, as well as the additional requirements listed below.

In the table below, X denotes a waitable timer service class for clock type Clock, where Clock meets the C++11 clock type requirements, a denotes a value of type X, b denotes a value of type X::implementation_type, t denotes a value of type Clock::time_point, d denotes a value of type Clock::duration, e denotes a value of type error_code, and h denotes a value meeting WaitHandler requirements.

Table 7.40. WaitableTimerService requirements

expression

return type

assertion/note
pre/post-condition

a.destroy(b);

From IoObjectService requirements. Implicitly cancels asynchronous wait operations, as if by calling a.cancel(b, e).

a.cancel(b, e);

size_t

Causes any outstanding asynchronous wait operations to complete as soon as possible. Handlers for cancelled operations shall be passed the error code error::operation_aborted. Sets e to indicate success or failure. Returns the number of operations that were cancelled.

a.expires_at(b);

Clock::time_point

a.expires_at(b, t, e);

size_t

Implicitly cancels asynchronous wait operations, as if by calling a.cancel(b, e). Returns the number of operations that were cancelled.
post: a.expires_at(b) == t.

a.expires_from_now(b);

Clock::duration

Returns a value equivalent to a.expires_at(b) - Clock::now().

a.expires_from_now(b, d, e);

size_t

Equivalent to a.expires_at(b, Clock::now() + d, e).

a.wait(b, e);

error_code

Sets e to indicate success or failure. Returns e.
post: !!e || !(Clock::now() < a.expires_at(b)).

a.async_wait(b, h);

Initiates an asynchronous wait operation that is performed via the io_service object a.get_io_service() and behaves according to asynchronous operation requirements.

The handler shall be posted for execution only if the condition !!ec || !(Clock::now() < a.expires_at(b)) holds, where ec is the error code to be passed to the handler.


A wait handler must meet the requirements for a handler. A value h of a wait handler class should work correctly in the expression h(ec), where ec is an lvalue of type const error_code.

Examples

A free function as a wait handler:

void wait_handler(
    const boost::system::error_code& ec)
{
  ...
}

A wait handler function object:

struct wait_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a wait handler using bind():

void my_class::wait_handler(
    const boost::system::error_code& ec)
{
  ...
}
...
socket.async_wait(...,
    boost::bind(&my_class::wait_handler,
      this, boost::asio::placeholders::error));

In the table below, X denotes a wait traits class for clock type Clock, where Clock meets the C++11 type requirements for a clock, and d denotes a value of type Clock::duration.

Table 7.41. WaitTraits requirements

expression

return type

assertion/note
pre/post-condition

X::to_wait_duration(d);

Clock::duration

Returns the maximum duration to be used for an individual, implementation-defined wait operation.


A write handler must meet the requirements for a handler. A value h of a write handler class should work correctly in the expression h(ec, s), where ec is an lvalue of type const error_code and s is an lvalue of type const size_t.

Examples

A free function as a write handler:

void write_handler(
    const boost::system::error_code& ec,
    std::size_t bytes_transferred)
{
  ...
}

A write handler function object:

struct write_handler
{
  ...
  void operator()(
      const boost::system::error_code& ec,
      std::size_t bytes_transferred)
  {
    ...
  }
  ...
};

A non-static class member function adapted to a write handler using bind():

void my_class::write_handler(
    const boost::system::error_code& ec,
    std::size_t bytes_transferred)
{
  ...
}
...
socket.async_write(...,
    boost::bind(&my_class::write_handler,
      this, boost::asio::placeholders::error,
      boost::asio::placeholders::bytes_transferred));

template<
    typename Service>
void add_service(
    io_service & ios,
    Service * svc);

This function is used to add a service to the io_service.

Parameters

ios

The io_service object that owns the service.

svc

The service object. On success, ownership of the service object is transferred to the io_service. When the io_service object is destroyed, it will destroy the service object by performing:

delete static_cast<io_service::service*>(svc)

Exceptions

boost::asio::service_already_exists

Thrown if a service of the given type is already present in the io_service.

boost::asio::invalid_service_owner

Thrown if the service's owning io_service is not the io_service object specified by the ios parameter.

Requirements

Header: boost/asio/io_service.hpp

Convenience header: boost/asio.hpp

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.

The default implementation of these allocation hooks uses operator new and operator delete.

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.

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

Header: boost/asio/handler_alloc_hook.hpp

Convenience header: boost/asio.hpp

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.

The default implementation of these allocation hooks uses operator new and operator delete.

Requirements

Header: boost/asio/handler_alloc_hook.hpp

Convenience header: boost/asio.hpp

Default invoke function for handlers.

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

template<
    typename Function>
void asio_handler_invoke(
    const Function & function,
    ... );
  » more...

Completion handlers for asynchronous operations are invoked by the 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 io_service object. Handlers may subsequently be invoked through other objects (such as 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 invokes the function object like so:

function();

If necessary, the default implementation makes a copy of the function object so that the non-const operator() can be used.

Example
class my_handler;

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

Header: boost/asio/handler_invoke_hook.hpp

Convenience header: boost/asio.hpp

Default handler invocation hook used for non-const function objects.

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

Default handler invocation hook used for const function objects.

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

Default continuation function for handlers.

bool asio_handler_is_continuation(
    ... );

Asynchronous operations may represent a continuation of the asynchronous control flow associated with the current handler. The implementation can use this knowledge to optimise scheduling of the handler.

Implement asio_handler_is_continuation for your own handlers to indicate when a handler represents a continuation.

The default implementation of the continuation hook returns false.

Example
class my_handler;

bool asio_handler_is_continuation(my_handler* context)
{
  return true;
}
Requirements

Header: boost/asio/handler_continuation_hook.hpp

Convenience header: boost/asio.hpp

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

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ComposedConnectHandler>
void-or-deduced async_connect(
    basic_socket< Protocol, SocketService > & s,
    Iterator begin,
    ComposedConnectHandler handler);
  » more...

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ComposedConnectHandler>
void-or-deduced async_connect(
    basic_socket< Protocol, SocketService > & s,
    Iterator begin,
    Iterator end,
    ComposedConnectHandler handler);
  » more...

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ConnectCondition,
    typename ComposedConnectHandler>
void-or-deduced async_connect(
    basic_socket< Protocol, SocketService > & s,
    Iterator begin,
    ConnectCondition connect_condition,
    ComposedConnectHandler handler);
  » more...

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ConnectCondition,
    typename ComposedConnectHandler>
void-or-deduced async_connect(
    basic_socket< Protocol, SocketService > & s,
    Iterator begin,
    Iterator end,
    ConnectCondition connect_condition,
    ComposedConnectHandler handler);
  » more...
Requirements

Header: boost/asio/connect.hpp

Convenience header: boost/asio.hpp

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

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ComposedConnectHandler>
void-or-deduced 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.

Parameters

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().

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.

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)
{
  // ...
}

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

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ComposedConnectHandler>
void-or-deduced 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.

Parameters

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().

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)
{
  // ...
}

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

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ConnectCondition,
    typename ComposedConnectHandler>
void-or-deduced 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.

Parameters

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().

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.

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

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

template<
    typename Protocol,
    typename SocketService,
    typename Iterator,
    typename ConnectCondition,
    typename ComposedConnectHandler>
void-or-deduced 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.

Parameters

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().

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

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

template<
    typename AsyncReadStream,
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_read(
    AsyncReadStream & s,
    const MutableBufferSequence & buffers,
    ReadHandler handler);
  » more...

template<
    typename AsyncReadStream,
    typename MutableBufferSequence,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced async_read(
    AsyncReadStream & s,
    const MutableBufferSequence & buffers,
    CompletionCondition completion_condition,
    ReadHandler handler);
  » more...

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read(
    AsyncReadStream & s,
    basic_streambuf< Allocator > & b,
    ReadHandler handler);
  » more...

template<
    typename AsyncReadStream,
    typename Allocator,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced async_read(
    AsyncReadStream & s,
    basic_streambuf< Allocator > & b,
    CompletionCondition completion_condition,
    ReadHandler handler);
  » more...
Requirements

Header: boost/asio/read.hpp

Convenience header: boost/asio.hpp

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

template<
    typename AsyncReadStream,
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Example

To read into a single data buffer use the buffer function as follows:

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

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Remarks

This overload is equivalent to calling:

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

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

template<
    typename AsyncReadStream,
    typename MutableBufferSequence,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced 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.
Parameters

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().

Example

To read into a single data buffer use the buffer function as follows:

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

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

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

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced 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.

Parameters

s

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

b

A 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().

Remarks

This overload is equivalent to calling:

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

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

template<
    typename AsyncReadStream,
    typename Allocator,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced 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.

Parameters

s

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

b

A 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().

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

template<
    typename AsyncRandomAccessReadDevice,
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    uint64_t offset,
    const MutableBufferSequence & buffers,
    ReadHandler handler);
  » more...

template<
    typename AsyncRandomAccessReadDevice,
    typename MutableBufferSequence,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    uint64_t offset,
    const MutableBufferSequence & buffers,
    CompletionCondition completion_condition,
    ReadHandler handler);
  » more...

template<
    typename AsyncRandomAccessReadDevice,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    uint64_t offset,
    basic_streambuf< Allocator > & b,
    ReadHandler handler);
  » more...

template<
    typename AsyncRandomAccessReadDevice,
    typename Allocator,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    uint64_t offset,
    basic_streambuf< Allocator > & b,
    CompletionCondition completion_condition,
    ReadHandler handler);
  » more...
Requirements

Header: boost/asio/read_at.hpp

Convenience header: boost/asio.hpp

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

template<
    typename AsyncRandomAccessReadDevice,
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    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.

Parameters

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().

Example

To read into a single data buffer use the buffer function as follows:

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

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Remarks

This overload is equivalent to calling:

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

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

template<
    typename AsyncRandomAccessReadDevice,
    typename MutableBufferSequence,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    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.
Parameters

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().

Example

To read into a single data buffer use the 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 buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

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

template<
    typename AsyncRandomAccessReadDevice,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    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.

Parameters

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 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().

Remarks

This overload is equivalent to calling:

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

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

template<
    typename AsyncRandomAccessReadDevice,
    typename Allocator,
    typename CompletionCondition,
    typename ReadHandler>
void-or-deduced async_read_at(
    AsyncRandomAccessReadDevice & d,
    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.

Parameters

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 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().

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 AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    char delim,
    ReadHandler handler);
  » more...

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    const std::string & delim,
    ReadHandler handler);
  » more...

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    const boost::regex & expr,
    ReadHandler handler);
  » more...

template<
    typename AsyncReadStream,
    typename Allocator,
    typename MatchCondition,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    MatchCondition match_condition,
    ReadHandler handler,
    typename enable_if< is_match_condition< MatchCondition >::value >::type *  = 0);
  » more...
Requirements

Header: boost/asio/read_until.hpp

Convenience header: boost/asio.hpp

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

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

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.

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

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

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.

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

template<
    typename AsyncReadStream,
    typename Allocator,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

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.

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

template<
    typename AsyncReadStream,
    typename Allocator,
    typename MatchCondition,
    typename ReadHandler>
void-or-deduced async_read_until(
    AsyncReadStream & s,
    boost::asio::basic_streambuf< Allocator > & b,
    MatchCondition match_condition,
    ReadHandler handler,
    typename enable_if< is_match_condition< MatchCondition >::value >::type *  = 0);

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

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

Parameters

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().

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.

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

An interface for customising the behaviour of an initiating function.

template<
    typename Handler>
class async_result
Types

Name

Description

type

The return type of the initiating function.

Member Functions

Name

Description

async_result

Construct an async result from a given handler.

get

Obtain the value to be returned from the initiating function.

This template may be specialised for user-defined handler types.

Requirements

Header: boost/asio/async_result.hpp

Convenience header: boost/asio.hpp

Construct an async result from a given handler.

async_result(
    Handler & );

When using a specalised async_result, the constructor has an opportunity to initialise some state associated with the handler, which is then returned from the initiating function.

Obtain the value to be returned from the initiating function.

type get();

The return type of the initiating function.

typedef void type;
Requirements

Header: boost/asio/async_result.hpp

Convenience header: boost/asio.hpp

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

template<
    typename AsyncWriteStream,
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_write(
    AsyncWriteStream & s,
    const ConstBufferSequence & buffers,
    WriteHandler handler);
  » more...

template<
    typename AsyncWriteStream,
    typename ConstBufferSequence,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced async_write(
    AsyncWriteStream & s,
    const ConstBufferSequence & buffers,
    CompletionCondition completion_condition,
    WriteHandler handler);
  » more...

template<
    typename AsyncWriteStream,
    typename Allocator,
    typename WriteHandler>
void-or-deduced async_write(
    AsyncWriteStream & s,
    basic_streambuf< Allocator > & b,
    WriteHandler handler);
  » more...

template<
    typename AsyncWriteStream,
    typename Allocator,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced async_write(
    AsyncWriteStream & s,
    basic_streambuf< Allocator > & b,
    CompletionCondition completion_condition,
    WriteHandler handler);
  » more...
Requirements

Header: boost/asio/write.hpp

Convenience header: boost/asio.hpp

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

template<
    typename AsyncWriteStream,
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Example

To write a single data buffer use the buffer function as follows:

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

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

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

template<
    typename AsyncWriteStream,
    typename ConstBufferSequence,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Example

To write a single data buffer use the buffer function as follows:

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

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

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

template<
    typename AsyncWriteStream,
    typename Allocator,
    typename WriteHandler>
void-or-deduced 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 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.

Parameters

s

The stream to which the data is to be written. The type must support the AsyncWriteStream concept.

b

A 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().

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

template<
    typename AsyncWriteStream,
    typename Allocator,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced 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 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.

Parameters

s

The stream to which the data is to be written. The type must support the AsyncWriteStream concept.

b

A 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().

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

template<
    typename AsyncRandomAccessWriteDevice,
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    uint64_t offset,
    const ConstBufferSequence & buffers,
    WriteHandler handler);
  » more...

template<
    typename AsyncRandomAccessWriteDevice,
    typename ConstBufferSequence,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    uint64_t offset,
    const ConstBufferSequence & buffers,
    CompletionCondition completion_condition,
    WriteHandler handler);
  » more...

template<
    typename AsyncRandomAccessWriteDevice,
    typename Allocator,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    uint64_t offset,
    basic_streambuf< Allocator > & b,
    WriteHandler handler);
  » more...

template<
    typename AsyncRandomAccessWriteDevice,
    typename Allocator,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    uint64_t offset,
    basic_streambuf< Allocator > & b,
    CompletionCondition completion_condition,
    WriteHandler handler);
  » more...
Requirements

Header: boost/asio/write_at.hpp

Convenience header: boost/asio.hpp

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

template<
    typename AsyncRandomAccessWriteDevice,
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    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, and is known as a composed operation. The program must ensure that the device performs no overlapping write operations (such as async_write_at, the device's async_write_some_at function, or any other composed operations that perform writes) until this operation completes. Operations are overlapping if the regions defined by their offsets, and the numbers of bytes to write, intersect.

Parameters

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().

Example

To write a single data buffer use the buffer function as follows:

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

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

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

template<
    typename AsyncRandomAccessWriteDevice,
    typename ConstBufferSequence,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    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, and is known as a composed operation. The program must ensure that the device performs no overlapping write operations (such as async_write_at, the device's async_write_some_at function, or any other composed operations that perform writes) until this operation completes. Operations are overlapping if the regions defined by their offsets, and the numbers of bytes to write, intersect.

Parameters

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().

Example

To write a single data buffer use the 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 buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

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

template<
    typename AsyncRandomAccessWriteDevice,
    typename Allocator,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    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 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, and is known as a composed operation. The program must ensure that the device performs no overlapping write operations (such as async_write_at, the device's async_write_some_at function, or any other composed operations that perform writes) until this operation completes. Operations are overlapping if the regions defined by their offsets, and the numbers of bytes to write, intersect.

Parameters

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 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().

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

template<
    typename AsyncRandomAccessWriteDevice,
    typename Allocator,
    typename CompletionCondition,
    typename WriteHandler>
void-or-deduced async_write_at(
    AsyncRandomAccessWriteDevice & d,
    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 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, and is known as a composed operation. The program must ensure that the device performs no overlapping write operations (such as async_write_at, the device's async_write_some_at function, or any other composed operations that perform writes) until this operation completes. Operations are overlapping if the regions defined by their offsets, and the numbers of bytes to write, intersect.

Parameters

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 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().

basic_datagram_socket::assign
basic_datagram_socket::async_connect
basic_datagram_socket::async_receive
basic_datagram_socket::async_receive_from
basic_datagram_socket::async_send
basic_datagram_socket::async_send_to
basic_datagram_socket::at_mark
basic_datagram_socket::available
basic_datagram_socket::basic_datagram_socket
basic_datagram_socket::bind
basic_datagram_socket::broadcast
basic_datagram_socket::bytes_readable
basic_datagram_socket::cancel
basic_datagram_socket::close
basic_datagram_socket::connect
basic_datagram_socket::debug
basic_datagram_socket::do_not_route
basic_datagram_socket::enable_connection_aborted
basic_datagram_socket::endpoint_type
basic_datagram_socket::get_implementation
basic_datagram_socket::get_io_service
basic_datagram_socket::get_option
basic_datagram_socket::get_service
basic_datagram_socket::implementation
basic_datagram_socket::implementation_type
basic_datagram_socket::io_control
basic_datagram_socket::is_open
basic_datagram_socket::keep_alive
basic_datagram_socket::linger
basic_datagram_socket::local_endpoint
basic_datagram_socket::lowest_layer
basic_datagram_socket::lowest_layer_type
basic_datagram_socket::max_connections
basic_datagram_socket::message_do_not_route
basic_datagram_socket::message_end_of_record
basic_datagram_socket::message_flags
basic_datagram_socket::message_out_of_band
basic_datagram_socket::message_peek
basic_datagram_socket::native
basic_datagram_socket::native_handle
basic_datagram_socket::native_handle_type
basic_datagram_socket::native_non_blocking
basic_datagram_socket::native_type
basic_datagram_socket::non_blocking
basic_datagram_socket::non_blocking_io
basic_datagram_socket::open
basic_datagram_socket::operator=
basic_datagram_socket::protocol_type
basic_datagram_socket::receive
basic_datagram_socket::receive_buffer_size
basic_datagram_socket::receive_from
basic_datagram_socket::receive_low_watermark
basic_datagram_socket::remote_endpoint
basic_datagram_socket::reuse_address
basic_datagram_socket::send
basic_datagram_socket::send_buffer_size
basic_datagram_socket::send_low_watermark
basic_datagram_socket::send_to
basic_datagram_socket::service
basic_datagram_socket::service_type
basic_datagram_socket::set_option
basic_datagram_socket::shutdown
basic_datagram_socket::shutdown_type

Provides datagram-oriented socket functionality.

template<
    typename Protocol,
    typename DatagramSocketService = datagram_socket_service<Protocol>>
class basic_datagram_socket :
  public basic_socket< Protocol, DatagramSocketService >
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

async_receive

Start an asynchronous receive on a connected socket.

async_receive_from

Start an asynchronous receive.

async_send

Start an asynchronous send on a connected socket.

async_send_to

Start an asynchronous send.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

basic_datagram_socket

Construct a basic_datagram_socket without opening it.

Construct and open a basic_datagram_socket.

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

Construct a basic_datagram_socket on an existing native socket.

Move-construct a basic_datagram_socket from another.

Move-construct a basic_datagram_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_datagram_socket from another.

Move-assign a basic_datagram_socket from a socket of another protocol type.

receive

Receive some data on a connected socket.

receive_from

Receive a datagram with the endpoint of the sender.

remote_endpoint

Get the remote endpoint of the socket.

send

Send some data on a connected socket.

send_to

Send a datagram to the specified endpoint.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_datagram_socket class template provides asynchronous and blocking datagram-oriented socket functionality.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Start an asynchronous connect.

template<
    typename ConnectHandler>
void-or-deduced 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.

Parameters

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().

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

Start an asynchronous receive on a connected socket.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    ReadHandler handler);
  » more...

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags,
    ReadHandler handler);
  » more...

Start an asynchronous receive on a connected socket.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive on a connected socket.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    ReadHandler handler);
  » more...

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    socket_base::message_flags flags,
    ReadHandler handler);
  » more...

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive_from(
    boost::asio::buffer(data, size), sender_endpoint, handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Start an asynchronous send on a connected socket.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    WriteHandler handler);
  » more...

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    WriteHandler handler);
  » more...

Start an asynchronous send on a connected socket.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    WriteHandler handler);

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

Parameters

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().

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.

Example

To send a single data buffer use the buffer function as follows:

socket.async_send(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send on a connected socket.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    WriteHandler handler);

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

Parameters

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().

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.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    WriteHandler handler);
  » more...

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    socket_base::message_flags flags,
    WriteHandler handler);
  » more...

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Example

To send a single data buffer use the 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 buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Determine whether the socket is at the out-of-band data mark.

bool at_mark() const;
  » more...

bool at_mark(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Determine the number of bytes available for reading.

std::size_t available() const;
  » more...

std::size_t available(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Construct a basic_datagram_socket without opening it.

explicit basic_datagram_socket(
    boost::asio::io_service & io_service);
  » more...

Construct and open a basic_datagram_socket.

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

Construct a 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);
  » more...

Construct a 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);
  » more...

Move-construct a basic_datagram_socket from another.

basic_datagram_socket(
    basic_datagram_socket && other);
  » more...

Move-construct a basic_datagram_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename DatagramSocketService1>
basic_datagram_socket(
    basic_datagram_socket< Protocol1, DatagramSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
  » more...

Construct a 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.

Parameters

io_service

The io_service object that the datagram socket will use to dispatch handlers for any asynchronous operations performed on the socket.

Construct and open a basic_datagram_socket.

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

This constructor creates and opens a datagram socket.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a basic_datagram_socket from another.

basic_datagram_socket(
    basic_datagram_socket && other);

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

Parameters

other

The other basic_datagram_socket object from which the move will occur.

Remarks

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

Move-construct a basic_datagram_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename DatagramSocketService1>
basic_datagram_socket(
    basic_datagram_socket< Protocol1, DatagramSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);

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

Parameters

other

The other basic_datagram_socket object from which the move will occur.

Remarks

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

Bind the socket to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

endpoint

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

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the socket.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Close the socket.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure. Note that, even if the function indicates an error, the underlying descriptor is closed.

Remarks

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

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.

Parameters

ec

Set to indicate what error occurred, if any. Note that, even if the function indicates an error, the underlying descriptor is closed.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::system::error_code ec;
socket.close(ec);
if (ec)
{
  // An error occurred.
}
Remarks

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

Connect the socket to the specified endpoint.

void connect(
    const endpoint_type & peer_endpoint);
  » more...

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the socket.

void get_option(
    GettableSocketOption & option) const;
  » more...

boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec) const;
  » more...

Inherited from basic_socket.

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;

This function is used to get the current value of an option on the socket.

Parameters

option

The option value to be obtained from the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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.value();

Inherited from basic_socket.

Get an option from the socket.

template<
    typename 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.

Parameters

option

The option value to be obtained from the socket.

ec

Set to indicate what error occurred, if any.

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.value();

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the socket.

void io_control(
    IoControlCommand & command);
  » more...

boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the socket.

Parameters

command

The IO control command to be performed on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the socket.

ec

Set to indicate what error occurred, if any.

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

Inherited from basic_socket.

Determine whether the socket is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Get the local endpoint of the socket.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

Inherited from basic_socket.

A basic_socket is always the lowest layer.

typedef basic_socket< Protocol, DatagramSocketService > lowest_layer_type;
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

Inherited from 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.

Inherited from 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.

The native representation of a socket.

typedef DatagramSocketService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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

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.

Parameters

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

Exceptions

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.

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

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.

Parameters

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.

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

(Deprecated: Use native_handle_type.) The native representation of a socket.

typedef DatagramSocketService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the socket.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
  » more...

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

Inherited from basic_socket.

Gets the non-blocking mode of the socket.

bool non_blocking() const;
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.

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.

Inherited from basic_socket.

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Open the socket using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

Move-assign a basic_datagram_socket from another.

basic_datagram_socket & operator=(
    basic_datagram_socket && other);
  » more...

Move-assign a basic_datagram_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename DatagramSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_datagram_socket >::type & operator=(
    basic_datagram_socket< Protocol1, DatagramSocketService1 > && other);
  » more...

Move-assign a 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.

Parameters

other

The other basic_datagram_socket object from which the move will occur.

Remarks

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

Move-assign a basic_datagram_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename DatagramSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_datagram_socket >::type & operator=(
    basic_datagram_socket< Protocol1, DatagramSocketService1 > && other);

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

Parameters

other

The other basic_datagram_socket object from which the move will occur.

Remarks

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

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Receive some data on a connected socket.

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Receive some data on a connected socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be received.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Example

To receive into a single data buffer use the buffer function as follows:

socket.receive(boost::asio::buffer(data, size));

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive some data on a connected socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be received.

flags

Flags specifying how the receive call is to be made.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Receive some data on a connected socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

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.

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Receive a datagram with the endpoint of the sender.

template<
    typename MutableBufferSequence>
std::size_t receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    socket_base::message_flags flags);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Receive a datagram with the endpoint of the sender.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

Example

To receive into a single data buffer use the buffer function as follows:

boost::asio::ip::udp::endpoint sender_endpoint;
socket.receive_from(
    boost::asio::buffer(data, size), sender_endpoint);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive a datagram with the endpoint of the sender.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

Receive a datagram with the endpoint of the sender.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;
  » more...

endpoint_type remote_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the remote endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Send some data on a connected socket.

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Send some data on a connected socket.

template<
    typename 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.

Parameters

buffers

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

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Example

To send a single data buffer use the buffer function as follows:

socket.send(boost::asio::buffer(data, size));

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send some data on a connected socket.

template<
    typename 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.

Parameters

buffers

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

flags

Flags specifying how the send call is to be made.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Send some data on a connected socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent.

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.

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Send a datagram to the specified endpoint.

template<
    typename ConstBufferSequence>
std::size_t send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    socket_base::message_flags flags);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Send a datagram to the specified endpoint.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be sent to the remote endpoint.

destination

The remote endpoint to which the data will be sent.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Example

To send a single data buffer use the 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 buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send a datagram to the specified endpoint.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Send a datagram to the specified endpoint.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent.

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef DatagramSocketService service_type;
Requirements

Header: boost/asio/basic_datagram_socket.hpp

Convenience header: boost/asio.hpp

Set an option on the socket.

void set_option(
    const SettableSocketOption & option);
  » more...

boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the socket.

Parameters

option

The new option value to be set on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Set an option on the socket.

template<
    typename 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.

Parameters

option

The new option value to be set on the socket.

ec

Set to indicate what error occurred, if any.

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

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);
  » more...

boost::system::error_code shutdown(
    shutdown_type what,
    boost::system::error_code & ec);
  » more...

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.

Parameters

what

Determines what types of operation will no longer be allowed.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

what

Determines what types of operation will no longer be allowed.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

Provides waitable timer functionality.

template<
    typename Time,
    typename TimeTraits = boost::asio::time_traits<Time>,
    typename TimerService = deadline_timer_service<Time, TimeTraits>>
class basic_deadline_timer :
  public basic_io_object< TimerService >
Types

Name

Description

duration_type

The duration type.

implementation_type

The underlying implementation type of I/O object.

service_type

The type of the service that will be used to provide I/O operations.

time_type

The time type.

traits_type

The time traits type.

Member Functions

Name

Description

async_wait

Start an asynchronous wait on the 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.

cancel

Cancel any asynchronous operations that are waiting on the timer.

cancel_one

Cancels one asynchronous operation that is waiting on the timer.

expires_at

Get the timer's expiry time as an absolute time.

Set the timer's expiry time as an absolute time.

expires_from_now

Get the timer's expiry time relative to now.

Set the timer's expiry time relative to now.

get_io_service

Get the io_service associated with the object.

wait

Perform a blocking wait on the timer.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The 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 deadline_timer typedef.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

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

Header: boost/asio/basic_deadline_timer.hpp

Convenience header: boost/asio.hpp

Start an asynchronous wait on the timer.

template<
    typename WaitHandler>
void-or-deduced 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.
Parameters

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().

Constructor.

explicit basic_deadline_timer(
    boost::asio::io_service & io_service);
  » more...

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);
  » more...

Constructor to set a particular expiry time relative to now.

basic_deadline_timer(
    boost::asio::io_service & io_service,
    const duration_type & expiry_time);
  » more...

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.

Parameters

io_service

The io_service object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer.

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.

Parameters

io_service

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

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.

Parameters

io_service

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

Cancel any asynchronous operations that are waiting on the timer.

std::size_t cancel();
  » more...

std::size_t cancel(
    boost::system::error_code & ec);
  » more...

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.

Return Value

The number of asynchronous operations that were cancelled.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled.

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.

Cancels one asynchronous operation that is waiting on the timer.

std::size_t cancel_one();
  » more...

std::size_t cancel_one(
    boost::system::error_code & ec);
  » more...

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.

Return Value

The number of asynchronous operations that were cancelled. That is, either 0 or 1.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled. That is, either 0 or 1.

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.

The duration type.

typedef traits_type::duration_type duration_type;
Requirements

Header: boost/asio/basic_deadline_timer.hpp

Convenience header: boost/asio.hpp

Get the timer's expiry time as an absolute time.

time_type expires_at() const;
  » more...

Set the timer's expiry time as an absolute time.

std::size_t expires_at(
    const time_type & expiry_time);
  » more...

std::size_t expires_at(
    const time_type & expiry_time,
    boost::system::error_code & ec);
  » more...

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

Return Value

The number of asynchronous operations that were cancelled.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled.

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.

Get the timer's expiry time relative to now.

duration_type expires_from_now() const;
  » more...

Set the timer's expiry time relative to now.

std::size_t expires_from_now(
    const duration_type & expiry_time);
  » more...

std::size_t expires_from_now(
    const duration_type & expiry_time,
    boost::system::error_code & ec);
  » more...

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

Return Value

The number of asynchronous operations that were cancelled.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled.

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.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_deadline_timer.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef TimerService service_type;
Requirements

Header: boost/asio/basic_deadline_timer.hpp

Convenience header: boost/asio.hpp

The time type.

typedef traits_type::time_type time_type;
Requirements

Header: boost/asio/basic_deadline_timer.hpp

Convenience header: boost/asio.hpp

The time traits type.

typedef TimeTraits traits_type;
Requirements

Header: boost/asio/basic_deadline_timer.hpp

Convenience header: boost/asio.hpp

Perform a blocking wait on the timer.

void wait();
  » more...

void wait(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Base class for all I/O objects.

template<
    typename IoObjectService>
class basic_io_object
Types

Name

Description

implementation_type

The underlying implementation type of I/O object.

service_type

The type of the service that will be used to provide I/O operations.

Member Functions

Name

Description

get_io_service

Get the io_service associated with the object.

Protected Member Functions

Name

Description

basic_io_object

Construct a basic_io_object.

Move-construct a basic_io_object.

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

operator=

Move-assign a basic_io_object.

~basic_io_object

Protected destructor to prevent deletion through this type.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

Remarks

All I/O objects are non-copyable. However, when using C++0x, certain I/O objects do support move construction and move assignment.

Requirements

Header: boost/asio/basic_io_object.hpp

Convenience header: boost/asio.hpp

Construct a basic_io_object.

explicit basic_io_object(
    boost::asio::io_service & io_service);
  » more...

Move-construct a basic_io_object.

basic_io_object(
    basic_io_object && other);
  » more...

Construct a basic_io_object.

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

Performs:

get_service().construct(get_implementation());

Move-construct a basic_io_object.

basic_io_object(
    basic_io_object && other);

Performs:

get_service().move_construct(
    get_implementation(), other.get_implementation());
Remarks

Available only for services that support movability,

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Get the service associated with the I/O object.

service_type & get_service();

Get the service associated with the I/O object.

const service_type & get_service() const;

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_io_object.hpp

Convenience header: boost/asio.hpp

Move-assign a basic_io_object.

basic_io_object & operator=(
    basic_io_object && other);

Performs:

get_service().move_assign(get_implementation(),
    other.get_service(), other.get_implementation());
Remarks

Available only for services that support movability,

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

The type of the service that will be used to provide I/O operations.

typedef IoObjectService service_type;
Requirements

Header: boost/asio/basic_io_object.hpp

Convenience header: boost/asio.hpp

Protected destructor to prevent deletion through this type.

~basic_io_object();

Performs:

get_service().destroy(get_implementation());
basic_raw_socket::assign
basic_raw_socket::async_connect
basic_raw_socket::async_receive
basic_raw_socket::async_receive_from
basic_raw_socket::async_send
basic_raw_socket::async_send_to
basic_raw_socket::at_mark
basic_raw_socket::available
basic_raw_socket::basic_raw_socket
basic_raw_socket::bind
basic_raw_socket::broadcast
basic_raw_socket::bytes_readable
basic_raw_socket::cancel
basic_raw_socket::close
basic_raw_socket::connect
basic_raw_socket::debug
basic_raw_socket::do_not_route
basic_raw_socket::enable_connection_aborted
basic_raw_socket::endpoint_type
basic_raw_socket::get_implementation
basic_raw_socket::get_io_service
basic_raw_socket::get_option
basic_raw_socket::get_service
basic_raw_socket::implementation
basic_raw_socket::implementation_type
basic_raw_socket::io_control
basic_raw_socket::is_open
basic_raw_socket::keep_alive
basic_raw_socket::linger
basic_raw_socket::local_endpoint
basic_raw_socket::lowest_layer
basic_raw_socket::lowest_layer_type
basic_raw_socket::max_connections
basic_raw_socket::message_do_not_route
basic_raw_socket::message_end_of_record
basic_raw_socket::message_flags
basic_raw_socket::message_out_of_band
basic_raw_socket::message_peek
basic_raw_socket::native
basic_raw_socket::native_handle
basic_raw_socket::native_handle_type
basic_raw_socket::native_non_blocking
basic_raw_socket::native_type
basic_raw_socket::non_blocking
basic_raw_socket::non_blocking_io
basic_raw_socket::open
basic_raw_socket::operator=
basic_raw_socket::protocol_type
basic_raw_socket::receive
basic_raw_socket::receive_buffer_size
basic_raw_socket::receive_from
basic_raw_socket::receive_low_watermark
basic_raw_socket::remote_endpoint
basic_raw_socket::reuse_address
basic_raw_socket::send
basic_raw_socket::send_buffer_size
basic_raw_socket::send_low_watermark
basic_raw_socket::send_to
basic_raw_socket::service
basic_raw_socket::service_type
basic_raw_socket::set_option
basic_raw_socket::shutdown
basic_raw_socket::shutdown_type

Provides raw-oriented socket functionality.

template<
    typename Protocol,
    typename RawSocketService = raw_socket_service<Protocol>>
class basic_raw_socket :
  public basic_socket< Protocol, RawSocketService >
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

async_receive

Start an asynchronous receive on a connected socket.

async_receive_from

Start an asynchronous receive.

async_send

Start an asynchronous send on a connected socket.

async_send_to

Start an asynchronous send.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

basic_raw_socket

Construct a basic_raw_socket without opening it.

Construct and open a basic_raw_socket.

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

Construct a basic_raw_socket on an existing native socket.

Move-construct a basic_raw_socket from another.

Move-construct a basic_raw_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_raw_socket from another.

Move-assign a basic_raw_socket from a socket of another protocol type.

receive

Receive some data on a connected socket.

receive_from

Receive raw data with the endpoint of the sender.

remote_endpoint

Get the remote endpoint of the socket.

send

Send some data on a connected socket.

send_to

Send raw data to the specified endpoint.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_raw_socket class template provides asynchronous and blocking raw-oriented socket functionality.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Start an asynchronous connect.

template<
    typename ConnectHandler>
void-or-deduced 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.

Parameters

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().

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

Start an asynchronous receive on a connected socket.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    ReadHandler handler);
  » more...

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags,
    ReadHandler handler);
  » more...

Start an asynchronous receive on a connected socket.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive on a connected socket.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

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.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    ReadHandler handler);
  » more...

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    socket_base::message_flags flags,
    ReadHandler handler);
  » more...

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive_from(
    boost::asio::buffer(data, size), 0, sender_endpoint, handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Start an asynchronous send on a connected socket.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    WriteHandler handler);
  » more...

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    WriteHandler handler);
  » more...

Start an asynchronous send on a connected socket.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

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.

Example

To send a single data buffer use the buffer function as follows:

socket.async_send(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send on a connected socket.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

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.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    WriteHandler handler);
  » more...

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    socket_base::message_flags flags,
    WriteHandler handler);
  » more...

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Example

To send a single data buffer use the 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 buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Determine whether the socket is at the out-of-band data mark.

bool at_mark() const;
  » more...

bool at_mark(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Determine the number of bytes available for reading.

std::size_t available() const;
  » more...

std::size_t available(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Construct a basic_raw_socket without opening it.

explicit basic_raw_socket(
    boost::asio::io_service & io_service);
  » more...

Construct and open a basic_raw_socket.

basic_raw_socket(
    boost::asio::io_service & io_service,
    const protocol_type & protocol);
  » more...

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

basic_raw_socket(
    boost::asio::io_service & io_service,
    const endpoint_type & endpoint);
  » more...

Construct a basic_raw_socket on an existing native socket.

basic_raw_socket(
    boost::asio::io_service & io_service,
    const protocol_type & protocol,
    const native_handle_type & native_socket);
  » more...

Move-construct a basic_raw_socket from another.

basic_raw_socket(
    basic_raw_socket && other);
  » more...

Move-construct a basic_raw_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename RawSocketService1>
basic_raw_socket(
    basic_raw_socket< Protocol1, RawSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
  » more...

Construct a basic_raw_socket without opening it.

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

This constructor creates a raw socket without opening it. The open() function must be called before data can be sent or received on the socket.

Parameters

io_service

The io_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.

Construct and open a basic_raw_socket.

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

This constructor creates and opens a raw socket.

Parameters

io_service

The io_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

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

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

This constructor creates a raw socket and automatically opens it bound to the specified endpoint on the local machine. The protocol used is the protocol associated with the given endpoint.

Parameters

io_service

The io_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.

endpoint

An endpoint on the local machine to which the raw socket will be bound.

Exceptions

boost::system::system_error

Thrown on failure.

Construct a basic_raw_socket on an existing native socket.

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

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

Parameters

io_service

The io_service object that the raw socket will use to dispatch handlers for any asynchronous operations performed on the socket.

protocol

An object specifying protocol parameters to be used.

native_socket

The new underlying socket implementation.

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a basic_raw_socket from another.

basic_raw_socket(
    basic_raw_socket && other);

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

Parameters

other

The other basic_raw_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_raw_socket(io_service&) constructor.

Move-construct a basic_raw_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename RawSocketService1>
basic_raw_socket(
    basic_raw_socket< Protocol1, RawSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);

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

Parameters

other

The other basic_raw_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_raw_socket(io_service&) constructor.

Bind the socket to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

endpoint

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

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the socket.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Close the socket.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure. Note that, even if the function indicates an error, the underlying descriptor is closed.

Remarks

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

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.

Parameters

ec

Set to indicate what error occurred, if any. Note that, even if the function indicates an error, the underlying descriptor is closed.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::system::error_code ec;
socket.close(ec);
if (ec)
{
  // An error occurred.
}
Remarks

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

Connect the socket to the specified endpoint.

void connect(
    const endpoint_type & peer_endpoint);
  » more...

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the socket.

void get_option(
    GettableSocketOption & option) const;
  » more...

boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec) const;
  » more...

Inherited from basic_socket.

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;

This function is used to get the current value of an option on the socket.

Parameters

option

The option value to be obtained from the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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.value();

Inherited from basic_socket.

Get an option from the socket.

template<
    typename 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.

Parameters

option

The option value to be obtained from the socket.

ec

Set to indicate what error occurred, if any.

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.value();

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the socket.

void io_control(
    IoControlCommand & command);
  » more...

boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the socket.

Parameters

command

The IO control command to be performed on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the socket.

ec

Set to indicate what error occurred, if any.

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

Inherited from basic_socket.

Determine whether the socket is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Get the local endpoint of the socket.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

Inherited from basic_socket.

A basic_socket is always the lowest layer.

typedef basic_socket< Protocol, RawSocketService > lowest_layer_type;
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

Inherited from 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.

Inherited from 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.

The native representation of a socket.

typedef RawSocketService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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

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.

Parameters

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

Exceptions

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.

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

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.

Parameters

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.

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

(Deprecated: Use native_handle_type.) The native representation of a socket.

typedef RawSocketService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the socket.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
  » more...

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

Inherited from basic_socket.

Gets the non-blocking mode of the socket.

bool non_blocking() const;
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.

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.

Inherited from basic_socket.

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Open the socket using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

Move-assign a basic_raw_socket from another.

basic_raw_socket & operator=(
    basic_raw_socket && other);
  » more...

Move-assign a basic_raw_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename RawSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_raw_socket >::type & operator=(
    basic_raw_socket< Protocol1, RawSocketService1 > && other);
  » more...

Move-assign a 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.

Parameters

other

The other basic_raw_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_raw_socket(io_service&) constructor.

Move-assign a basic_raw_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename RawSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_raw_socket >::type & operator=(
    basic_raw_socket< Protocol1, RawSocketService1 > && other);

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

Parameters

other

The other basic_raw_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_raw_socket(io_service&) constructor.

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Receive some data on a connected socket.

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Receive some data on a connected socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be received.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Example

To receive into a single data buffer use the buffer function as follows:

socket.receive(boost::asio::buffer(data, size));

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive some data on a connected socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be received.

flags

Flags specifying how the receive call is to be made.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Receive some data on a connected socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

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.

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Receive raw data with the endpoint of the sender.

template<
    typename MutableBufferSequence>
std::size_t receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    socket_base::message_flags flags);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive_from(
    const MutableBufferSequence & buffers,
    endpoint_type & sender_endpoint,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Receive raw data with the endpoint of the sender.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

Example

To receive into a single data buffer use the buffer function as follows:

boost::asio::ip::udp::endpoint sender_endpoint;
socket.receive_from(
    boost::asio::buffer(data, size), sender_endpoint);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive raw data with the endpoint of the sender.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure.

Receive raw data with the endpoint of the sender.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;
  » more...

endpoint_type remote_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the remote endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Send some data on a connected socket.

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Send some data on a connected socket.

template<
    typename 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.

Parameters

buffers

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

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Example

To send a single data buffer use the buffer function as follows:

socket.send(boost::asio::buffer(data, size));

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send some data on a connected socket.

template<
    typename 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.

Parameters

buffers

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

flags

Flags specifying how the send call is to be made.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Send some data on a connected socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent.

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.

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Send raw data to the specified endpoint.

template<
    typename ConstBufferSequence>
std::size_t send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    socket_base::message_flags flags);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send_to(
    const ConstBufferSequence & buffers,
    const endpoint_type & destination,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Send raw data to the specified endpoint.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be sent to the remote endpoint.

destination

The remote endpoint to which the data will be sent.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Example

To send a single data buffer use the 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 buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send raw data to the specified endpoint.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Send raw data to the specified endpoint.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent.

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef RawSocketService service_type;
Requirements

Header: boost/asio/basic_raw_socket.hpp

Convenience header: boost/asio.hpp

Set an option on the socket.

void set_option(
    const SettableSocketOption & option);
  » more...

boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the socket.

Parameters

option

The new option value to be set on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Set an option on the socket.

template<
    typename 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.

Parameters

option

The new option value to be set on the socket.

ec

Set to indicate what error occurred, if any.

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

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);
  » more...

boost::system::error_code shutdown(
    shutdown_type what,
    boost::system::error_code & ec);
  » more...

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.

Parameters

what

Determines what types of operation will no longer be allowed.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

what

Determines what types of operation will no longer be allowed.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

basic_seq_packet_socket::assign
basic_seq_packet_socket::async_connect
basic_seq_packet_socket::async_receive
basic_seq_packet_socket::async_send
basic_seq_packet_socket::at_mark
basic_seq_packet_socket::available
basic_seq_packet_socket::basic_seq_packet_socket
basic_seq_packet_socket::bind
basic_seq_packet_socket::broadcast
basic_seq_packet_socket::bytes_readable
basic_seq_packet_socket::cancel
basic_seq_packet_socket::close
basic_seq_packet_socket::connect
basic_seq_packet_socket::debug
basic_seq_packet_socket::do_not_route
basic_seq_packet_socket::enable_connection_aborted
basic_seq_packet_socket::endpoint_type
basic_seq_packet_socket::get_implementation
basic_seq_packet_socket::get_io_service
basic_seq_packet_socket::get_option
basic_seq_packet_socket::get_service
basic_seq_packet_socket::implementation
basic_seq_packet_socket::implementation_type
basic_seq_packet_socket::io_control
basic_seq_packet_socket::is_open
basic_seq_packet_socket::keep_alive
basic_seq_packet_socket::linger
basic_seq_packet_socket::local_endpoint
basic_seq_packet_socket::lowest_layer
basic_seq_packet_socket::lowest_layer_type
basic_seq_packet_socket::max_connections
basic_seq_packet_socket::message_do_not_route
basic_seq_packet_socket::message_end_of_record
basic_seq_packet_socket::message_flags
basic_seq_packet_socket::message_out_of_band
basic_seq_packet_socket::message_peek
basic_seq_packet_socket::native
basic_seq_packet_socket::native_handle
basic_seq_packet_socket::native_handle_type
basic_seq_packet_socket::native_non_blocking
basic_seq_packet_socket::native_type
basic_seq_packet_socket::non_blocking
basic_seq_packet_socket::non_blocking_io
basic_seq_packet_socket::open
basic_seq_packet_socket::operator=
basic_seq_packet_socket::protocol_type
basic_seq_packet_socket::receive
basic_seq_packet_socket::receive_buffer_size
basic_seq_packet_socket::receive_low_watermark
basic_seq_packet_socket::remote_endpoint
basic_seq_packet_socket::reuse_address
basic_seq_packet_socket::send
basic_seq_packet_socket::send_buffer_size
basic_seq_packet_socket::send_low_watermark
basic_seq_packet_socket::service
basic_seq_packet_socket::service_type
basic_seq_packet_socket::set_option
basic_seq_packet_socket::shutdown
basic_seq_packet_socket::shutdown_type

Provides sequenced packet socket functionality.

template<
    typename Protocol,
    typename SeqPacketSocketService = seq_packet_socket_service<Protocol>>
class basic_seq_packet_socket :
  public basic_socket< Protocol, SeqPacketSocketService >
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

async_receive

Start an asynchronous receive.

async_send

Start an asynchronous send.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

basic_seq_packet_socket

Construct a basic_seq_packet_socket without opening it.

Construct and open a basic_seq_packet_socket.

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

Construct a basic_seq_packet_socket on an existing native socket.

Move-construct a basic_seq_packet_socket from another.

Move-construct a basic_seq_packet_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_seq_packet_socket from another.

Move-assign a basic_seq_packet_socket from a socket of another protocol type.

receive

Receive some data on the socket.

Receive some data on a connected socket.

remote_endpoint

Get the remote endpoint of the socket.

send

Send some data on the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_seq_packet_socket class template provides asynchronous and blocking sequenced packet socket functionality.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Start an asynchronous connect.

template<
    typename ConnectHandler>
void-or-deduced 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.

Parameters

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().

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

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags & out_flags,
    ReadHandler handler);
  » more...

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags in_flags,
    socket_base::message_flags & out_flags,
    ReadHandler handler);
  » more...

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive(boost::asio::buffer(data, size), out_flags, handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive(
    boost::asio::buffer(data, size),
    0, out_flags, handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Example

To send a single data buffer use the buffer function as follows:

socket.async_send(boost::asio::buffer(data, size), 0, handler);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Determine whether the socket is at the out-of-band data mark.

bool at_mark() const;
  » more...

bool at_mark(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Determine the number of bytes available for reading.

std::size_t available() const;
  » more...

std::size_t available(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Construct a basic_seq_packet_socket without opening it.

explicit basic_seq_packet_socket(
    boost::asio::io_service & io_service);
  » more...

Construct and open a basic_seq_packet_socket.

basic_seq_packet_socket(
    boost::asio::io_service & io_service,
    const protocol_type & protocol);
  » more...

Construct a 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);
  » more...

Construct a 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);
  » more...

Move-construct a basic_seq_packet_socket from another.

basic_seq_packet_socket(
    basic_seq_packet_socket && other);
  » more...

Move-construct a basic_seq_packet_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SeqPacketSocketService1>
basic_seq_packet_socket(
    basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
  » more...

Construct a 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.

Parameters

io_service

The io_service object that the sequenced packet socket will use to dispatch handlers for any asynchronous operations performed on the socket.

Construct and open a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a 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.

Parameters

other

The other basic_seq_packet_socket object from which the move will occur.

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.

Move-construct a basic_seq_packet_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SeqPacketSocketService1>
basic_seq_packet_socket(
    basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);

This constructor moves a sequenced packet socket from one object to another.

Parameters

other

The other basic_seq_packet_socket object from which the move will occur.

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.

Bind the socket to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

endpoint

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

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the socket.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Close the socket.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure. Note that, even if the function indicates an error, the underlying descriptor is closed.

Remarks

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

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.

Parameters

ec

Set to indicate what error occurred, if any. Note that, even if the function indicates an error, the underlying descriptor is closed.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::system::error_code ec;
socket.close(ec);
if (ec)
{
  // An error occurred.
}
Remarks

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

Connect the socket to the specified endpoint.

void connect(
    const endpoint_type & peer_endpoint);
  » more...

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the socket.

void get_option(
    GettableSocketOption & option) const;
  » more...

boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec) const;
  » more...

Inherited from basic_socket.

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;

This function is used to get the current value of an option on the socket.

Parameters

option

The option value to be obtained from the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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.value();

Inherited from basic_socket.

Get an option from the socket.

template<
    typename 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.

Parameters

option

The option value to be obtained from the socket.

ec

Set to indicate what error occurred, if any.

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.value();

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the socket.

void io_control(
    IoControlCommand & command);
  » more...

boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the socket.

Parameters

command

The IO control command to be performed on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the socket.

ec

Set to indicate what error occurred, if any.

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

Inherited from basic_socket.

Determine whether the socket is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Get the local endpoint of the socket.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

Inherited from basic_socket.

A basic_socket is always the lowest layer.

typedef basic_socket< Protocol, SeqPacketSocketService > lowest_layer_type;
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

Inherited from 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.

Inherited from 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.

The native representation of a socket.

typedef SeqPacketSocketService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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

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.

Parameters

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

Exceptions

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.

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

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.

Parameters

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.

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

(Deprecated: Use native_handle_type.) The native representation of a socket.

typedef SeqPacketSocketService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the socket.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
  » more...

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

Inherited from basic_socket.

Gets the non-blocking mode of the socket.

bool non_blocking() const;
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.

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.

Inherited from basic_socket.

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Open the socket using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

Move-assign a basic_seq_packet_socket from another.

basic_seq_packet_socket & operator=(
    basic_seq_packet_socket && other);
  » more...

Move-assign a basic_seq_packet_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SeqPacketSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_seq_packet_socket >::type & operator=(
    basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other);
  » more...

Move-assign a 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.

Parameters

other

The other basic_seq_packet_socket object from which the move will occur.

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.

Move-assign a basic_seq_packet_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SeqPacketSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_seq_packet_socket >::type & operator=(
    basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other);

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

Parameters

other

The other basic_seq_packet_socket object from which the move will occur.

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.

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Receive some data on the socket.

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags & out_flags);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags in_flags,
    socket_base::message_flags & out_flags);
  » more...

Receive some data on a connected socket.

template<
    typename 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);
  » more...

Receive some data on the socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Example

To receive into a single data buffer use the buffer function as follows:

socket.receive(boost::asio::buffer(data, size), out_flags);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive some data on the socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Example

To receive into a single data buffer use the buffer function as follows:

socket.receive(boost::asio::buffer(data, size), 0, out_flags);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive some data on a connected socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received. Returns 0 if an error occurred.

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;
  » more...

endpoint_type remote_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the remote endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Send some data on the socket.

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Send some data on the socket.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be sent on the socket.

flags

Flags specifying how the send call is to be made.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Example

To send a single data buffer use the buffer function as follows:

socket.send(boost::asio::buffer(data, size), 0);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send some data on the socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent. Returns 0 if an error occurred.

Remarks

The send operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef SeqPacketSocketService service_type;
Requirements

Header: boost/asio/basic_seq_packet_socket.hpp

Convenience header: boost/asio.hpp

Set an option on the socket.

void set_option(
    const SettableSocketOption & option);
  » more...

boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the socket.

Parameters

option

The new option value to be set on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Set an option on the socket.

template<
    typename 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.

Parameters

option

The new option value to be set on the socket.

ec

Set to indicate what error occurred, if any.

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

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);
  » more...

boost::system::error_code shutdown(
    shutdown_type what,
    boost::system::error_code & ec);
  » more...

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.

Parameters

what

Determines what types of operation will no longer be allowed.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

what

Determines what types of operation will no longer be allowed.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

Provides serial port functionality.

template<
    typename SerialPortService = serial_port_service>
class basic_serial_port :
  public basic_io_object< SerialPortService >,
  public serial_port_base
Types

Name

Description

implementation_type

The underlying implementation type of I/O object.

lowest_layer_type

A basic_serial_port is always the lowest layer.

native_handle_type

The native representation of a serial port.

native_type

(Deprecated: Use native_handle_type.) The native representation of a serial port.

service_type

The type of the service that will be used to provide I/O operations.

Member Functions

Name

Description

assign

Assign an existing native serial port to the serial port.

async_read_some

Start an asynchronous read.

async_write_some

Start an asynchronous write.

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.

cancel

Cancel all asynchronous operations associated with the serial port.

close

Close the serial port.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the serial port.

is_open

Determine whether the serial port is open.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native serial port representation.

native_handle

Get the native serial port representation.

open

Open the serial port using the specified device name.

operator=

Move-assign a basic_serial_port from another.

read_some

Read some data from the serial port.

send_break

Send a break sequence to the serial port.

set_option

Set an option on the serial port.

write_some

Write some data to the serial port.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_serial_port class template provides functionality that is common to all serial ports.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_serial_port.hpp

Convenience header: boost/asio.hpp

Assign an existing native serial port to the serial port.

void assign(
    const native_handle_type & native_serial_port);
  » more...

boost::system::error_code assign(
    const native_handle_type & native_serial_port,
    boost::system::error_code & ec);
  » more...

Assign an existing native serial port to the serial port.

void assign(
    const native_handle_type & native_serial_port);

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

Start an asynchronous read.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The read operation may not read all of the requested number of bytes. Consider using the async_read function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.

Example

To read into a single data buffer use the buffer function as follows:

serial_port.async_read_some(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous write.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The write operation may not transmit all of the data to the peer. Consider using the async_write function if you need to ensure that all data is written before the asynchronous operation completes.

Example

To write a single data buffer use the buffer function as follows:

serial_port.async_write_some(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Construct a basic_serial_port without opening it.

explicit basic_serial_port(
    boost::asio::io_service & io_service);
  » more...

Construct and open a basic_serial_port.

explicit basic_serial_port(
    boost::asio::io_service & io_service,
    const char * device);
  » more...

explicit basic_serial_port(
    boost::asio::io_service & io_service,
    const std::string & device);
  » more...

Construct a 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);
  » more...

Move-construct a basic_serial_port from another.

basic_serial_port(
    basic_serial_port && other);
  » more...

Construct a basic_serial_port without opening it.

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

This constructor creates a serial port without opening it.

Parameters

io_service

The io_service object that the serial port will use to dispatch handlers for any asynchronous operations performed on the port.

Construct and open a 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.

Parameters

io_service

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

Construct and open a 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.

Parameters

io_service

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

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a basic_serial_port from another.

basic_serial_port(
    basic_serial_port && other);

This constructor moves a serial port from one object to another.

Parameters

other

The other basic_serial_port object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_serial_port(io_service&) constructor.

Cancel all asynchronous operations associated with the serial port.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Close the serial port.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the serial port.

template<
    typename GettableSerialPortOption>
void get_option(
    GettableSerialPortOption & option);
  » more...

template<
    typename GettableSerialPortOption>
boost::system::error_code get_option(
    GettableSerialPortOption & option,
    boost::system::error_code & ec);
  » more...

Get an option from the serial port.

template<
    typename GettableSerialPortOption>
void get_option(
    GettableSerialPortOption & option);

This function is used to get the current value of an option on the serial port.

Parameters

option

The option value to be obtained from the serial port.

Exceptions

boost::system::system_error

Thrown on failure.

Get an option from the serial port.

template<
    typename 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.

Parameters

option

The option value to be obtained from the serial port.

ec

Set to indicate what error occurred, if any.

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_serial_port.hpp

Convenience header: boost/asio.hpp

Determine whether the serial port is open.

bool is_open() const;

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();

This function returns a reference to the lowest layer in a stack of layers. Since a basic_serial_port cannot contain any further layers, it simply returns a reference to itself.

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_serial_port cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

A basic_serial_port is always the lowest layer.

typedef basic_serial_port< SerialPortService > lowest_layer_type;
Types

Name

Description

implementation_type

The underlying implementation type of I/O object.

lowest_layer_type

A basic_serial_port is always the lowest layer.

native_handle_type

The native representation of a serial port.

native_type

(Deprecated: Use native_handle_type.) The native representation of a serial port.

service_type

The type of the service that will be used to provide I/O operations.

Member Functions

Name

Description

assign

Assign an existing native serial port to the serial port.

async_read_some

Start an asynchronous read.

async_write_some

Start an asynchronous write.

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.

cancel

Cancel all asynchronous operations associated with the serial port.

close

Close the serial port.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the serial port.

is_open

Determine whether the serial port is open.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native serial port representation.

native_handle

Get the native serial port representation.

open

Open the serial port using the specified device name.

operator=

Move-assign a basic_serial_port from another.

read_some

Read some data from the serial port.

send_break

Send a break sequence to the serial port.

set_option

Set an option on the serial port.

write_some

Write some data to the serial port.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_serial_port class template provides functionality that is common to all serial ports.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_serial_port.hpp

Convenience header: boost/asio.hpp

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

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.

The native representation of a serial port.

typedef SerialPortService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_serial_port.hpp

Convenience header: boost/asio.hpp

(Deprecated: Use native_handle_type.) The native representation of a serial port.

typedef SerialPortService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_serial_port.hpp

Convenience header: boost/asio.hpp

Open the serial port using the specified device name.

void open(
    const std::string & device);
  » more...

boost::system::error_code open(
    const std::string & device,
    boost::system::error_code & ec);
  » more...

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.

Parameters

device

The platform-specific device name.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

device

The platform-specific device name.

ec

Set the indicate what error occurred, if any.

Move-assign a 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.

Parameters

other

The other basic_serial_port object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_serial_port(io_service&) constructor.

Read some data from the serial port.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);
  » more...

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Read some data from the serial port.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be read.

Return Value

The number of bytes read.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The read_some operation may not read all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Example

To read into a single data buffer use the buffer function as follows:

serial_port.read_some(boost::asio::buffer(data, size));

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Read some data from the serial port.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be read.

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes read. Returns 0 if an error occurred.

Remarks

The read_some operation may not read all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Send a break sequence to the serial port.

void send_break();
  » more...

boost::system::error_code send_break(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef SerialPortService service_type;
Requirements

Header: boost/asio/basic_serial_port.hpp

Convenience header: boost/asio.hpp

Set an option on the serial port.

template<
    typename SettableSerialPortOption>
void set_option(
    const SettableSerialPortOption & option);
  » more...

template<
    typename SettableSerialPortOption>
boost::system::error_code set_option(
    const SettableSerialPortOption & option,
    boost::system::error_code & ec);
  » more...

Set an option on the serial port.

template<
    typename SettableSerialPortOption>
void set_option(
    const SettableSerialPortOption & option);

This function is used to set an option on the serial port.

Parameters

option

The option value to be set on the serial port.

Exceptions

boost::system::system_error

Thrown on failure.

Set an option on the serial port.

template<
    typename 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.

Parameters

option

The option value to be set on the serial port.

ec

Set to indicate what error occurred, if any.

Write some data to the serial port.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);
  » more...

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Write some data to the serial port.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be written to the serial port.

Return Value

The number of bytes written.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The write_some operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Example

To write a single data buffer use the buffer function as follows:

serial_port.write_some(boost::asio::buffer(data, size));

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Write some data to the serial port.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be written to the serial port.

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes written. Returns 0 if an error occurred.

Remarks

The write_some operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Provides signal functionality.

template<
    typename SignalSetService = signal_set_service>
class basic_signal_set :
  public basic_io_object< SignalSetService >
Types

Name

Description

implementation_type

The underlying implementation type of I/O object.

service_type

The type of the service that will be used to provide I/O operations.

Member Functions

Name

Description

add

Add a signal to a signal_set.

async_wait

Start an asynchronous operation to wait for a signal to be delivered.

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.

cancel

Cancel all operations associated with the signal set.

clear

Remove all signals from a signal_set.

get_io_service

Get the io_service associated with the object.

remove

Remove a signal from a signal_set.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The 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 signal_set typedef.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

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

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().

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.

Requirements

Header: boost/asio/basic_signal_set.hpp

Convenience header: boost/asio.hpp

Add a signal to a signal_set.

void add(
    int signal_number);
  » more...

boost::system::error_code add(
    int signal_number,
    boost::system::error_code & ec);
  » more...

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.

Parameters

signal_number

The signal to be added to the set.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

signal_number

The signal to be added to the set.

ec

Set to indicate what error occurred, if any.

Start an asynchronous operation to wait for a signal to be delivered.

template<
    typename SignalHandler>
void-or-deduced 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.
Parameters

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().

Construct a signal set without adding any signals.

explicit basic_signal_set(
    boost::asio::io_service & io_service);
  » more...

Construct a signal set and add one signal.

basic_signal_set(
    boost::asio::io_service & io_service,
    int signal_number_1);
  » more...

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);
  » more...

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);
  » more...

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.

Parameters

io_service

The io_service object that the signal set will use to dispatch handlers for any asynchronous operations performed on the set.

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.

Parameters

io_service

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

Remarks

This constructor is equivalent to performing:

boost::asio::signal_set signals(io_service);
signals.add(signal_number_1);

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.

Parameters

io_service

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

Remarks

This constructor is equivalent to performing:

boost::asio::signal_set signals(io_service);
signals.add(signal_number_1);
signals.add(signal_number_2);

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.

Parameters

io_service

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

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

Cancel all operations associated with the signal set.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Remove all signals from a signal_set.

void clear();
  » more...

boost::system::error_code clear(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

Remarks

Removes all queued notifications.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Remarks

Removes all queued notifications.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_signal_set.hpp

Convenience header: boost/asio.hpp

Remove a signal from a signal_set.

void remove(
    int signal_number);
  » more...

boost::system::error_code remove(
    int signal_number,
    boost::system::error_code & ec);
  » more...

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.

Parameters

signal_number

The signal to be removed from the set.

Exceptions

boost::system::system_error

Thrown on failure.

Remarks

Removes any notifications that have been queued for the specified signal number.

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.

Parameters

signal_number

The signal to be removed from the set.

ec

Set to indicate what error occurred, if any.

Remarks

Removes any notifications that have been queued for the specified signal number.

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef SignalSetService service_type;
Requirements

Header: boost/asio/basic_signal_set.hpp

Convenience header: boost/asio.hpp

basic_socket::assign
basic_socket::async_connect
basic_socket::at_mark
basic_socket::available
basic_socket::basic_socket
basic_socket::bind
basic_socket::broadcast
basic_socket::bytes_readable
basic_socket::cancel
basic_socket::close
basic_socket::connect
basic_socket::debug
basic_socket::do_not_route
basic_socket::enable_connection_aborted
basic_socket::endpoint_type
basic_socket::get_implementation
basic_socket::get_io_service
basic_socket::get_option
basic_socket::get_service
basic_socket::implementation
basic_socket::implementation_type
basic_socket::io_control
basic_socket::is_open
basic_socket::keep_alive
basic_socket::linger
basic_socket::local_endpoint
basic_socket::lowest_layer
basic_socket::lowest_layer_type
basic_socket::max_connections
basic_socket::message_do_not_route
basic_socket::message_end_of_record
basic_socket::message_flags
basic_socket::message_out_of_band
basic_socket::message_peek
basic_socket::native
basic_socket::native_handle
basic_socket::native_handle_type
basic_socket::native_non_blocking
basic_socket::native_type
basic_socket::non_blocking
basic_socket::non_blocking_io
basic_socket::open
basic_socket::operator=
basic_socket::protocol_type
basic_socket::receive_buffer_size
basic_socket::receive_low_watermark
basic_socket::remote_endpoint
basic_socket::reuse_address
basic_socket::send_buffer_size
basic_socket::send_low_watermark
basic_socket::service
basic_socket::service_type
basic_socket::set_option
basic_socket::shutdown
basic_socket::shutdown_type
basic_socket::~basic_socket

Provides socket functionality.

template<
    typename Protocol,
    typename SocketService>
class basic_socket :
  public basic_io_object< SocketService >,
  public socket_base
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Assign an existing native socket to the socket.

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

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

Assign an existing native socket to the socket.

void assign(
    const protocol_type & protocol,
    const native_handle_type & native_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);

Start an asynchronous connect.

template<
    typename ConnectHandler>
void-or-deduced 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.

Parameters

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().

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

Determine whether the socket is at the out-of-band data mark.

bool at_mark() const;
  » more...

bool at_mark(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Determine the number of bytes available for reading.

std::size_t available() const;
  » more...

std::size_t available(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Construct a basic_socket without opening it.

explicit basic_socket(
    boost::asio::io_service & io_service);
  » more...

Construct and open a basic_socket.

basic_socket(
    boost::asio::io_service & io_service,
    const protocol_type & protocol);
  » more...

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

basic_socket(
    boost::asio::io_service & io_service,
    const endpoint_type & endpoint);
  » more...

Construct a 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);
  » more...

Move-construct a basic_socket from another.

basic_socket(
    basic_socket && other);
  » more...

Move-construct a basic_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SocketService1>
basic_socket(
    basic_socket< Protocol1, SocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
  » more...

Construct a basic_socket without opening it.

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

This constructor creates a socket without opening it.

Parameters

io_service

The io_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.

Construct and open a basic_socket.

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

This constructor creates and opens a socket.

Parameters

io_service

The io_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

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

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

This constructor creates a socket and automatically opens it bound to the specified endpoint on the local machine. The protocol used is the protocol associated with the given endpoint.

Parameters

io_service

The io_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

The io_service object that the socket will use to dispatch handlers for any asynchronous operations performed on the socket.

protocol

An object specifying protocol parameters to be used.

native_socket

A native socket.

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a basic_socket from another.

basic_socket(
    basic_socket && other);

This constructor moves a socket from one object to another.

Parameters

other

The other basic_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket(io_service&) constructor.

Move-construct a basic_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SocketService1>
basic_socket(
    basic_socket< Protocol1, SocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);

This constructor moves a socket from one object to another.

Parameters

other

The other basic_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket(io_service&) constructor.

Bind the socket to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

endpoint

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

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the socket.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Close the socket.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure. Note that, even if the function indicates an error, the underlying descriptor is closed.

Remarks

For portable behaviour with respect to graceful closure of a connected socket, call shutdown() before closing the 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.

Parameters

ec

Set to indicate what error occurred, if any. Note that, even if the function indicates an error, the underlying descriptor is closed.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::system::error_code ec;
socket.close(ec);
if (ec)
{
  // An error occurred.
}
Remarks

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

Connect the socket to the specified endpoint.

void connect(
    const endpoint_type & peer_endpoint);
  » more...

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;
  » more...

template<
    typename GettableSocketOption>
boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec) const;
  » more...

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;

This function is used to get the current value of an option on the socket.

Parameters

option

The option value to be obtained from the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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.value();

Get an option from the socket.

template<
    typename 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.

Parameters

option

The option value to be obtained from the socket.

ec

Set to indicate what error occurred, if any.

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.value();

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);
  » more...

template<
    typename IoControlCommand>
boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the socket.

Parameters

command

The IO control command to be performed on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Perform an IO control command on the socket.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the socket.

ec

Set to indicate what error occurred, if any.

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

Determine whether the socket is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Get the local endpoint of the socket.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();

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

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

A basic_socket is always the lowest layer.

typedef basic_socket< Protocol, SocketService > lowest_layer_type;
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

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

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.

The native representation of a socket.

typedef SocketService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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

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.

Parameters

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

Exceptions

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.

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

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.

Parameters

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.

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

(Deprecated: Use native_handle_type.) The native representation of a socket.

typedef SocketService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the socket.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
  » more...

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

Gets the non-blocking mode of the socket.

bool non_blocking() const;
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.

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.

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Sets the non-blocking mode of the socket.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Open the socket using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

Move-assign a basic_socket from another.

basic_socket & operator=(
    basic_socket && other);
  » more...

Move-assign a basic_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket >::type & operator=(
    basic_socket< Protocol1, SocketService1 > && other);
  » more...

Move-assign a basic_socket from another.

basic_socket & operator=(
    basic_socket && other);

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

Parameters

other

The other basic_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket(io_service&) constructor.

Move-assign a basic_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename SocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket >::type & operator=(
    basic_socket< Protocol1, SocketService1 > && other);

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

Parameters

other

The other basic_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket(io_service&) constructor.

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;
  » more...

endpoint_type remote_endpoint(
    boost::system::error_code & ec) const;
  » more...

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;

This function is used to obtain the remote endpoint of the socket.

Return Value

An object that represents the remote endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef SocketService service_type;
Requirements

Header: boost/asio/basic_socket.hpp

Convenience header: boost/asio.hpp

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);
  » more...

template<
    typename SettableSocketOption>
boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the socket.

Parameters

option

The new option value to be set on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Set an option on the socket.

template<
    typename 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.

Parameters

option

The new option value to be set on the socket.

ec

Set to indicate what error occurred, if any.

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

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);
  » more...

boost::system::error_code shutdown(
    shutdown_type what,
    boost::system::error_code & ec);
  » more...

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);

This function is used to disable send operations, receive operations, or both.

Parameters

what

Determines what types of operation will no longer be allowed.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

what

Determines what types of operation will no longer be allowed.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

Protected destructor to prevent deletion through this type.

~basic_socket();
basic_socket_acceptor::accept
basic_socket_acceptor::assign
basic_socket_acceptor::async_accept
basic_socket_acceptor::basic_socket_acceptor
basic_socket_acceptor::bind
basic_socket_acceptor::broadcast
basic_socket_acceptor::bytes_readable
basic_socket_acceptor::cancel
basic_socket_acceptor::close
basic_socket_acceptor::debug
basic_socket_acceptor::do_not_route
basic_socket_acceptor::enable_connection_aborted
basic_socket_acceptor::endpoint_type
basic_socket_acceptor::get_implementation
basic_socket_acceptor::get_io_service
basic_socket_acceptor::get_option
basic_socket_acceptor::get_service
basic_socket_acceptor::implementation
basic_socket_acceptor::implementation_type
basic_socket_acceptor::io_control
basic_socket_acceptor::is_open
basic_socket_acceptor::keep_alive
basic_socket_acceptor::linger
basic_socket_acceptor::listen
basic_socket_acceptor::local_endpoint
basic_socket_acceptor::max_connections
basic_socket_acceptor::message_do_not_route
basic_socket_acceptor::message_end_of_record
basic_socket_acceptor::message_flags
basic_socket_acceptor::message_out_of_band
basic_socket_acceptor::message_peek
basic_socket_acceptor::native
basic_socket_acceptor::native_handle
basic_socket_acceptor::native_handle_type
basic_socket_acceptor::native_non_blocking
basic_socket_acceptor::native_type
basic_socket_acceptor::non_blocking
basic_socket_acceptor::non_blocking_io
basic_socket_acceptor::open
basic_socket_acceptor::operator=
basic_socket_acceptor::protocol_type
basic_socket_acceptor::receive_buffer_size
basic_socket_acceptor::receive_low_watermark
basic_socket_acceptor::reuse_address
basic_socket_acceptor::send_buffer_size
basic_socket_acceptor::send_low_watermark
basic_socket_acceptor::service
basic_socket_acceptor::service_type
basic_socket_acceptor::set_option
basic_socket_acceptor::shutdown_type

Provides the ability to accept new connections.

template<
    typename Protocol,
    typename SocketAcceptorService = socket_acceptor_service<Protocol>>
class basic_socket_acceptor :
  public basic_io_object< SocketAcceptorService >,
  public socket_base
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of an acceptor.

native_type

(Deprecated: Use native_handle_type.) The native representation of an acceptor.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

accept

Accept a new connection.

Accept a new connection and obtain the endpoint of the peer.

assign

Assigns an existing native acceptor to the acceptor.

async_accept

Start an asynchronous accept.

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.

Move-construct a basic_socket_acceptor from an acceptor of another protocol type.

bind

Bind the acceptor to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the acceptor.

close

Close the acceptor.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the acceptor.

io_control

Perform an IO control command on the acceptor.

is_open

Determine whether the acceptor is open.

listen

Place the acceptor into the state where it will listen for new connections.

local_endpoint

Get the local endpoint of the acceptor.

native

(Deprecated: Use native_handle().) Get the native acceptor representation.

native_handle

Get the native acceptor representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the acceptor.

Sets the non-blocking mode of the acceptor.

open

Open the acceptor using the specified protocol.

operator=

Move-assign a basic_socket_acceptor from another.

Move-assign a basic_socket_acceptor from an acceptor of another protocol type.

set_option

Set an option on the acceptor.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket_acceptor class template is used for accepting new socket connections.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Accept a new connection.

template<
    typename Protocol1,
    typename SocketService>
void accept(
    basic_socket< Protocol1, SocketService > & peer,
    typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
  » more...

template<
    typename Protocol1,
    typename SocketService>
boost::system::error_code accept(
    basic_socket< Protocol1, SocketService > & peer,
    boost::system::error_code & ec,
    typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
  » more...

Accept a new connection and obtain the endpoint of the peer.

template<
    typename SocketService>
void accept(
    basic_socket< protocol_type, SocketService > & peer,
    endpoint_type & peer_endpoint);
  » more...

template<
    typename SocketService>
boost::system::error_code accept(
    basic_socket< protocol_type, SocketService > & peer,
    endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

Accept a new connection.

template<
    typename Protocol1,
    typename SocketService>
void accept(
    basic_socket< Protocol1, SocketService > & peer,
    typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);

This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.

Parameters

peer

The socket into which the new connection will be accepted.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::acceptor acceptor(io_service);
...
boost::asio::ip::tcp::socket socket(io_service);
acceptor.accept(socket);

Accept a new connection.

template<
    typename Protocol1,
    typename SocketService>
boost::system::error_code accept(
    basic_socket< Protocol1, SocketService > & peer,
    boost::system::error_code & ec,
    typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);

This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.

Parameters

peer

The socket into which the new connection will be accepted.

ec

Set to indicate what error occurred, if any.

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

Accept a new connection and obtain the endpoint of the peer.

template<
    typename 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.

Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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

Accept a new connection and obtain the endpoint of the peer.

template<
    typename 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.

Parameters

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.

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

Assigns an existing native acceptor to the acceptor.

void assign(
    const protocol_type & protocol,
    const native_handle_type & native_acceptor);
  » more...

boost::system::error_code assign(
    const protocol_type & protocol,
    const native_handle_type & native_acceptor,
    boost::system::error_code & ec);
  » more...

Assigns an existing native acceptor to the acceptor.

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

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

Start an asynchronous accept.

template<
    typename Protocol1,
    typename SocketService,
    typename AcceptHandler>
void-or-deduced async_accept(
    basic_socket< Protocol1, SocketService > & peer,
    AcceptHandler handler,
    typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
  » more...

template<
    typename SocketService,
    typename AcceptHandler>
void-or-deduced async_accept(
    basic_socket< protocol_type, SocketService > & peer,
    endpoint_type & peer_endpoint,
    AcceptHandler handler);
  » more...

Start an asynchronous accept.

template<
    typename Protocol1,
    typename SocketService,
    typename AcceptHandler>
void-or-deduced async_accept(
    basic_socket< Protocol1, SocketService > & peer,
    AcceptHandler handler,
    typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);

This function is used to asynchronously accept a new connection into a socket. The function call always returns immediately.

Parameters

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().

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

Start an asynchronous accept.

template<
    typename SocketService,
    typename AcceptHandler>
void-or-deduced 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.

Parameters

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().

Construct an acceptor without opening it.

explicit basic_socket_acceptor(
    boost::asio::io_service & io_service);
  » more...

Construct an open acceptor.

basic_socket_acceptor(
    boost::asio::io_service & io_service,
    const protocol_type & protocol);
  » more...

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);
  » more...

Construct a 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);
  » more...

Move-construct a basic_socket_acceptor from another.

basic_socket_acceptor(
    basic_socket_acceptor && other);
  » more...

Move-construct a basic_socket_acceptor from an acceptor of another protocol type.

template<
    typename Protocol1,
    typename SocketAcceptorService1>
basic_socket_acceptor(
    basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
  » more...

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.

Parameters

io_service

The io_service object that the acceptor will use to dispatch handlers for any asynchronous operations performed on the acceptor.

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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

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

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a basic_socket_acceptor from another.

basic_socket_acceptor(
    basic_socket_acceptor && other);

This constructor moves an acceptor from one object to another.

Parameters

other

The other basic_socket_acceptor object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket_acceptor(io_service&) constructor.

Move-construct a basic_socket_acceptor from an acceptor of another protocol type.

template<
    typename Protocol1,
    typename SocketAcceptorService1>
basic_socket_acceptor(
    basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);

This constructor moves an acceptor from one object to another.

Parameters

other

The other basic_socket_acceptor object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket(io_service&) constructor.

Bind the acceptor to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

An endpoint on the local machine to which the socket acceptor will be bound.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::acceptor acceptor(io_service);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
acceptor.open(endpoint.protocol());
acceptor.bind(endpoint);

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.

Parameters

endpoint

An endpoint on the local machine to which the socket acceptor will be bound.

ec

Set to indicate what error occurred, if any.

Example
boost::asio::ip::tcp::acceptor acceptor(io_service);
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(), 12345);
acceptor.open(endpoint.protocol());
boost::system::error_code ec;
acceptor.bind(endpoint, ec);
if (ec)
{
  // An error occurred.
}

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the acceptor.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Close the acceptor.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Example
boost::asio::ip::tcp::acceptor acceptor(io_service);
...
boost::system::error_code ec;
acceptor.close(ec);
if (ec)
{
  // An error occurred.
}

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the acceptor.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option);
  » more...

template<
    typename GettableSocketOption>
boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Get an option from the acceptor.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option);

This function is used to get the current value of an option on the acceptor.

Parameters

option

The option value to be obtained from the acceptor.

Exceptions

boost::system::system_error

Thrown on failure.

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

Get an option from the acceptor.

template<
    typename 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.

Parameters

option

The option value to be obtained from the acceptor.

ec

Set to indicate what error occurred, if any.

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

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the acceptor.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);
  » more...

template<
    typename IoControlCommand>
boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Perform an IO control command on the acceptor.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the acceptor.

Parameters

command

The IO control command to be performed on the acceptor.

Exceptions

boost::system::system_error

Thrown on failure.

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

Perform an IO control command on the acceptor.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the acceptor.

ec

Set to indicate what error occurred, if any.

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

Determine whether the acceptor is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Place the acceptor into the state where it will listen for new connections.

void listen(
    int backlog = socket_base::max_connections);
  » more...

boost::system::error_code listen(
    int backlog,
    boost::system::error_code & ec);
  » more...

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.

Parameters

backlog

The maximum length of the queue of pending connections.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

backlog

The maximum length of the queue of pending connections.

ec

Set to indicate what error occurred, if any.

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

Get the local endpoint of the acceptor.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the acceptor.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::acceptor acceptor(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = acceptor.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

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

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

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

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.

The native representation of an acceptor.

typedef SocketAcceptorService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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.

Parameters

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

Exceptions

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.

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.

Parameters

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.

(Deprecated: Use native_handle_type.) The native representation of an acceptor.

typedef SocketAcceptorService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the acceptor.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the acceptor.

void non_blocking(
    bool mode);
  » more...

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

Gets the non-blocking mode of the acceptor.

bool non_blocking() const;
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.

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.

Sets the non-blocking mode of the acceptor.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Sets the non-blocking mode of the acceptor.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Open the acceptor using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying which protocol is to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::acceptor acceptor(io_service);
acceptor.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

Move-assign a basic_socket_acceptor from another.

basic_socket_acceptor & operator=(
    basic_socket_acceptor && other);
  » more...

Move-assign a basic_socket_acceptor from an acceptor of another protocol type.

template<
    typename Protocol1,
    typename SocketAcceptorService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket_acceptor >::type & operator=(
    basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other);
  » more...

Move-assign a basic_socket_acceptor from another.

basic_socket_acceptor & operator=(
    basic_socket_acceptor && other);

This assignment operator moves an acceptor from one object to another.

Parameters

other

The other basic_socket_acceptor object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket_acceptor(io_service&) constructor.

Move-assign a basic_socket_acceptor from an acceptor of another protocol type.

template<
    typename Protocol1,
    typename SocketAcceptorService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket_acceptor >::type & operator=(
    basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other);

This assignment operator moves an acceptor from one object to another.

Parameters

other

The other basic_socket_acceptor object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_socket(io_service&) constructor.

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef SocketAcceptorService service_type;
Requirements

Header: boost/asio/basic_socket_acceptor.hpp

Convenience header: boost/asio.hpp

Set an option on the acceptor.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);
  » more...

template<
    typename SettableSocketOption>
boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Set an option on the acceptor.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the acceptor.

Parameters

option

The new option value to be set on the acceptor.

Exceptions

boost::system::system_error

Thrown on failure.

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

Set an option on the acceptor.

template<
    typename 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.

Parameters

option

The new option value to be set on the acceptor.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

Iostream interface for a socket.

template<
    typename Protocol,
    typename StreamSocketService = stream_socket_service<Protocol>,
    typename Time = boost::posix_time::ptime,
    typename TimeTraits = boost::asio::time_traits<Time>,
    typename TimerService = deadline_timer_service<Time, TimeTraits>>
class basic_socket_iostream
Types

Name

Description

duration_type

The duration type.

endpoint_type

The endpoint type.

time_type

The time type.

Member Functions

Name

Description

basic_socket_iostream

Construct a basic_socket_iostream without establishing a connection.

Establish a connection to an endpoint corresponding to a resolver query.

close

Close the connection.

connect

Establish a connection to an endpoint corresponding to a resolver query.

error

Get the last error associated with the stream.

expires_at

Get the stream's expiry time as an absolute time.

Set the stream's expiry time as an absolute time.

expires_from_now

Get the timer's expiry time relative to now.

Set the stream's expiry time relative to now.

rdbuf

Return a pointer to the underlying streambuf.

Requirements

Header: boost/asio/basic_socket_iostream.hpp

Convenience header: boost/asio.hpp

Construct a basic_socket_iostream without establishing a connection.

basic_socket_iostream();
  » more...

Establish a connection to an endpoint corresponding to a resolver query.

template<
    typename T1,
    ... ,
    typename TN>
explicit basic_socket_iostream(
    T1 t1,
    ... ,
    TN tn);
  » more...

Construct a basic_socket_iostream without establishing a connection.

basic_socket_iostream();

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.

Close the connection.

void close();

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.

The duration type.

typedef TimeTraits::duration_type duration_type;
Requirements

Header: boost/asio/basic_socket_iostream.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_socket_iostream.hpp

Convenience header: boost/asio.hpp

Get the last error associated with the stream.

const boost::system::error_code & error() const;
Return Value

An error_code corresponding to the last error from the stream.

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

Get the stream's expiry time as an absolute time.

time_type expires_at() const;
  » more...

Set the stream's expiry time as an absolute time.

void expires_at(
    const time_type & expiry_time);
  » more...

Get the stream's expiry time as an absolute time.

time_type expires_at() const;
Return Value

An absolute time value representing the stream's expiry time.

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.

Parameters

expiry_time

The expiry time to be used for the stream.

Get the timer's expiry time relative to now.

duration_type expires_from_now() const;
  » more...

Set the stream's expiry time relative to now.

void expires_from_now(
    const duration_type & expiry_time);
  » more...

Get the timer's expiry time relative to now.

duration_type expires_from_now() const;
Return Value

A relative time value representing the stream's expiry time.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

Return a pointer to the underlying streambuf.

basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * rdbuf() const;

The time type.

typedef TimeTraits::time_type time_type;
Requirements

Header: boost/asio/basic_socket_iostream.hpp

Convenience header: boost/asio.hpp

basic_socket_streambuf::assign
basic_socket_streambuf::async_connect
basic_socket_streambuf::at_mark
basic_socket_streambuf::available
basic_socket_streambuf::basic_socket_streambuf
basic_socket_streambuf::bind
basic_socket_streambuf::broadcast
basic_socket_streambuf::bytes_readable
basic_socket_streambuf::cancel
basic_socket_streambuf::close
basic_socket_streambuf::connect
basic_socket_streambuf::debug
basic_socket_streambuf::do_not_route
basic_socket_streambuf::duration_type
basic_socket_streambuf::enable_connection_aborted
basic_socket_streambuf::endpoint_type
basic_socket_streambuf::error
basic_socket_streambuf::expires_at
basic_socket_streambuf::expires_from_now
basic_socket_streambuf::get_implementation
basic_socket_streambuf::get_io_service
basic_socket_streambuf::get_option
basic_socket_streambuf::get_service
basic_socket_streambuf::implementation
basic_socket_streambuf::implementation_type
basic_socket_streambuf::io_control
basic_socket_streambuf::io_handler
basic_socket_streambuf::is_open
basic_socket_streambuf::keep_alive
basic_socket_streambuf::linger
basic_socket_streambuf::local_endpoint
basic_socket_streambuf::lowest_layer
basic_socket_streambuf::lowest_layer_type
basic_socket_streambuf::max_connections
basic_socket_streambuf::message_do_not_route
basic_socket_streambuf::message_end_of_record
basic_socket_streambuf::message_flags
basic_socket_streambuf::message_out_of_band
basic_socket_streambuf::message_peek
basic_socket_streambuf::native
basic_socket_streambuf::native_handle
basic_socket_streambuf::native_handle_type
basic_socket_streambuf::native_non_blocking
basic_socket_streambuf::native_type
basic_socket_streambuf::non_blocking
basic_socket_streambuf::non_blocking_io
basic_socket_streambuf::open
basic_socket_streambuf::overflow
basic_socket_streambuf::protocol_type
basic_socket_streambuf::puberror
basic_socket_streambuf::receive_buffer_size
basic_socket_streambuf::receive_low_watermark
basic_socket_streambuf::remote_endpoint
basic_socket_streambuf::reuse_address
basic_socket_streambuf::send_buffer_size
basic_socket_streambuf::send_low_watermark
basic_socket_streambuf::service
basic_socket_streambuf::service_type
basic_socket_streambuf::set_option
basic_socket_streambuf::setbuf
basic_socket_streambuf::shutdown
basic_socket_streambuf::shutdown_type
basic_socket_streambuf::sync
basic_socket_streambuf::time_type
basic_socket_streambuf::timer_handler
basic_socket_streambuf::underflow
basic_socket_streambuf::~basic_socket_streambuf

Iostream streambuf for a socket.

template<
    typename Protocol,
    typename StreamSocketService = stream_socket_service<Protocol>,
    typename Time = boost::posix_time::ptime,
    typename TimeTraits = boost::asio::time_traits<Time>,
    typename TimerService = deadline_timer_service<Time, TimeTraits>>
class basic_socket_streambuf :
  public basic_socket< Protocol, StreamSocketService >
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

duration_type

The duration type.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

time_type

The time type.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

basic_socket_streambuf

Construct a basic_socket_streambuf without establishing a connection.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the connection.

Close the socket.

connect

Establish a connection.

Connect the socket to the specified endpoint.

expires_at

Get the stream buffer's expiry time as an absolute time.

Set the stream buffer's expiry time as an absolute time.

expires_from_now

Get the stream buffer's expiry time relative to now.

Set the stream buffer's expiry time relative to now.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

puberror

Get the last error associated with the stream buffer.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

~basic_socket_streambuf

Destructor flushes buffered data.

Protected Member Functions

Name

Description

error

Get the last error associated with the stream buffer.

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

overflow

setbuf

sync

underflow

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

Friends

Name

Description

io_handler

timer_handler

Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Start an asynchronous connect.

template<
    typename ConnectHandler>
void-or-deduced 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.

Parameters

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().

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

Determine whether the socket is at the out-of-band data mark.

bool at_mark() const;
  » more...

bool at_mark(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Determine the number of bytes available for reading.

std::size_t available() const;
  » more...

std::size_t available(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Construct a basic_socket_streambuf without establishing a connection.

basic_socket_streambuf();

Bind the socket to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

endpoint

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

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the socket.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Close the connection.

basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * close();
  » more...

Close the socket.

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

Close the connection.

basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * close();
Return Value

this if a connection was successfully established, a null pointer otherwise.

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.

Parameters

ec

Set to indicate what error occurred, if any. Note that, even if the function indicates an error, the underlying descriptor is closed.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::system::error_code ec;
socket.close(ec);
if (ec)
{
  // An error occurred.
}
Remarks

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

Establish a connection.

basic_socket_streambuf< Protocol, StreamSocketService, Time, TimeTraits, TimerService > * connect(
    const endpoint_type & endpoint);
  » more...

template<
    typename T1,
    ... ,
    typename TN>
basic_socket_streambuf< Protocol, StreamSocketService > * connect(
    T1 t1,
    ... ,
    TN tn);
  » more...

Connect the socket to the specified endpoint.

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

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.

Return Value

this if a connection was successfully established, a null pointer otherwise.

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.

Return Value

this if a connection was successfully established, a null pointer otherwise.

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

The duration type.

typedef TimeTraits::duration_type duration_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Get the last error associated with the stream buffer.

virtual const boost::system::error_code & error() const;
Return Value

An error_code corresponding to the last error from the stream buffer.

Get the stream buffer's expiry time as an absolute time.

time_type expires_at() const;
  » more...

Set the stream buffer's expiry time as an absolute time.

void expires_at(
    const time_type & expiry_time);
  » more...

Get the stream buffer's expiry time as an absolute time.

time_type expires_at() const;
Return Value

An absolute time value representing the stream buffer's expiry time.

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.

Parameters

expiry_time

The expiry time to be used for the stream.

Get the stream buffer's expiry time relative to now.

duration_type expires_from_now() const;
  » more...

Set the stream buffer's expiry time relative to now.

void expires_from_now(
    const duration_type & expiry_time);
  » more...

Get the stream buffer's expiry time relative to now.

duration_type expires_from_now() const;
Return Value

A relative time value representing the stream buffer's expiry time.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the socket.

void get_option(
    GettableSocketOption & option) const;
  » more...

boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec) const;
  » more...

Inherited from basic_socket.

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;

This function is used to get the current value of an option on the socket.

Parameters

option

The option value to be obtained from the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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.value();

Inherited from basic_socket.

Get an option from the socket.

template<
    typename 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.

Parameters

option

The option value to be obtained from the socket.

ec

Set to indicate what error occurred, if any.

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.value();

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the socket.

void io_control(
    IoControlCommand & command);
  » more...

boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the socket.

Parameters

command

The IO control command to be performed on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the socket.

ec

Set to indicate what error occurred, if any.

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

friend struct io_handler();
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from basic_socket.

Determine whether the socket is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Get the local endpoint of the socket.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

Inherited from basic_socket.

A basic_socket is always the lowest layer.

typedef basic_socket< Protocol, StreamSocketService > lowest_layer_type;
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

Inherited from 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.

Inherited from 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.

Inherited from basic_socket.

The native representation of a socket.

typedef StreamSocketService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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

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.

Parameters

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

Exceptions

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.

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

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.

Parameters

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.

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

Inherited from basic_socket.

(Deprecated: Use native_handle_type.) The native representation of a socket.

typedef StreamSocketService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the socket.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
  » more...

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

Inherited from basic_socket.

Gets the non-blocking mode of the socket.

bool non_blocking() const;
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.

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.

Inherited from basic_socket.

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Open the socket using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

int_type overflow(
    int_type c);

Inherited from basic_socket.

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Get the last error associated with the stream buffer.

const boost::system::error_code & puberror() const;
Return Value

An error_code corresponding to the last error from the stream buffer.

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;
  » more...

endpoint_type remote_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the remote endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef StreamSocketService service_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

Set an option on the socket.

void set_option(
    const SettableSocketOption & option);
  » more...

boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the socket.

Parameters

option

The new option value to be set on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Set an option on the socket.

template<
    typename 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.

Parameters

option

The new option value to be set on the socket.

ec

Set to indicate what error occurred, if any.

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

std::streambuf * setbuf(
    char_type * s,
    std::streamsize n);

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);
  » more...

boost::system::error_code shutdown(
    shutdown_type what,
    boost::system::error_code & ec);
  » more...

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.

Parameters

what

Determines what types of operation will no longer be allowed.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

what

Determines what types of operation will no longer be allowed.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

The time type.

typedef TimeTraits::time_type time_type;
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

friend struct timer_handler();
Requirements

Header: boost/asio/basic_socket_streambuf.hpp

Convenience header: boost/asio.hpp

int_type underflow();

Destructor flushes buffered data.

virtual ~basic_socket_streambuf();
basic_stream_socket::assign
basic_stream_socket::async_connect
basic_stream_socket::async_read_some
basic_stream_socket::async_receive
basic_stream_socket::async_send
basic_stream_socket::async_write_some
basic_stream_socket::at_mark
basic_stream_socket::available
basic_stream_socket::basic_stream_socket
basic_stream_socket::bind
basic_stream_socket::broadcast
basic_stream_socket::bytes_readable
basic_stream_socket::cancel
basic_stream_socket::close
basic_stream_socket::connect
basic_stream_socket::debug
basic_stream_socket::do_not_route
basic_stream_socket::enable_connection_aborted
basic_stream_socket::endpoint_type
basic_stream_socket::get_implementation
basic_stream_socket::get_io_service
basic_stream_socket::get_option
basic_stream_socket::get_service
basic_stream_socket::implementation
basic_stream_socket::implementation_type
basic_stream_socket::io_control
basic_stream_socket::is_open
basic_stream_socket::keep_alive
basic_stream_socket::linger
basic_stream_socket::local_endpoint
basic_stream_socket::lowest_layer
basic_stream_socket::lowest_layer_type
basic_stream_socket::max_connections
basic_stream_socket::message_do_not_route
basic_stream_socket::message_end_of_record
basic_stream_socket::message_flags
basic_stream_socket::message_out_of_band
basic_stream_socket::message_peek
basic_stream_socket::native
basic_stream_socket::native_handle
basic_stream_socket::native_handle_type
basic_stream_socket::native_non_blocking
basic_stream_socket::native_type
basic_stream_socket::non_blocking
basic_stream_socket::non_blocking_io
basic_stream_socket::open
basic_stream_socket::operator=
basic_stream_socket::protocol_type
basic_stream_socket::read_some
basic_stream_socket::receive
basic_stream_socket::receive_buffer_size
basic_stream_socket::receive_low_watermark
basic_stream_socket::remote_endpoint
basic_stream_socket::reuse_address
basic_stream_socket::send
basic_stream_socket::send_buffer_size
basic_stream_socket::send_low_watermark
basic_stream_socket::service
basic_stream_socket::service_type
basic_stream_socket::set_option
basic_stream_socket::shutdown
basic_stream_socket::shutdown_type
basic_stream_socket::write_some

Provides stream-oriented socket functionality.

template<
    typename Protocol,
    typename StreamSocketService = stream_socket_service<Protocol>>
class basic_stream_socket :
  public basic_socket< Protocol, StreamSocketService >
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

async_read_some

Start an asynchronous read.

async_receive

Start an asynchronous receive.

async_send

Start an asynchronous send.

async_write_some

Start an asynchronous write.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

basic_stream_socket

Construct a basic_stream_socket without opening it.

Construct and open a basic_stream_socket.

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

Construct a basic_stream_socket on an existing native socket.

Move-construct a basic_stream_socket from another.

Move-construct a basic_stream_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_stream_socket from another.

Move-assign a basic_stream_socket from a socket of another protocol type.

read_some

Read some data from the socket.

receive

Receive some data on the socket.

Receive some data on a connected socket.

remote_endpoint

Get the remote endpoint of the socket.

send

Send some data on the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

write_some

Write some data to the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_stream_socket class template provides asynchronous and blocking stream-oriented socket functionality.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Assign an existing native socket to the socket.

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

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

Inherited from basic_socket.

Start an asynchronous connect.

template<
    typename ConnectHandler>
void-or-deduced 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.

Parameters

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().

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

Start an asynchronous read.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The read operation may not read all of the requested number of bytes. Consider using the async_read function if you need to ensure that the requested amount of data is read before the asynchronous operation completes.

Example

To read into a single data buffer use the buffer function as follows:

socket.async_read_some(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    ReadHandler handler);
  » more...

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags,
    ReadHandler handler);
  » more...

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the async_read function if you need to ensure that the requested amount of data is received before the asynchronous operation completes.

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous receive.

template<
    typename MutableBufferSequence,
    typename ReadHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the async_read function if you need to ensure that the requested amount of data is received before the asynchronous operation completes.

Example

To receive into a single data buffer use the buffer function as follows:

socket.async_receive(boost::asio::buffer(data, size), 0, handler);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    WriteHandler handler);
  » more...

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    WriteHandler handler);
  » more...

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The send operation may not transmit all of the data to the peer. Consider using the async_write function if you need to ensure that all data is written before the asynchronous operation completes.

Example

To send a single data buffer use the buffer function as follows:

socket.async_send(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous send.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The send operation may not transmit all of the data to the peer. Consider using the async_write function if you need to ensure that all data is written before the asynchronous operation completes.

Example

To send a single data buffer use the buffer function as follows:

socket.async_send(boost::asio::buffer(data, size), 0, handler);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Start an asynchronous write.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced 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.

Parameters

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().

Remarks

The write operation may not transmit all of the data to the peer. Consider using the async_write function if you need to ensure that all data is written before the asynchronous operation completes.

Example

To write a single data buffer use the buffer function as follows:

socket.async_write_some(boost::asio::buffer(data, size), handler);

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Determine whether the socket is at the out-of-band data mark.

bool at_mark() const;
  » more...

bool at_mark(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

A bool indicating whether the socket is at the out-of-band data mark.

Determine the number of bytes available for reading.

std::size_t available() const;
  » more...

std::size_t available(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes that may be read without blocking, or 0 if an error occurs.

Construct a basic_stream_socket without opening it.

explicit basic_stream_socket(
    boost::asio::io_service & io_service);
  » more...

Construct and open a basic_stream_socket.

basic_stream_socket(
    boost::asio::io_service & io_service,
    const protocol_type & protocol);
  » more...

Construct a 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);
  » more...

Construct a 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);
  » more...

Move-construct a basic_stream_socket from another.

basic_stream_socket(
    basic_stream_socket && other);
  » more...

Move-construct a basic_stream_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename StreamSocketService1>
basic_stream_socket(
    basic_stream_socket< Protocol1, StreamSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
  » more...

Construct a 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.

Parameters

io_service

The io_service object that the stream socket will use to dispatch handlers for any asynchronous operations performed on the socket.

Construct and open a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Construct a 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.

Parameters

io_service

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

Exceptions

boost::system::system_error

Thrown on failure.

Move-construct a basic_stream_socket from another.

basic_stream_socket(
    basic_stream_socket && other);

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

Parameters

other

The other basic_stream_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_stream_socket(io_service&) constructor.

Move-construct a basic_stream_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename StreamSocketService1>
basic_stream_socket(
    basic_stream_socket< Protocol1, StreamSocketService1 > && other,
    typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);

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

Parameters

other

The other basic_stream_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_stream_socket(io_service&) constructor.

Bind the socket to the given local endpoint.

void bind(
    const endpoint_type & endpoint);
  » more...

boost::system::error_code bind(
    const endpoint_type & endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

endpoint

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

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

endpoint

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

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to permit sending of broadcast messages.

typedef implementation_defined broadcast;

Implements the SOL_SOCKET/SO_BROADCAST socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

IO control command to get the amount of data that can be read without blocking.

typedef implementation_defined bytes_readable;

Implements the FIONREAD IO control command.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Cancel all asynchronous operations associated with the socket.

void cancel();
  » more...

boost::system::error_code cancel(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

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.

Close the socket.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure. Note that, even if the function indicates an error, the underlying descriptor is closed.

Remarks

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

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.

Parameters

ec

Set to indicate what error occurred, if any. Note that, even if the function indicates an error, the underlying descriptor is closed.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::system::error_code ec;
socket.close(ec);
if (ec)
{
  // An error occurred.
}
Remarks

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

Connect the socket to the specified endpoint.

void connect(
    const endpoint_type & peer_endpoint);
  » more...

boost::system::error_code connect(
    const endpoint_type & peer_endpoint,
    boost::system::error_code & ec);
  » more...

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

peer_endpoint

The remote endpoint to which the socket will be connected.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Socket option to enable socket-level debugging.

typedef implementation_defined debug;

Implements the SOL_SOCKET/SO_DEBUG socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to prevent routing, use local interfaces only.

typedef implementation_defined do_not_route;

Implements the SOL_SOCKET/SO_DONTROUTE socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to report aborted connections on accept.

typedef implementation_defined enable_connection_aborted;

Implements a custom socket option that determines whether or not an accept operation is permitted to fail with boost::asio::error::connection_aborted. By default the option is false.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

The endpoint type.

typedef Protocol::endpoint endpoint_type;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get an option from the socket.

void get_option(
    GettableSocketOption & option) const;
  » more...

boost::system::error_code get_option(
    GettableSocketOption & option,
    boost::system::error_code & ec) const;
  » more...

Inherited from basic_socket.

Get an option from the socket.

template<
    typename GettableSocketOption>
void get_option(
    GettableSocketOption & option) const;

This function is used to get the current value of an option on the socket.

Parameters

option

The option value to be obtained from the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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.value();

Inherited from basic_socket.

Get an option from the socket.

template<
    typename 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.

Parameters

option

The option value to be obtained from the socket.

ec

Set to indicate what error occurred, if any.

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.value();

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Perform an IO control command on the socket.

void io_control(
    IoControlCommand & command);
  » more...

boost::system::error_code io_control(
    IoControlCommand & command,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename IoControlCommand>
void io_control(
    IoControlCommand & command);

This function is used to execute an IO control command on the socket.

Parameters

command

The IO control command to be performed on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Perform an IO control command on the socket.

template<
    typename 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.

Parameters

command

The IO control command to be performed on the socket.

ec

Set to indicate what error occurred, if any.

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

Inherited from basic_socket.

Determine whether the socket is open.

bool is_open() const;

Inherited from socket_base.

Socket option to send keep-alives.

typedef implementation_defined keep_alive;

Implements the SOL_SOCKET/SO_KEEPALIVE socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option to specify whether the socket lingers on close if unsent data is present.

typedef implementation_defined linger;

Implements the SOL_SOCKET/SO_LINGER socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Get the local endpoint of the socket.

endpoint_type local_endpoint() const;
  » more...

endpoint_type local_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the local endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.local_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the local endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

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 basic_socket cannot contain any further layers, it simply returns a reference to itself.

Return Value

A const reference to the lowest layer in the stack of layers. Ownership is not transferred to the caller.

Inherited from basic_socket.

A basic_socket is always the lowest layer.

typedef basic_socket< Protocol, StreamSocketService > lowest_layer_type;
Types

Name

Description

broadcast

Socket option to permit sending of broadcast messages.

bytes_readable

IO control command to get the amount of data that can be read without blocking.

debug

Socket option to enable socket-level debugging.

do_not_route

Socket option to prevent routing, use local interfaces only.

enable_connection_aborted

Socket option to report aborted connections on accept.

endpoint_type

The endpoint type.

implementation_type

The underlying implementation type of I/O object.

keep_alive

Socket option to send keep-alives.

linger

Socket option to specify whether the socket lingers on close if unsent data is present.

lowest_layer_type

A basic_socket is always the lowest layer.

message_flags

Bitmask type for flags that can be passed to send and receive operations.

native_handle_type

The native representation of a socket.

native_type

(Deprecated: Use native_handle_type.) The native representation of a socket.

non_blocking_io

(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket.

protocol_type

The protocol type.

receive_buffer_size

Socket option for the receive buffer size of a socket.

receive_low_watermark

Socket option for the receive low watermark.

reuse_address

Socket option to allow the socket to be bound to an address that is already in use.

send_buffer_size

Socket option for the send buffer size of a socket.

send_low_watermark

Socket option for the send low watermark.

service_type

The type of the service that will be used to provide I/O operations.

shutdown_type

Different ways a socket may be shutdown.

Member Functions

Name

Description

assign

Assign an existing native socket to the socket.

async_connect

Start an asynchronous connect.

at_mark

Determine whether the socket is at the out-of-band data mark.

available

Determine the number of bytes available for reading.

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.

Move-construct a basic_socket from a socket of another protocol type.

bind

Bind the socket to the given local endpoint.

cancel

Cancel all asynchronous operations associated with the socket.

close

Close the socket.

connect

Connect the socket to the specified endpoint.

get_io_service

Get the io_service associated with the object.

get_option

Get an option from the socket.

io_control

Perform an IO control command on the socket.

is_open

Determine whether the socket is open.

local_endpoint

Get the local endpoint of the socket.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

native

(Deprecated: Use native_handle().) Get the native socket representation.

native_handle

Get the native socket representation.

native_non_blocking

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

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

non_blocking

Gets the non-blocking mode of the socket.

Sets the non-blocking mode of the socket.

open

Open the socket using the specified protocol.

operator=

Move-assign a basic_socket from another.

Move-assign a basic_socket from a socket of another protocol type.

remote_endpoint

Get the remote endpoint of the socket.

set_option

Set an option on the socket.

shutdown

Disable sends or receives on the socket.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

~basic_socket

Protected destructor to prevent deletion through this type.

Data Members

Name

Description

max_connections

The maximum length of the queue of pending incoming connections.

message_do_not_route

Specify that the data should not be subject to routing.

message_end_of_record

Specifies that the data marks the end of a record.

message_out_of_band

Process out-of-band data.

message_peek

Peek at incoming data without removing it from the input queue.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_socket class template provides functionality that is common to both stream-oriented and datagram-oriented sockets.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

The maximum length of the queue of pending incoming connections.

static const int max_connections = implementation_defined;

Inherited from socket_base.

Specify that the data should not be subject to routing.

static const int message_do_not_route = implementation_defined;

Inherited from socket_base.

Specifies that the data marks the end of a record.

static const int message_end_of_record = implementation_defined;

Inherited from socket_base.

Bitmask type for flags that can be passed to send and receive operations.

typedef int message_flags;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Process out-of-band data.

static const int message_out_of_band = implementation_defined;

Inherited from socket_base.

Peek at incoming data without removing it from the input queue.

static const int message_peek = implementation_defined;

Inherited from 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.

Inherited from 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.

The native representation of a socket.

typedef StreamSocketService::native_handle_type native_handle_type;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

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

bool native_non_blocking() const;
  » more...

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

void native_non_blocking(
    bool mode);
  » more...

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

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.

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

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.

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

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.

Parameters

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

Exceptions

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.

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

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.

Parameters

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.

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

(Deprecated: Use native_handle_type.) The native representation of a socket.

typedef StreamSocketService::native_handle_type native_type;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Gets the non-blocking mode of the socket.

bool non_blocking() const;
  » more...

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
  » more...

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

Inherited from basic_socket.

Gets the non-blocking mode of the socket.

bool non_blocking() const;
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.

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.

Inherited from basic_socket.

Sets the non-blocking mode of the socket.

void non_blocking(
    bool mode);
Parameters

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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

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.

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.

Inherited from 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.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::socket_base::non_blocking_io command(true);
socket.io_control(command);
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Open the socket using the specified protocol.

void open(
    const protocol_type & protocol = protocol_type());
  » more...

boost::system::error_code open(
    const protocol_type & protocol,
    boost::system::error_code & ec);
  » more...

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.

Parameters

protocol

An object specifying protocol parameters to be used.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
socket.open(boost::asio::ip::tcp::v4());

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.

Parameters

protocol

An object specifying which protocol is to be used.

ec

Set to indicate what error occurred, if any.

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

Move-assign a basic_stream_socket from another.

basic_stream_socket & operator=(
    basic_stream_socket && other);
  » more...

Move-assign a basic_stream_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename StreamSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_stream_socket >::type & operator=(
    basic_stream_socket< Protocol1, StreamSocketService1 > && other);
  » more...

Move-assign a 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.

Parameters

other

The other basic_stream_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_stream_socket(io_service&) constructor.

Move-assign a basic_stream_socket from a socket of another protocol type.

template<
    typename Protocol1,
    typename StreamSocketService1>
enable_if< is_convertible< Protocol1, Protocol >::value, basic_stream_socket >::type & operator=(
    basic_stream_socket< Protocol1, StreamSocketService1 > && other);

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

Parameters

other

The other basic_stream_socket object from which the move will occur.

Remarks

Following the move, the moved-from object is in the same state as if constructed using the basic_stream_socket(io_service&) constructor.

The protocol type.

typedef Protocol protocol_type;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Read some data from the socket.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);
  » more...

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Read some data from the socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be read.

Return Value

The number of bytes read.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The read_some operation may not read all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Example

To read into a single data buffer use the buffer function as follows:

socket.read_some(boost::asio::buffer(data, size));

See the buffer documentation for information on reading into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Read some data from the socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be read.

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes read. Returns 0 if an error occurred.

Remarks

The read_some operation may not read all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Receive some data on the socket.

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers);
  » more...

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

Receive some data on a connected socket.

template<
    typename MutableBufferSequence>
std::size_t receive(
    const MutableBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Receive some data on the socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be received.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Example

To receive into a single data buffer use the buffer function as follows:

socket.receive(boost::asio::buffer(data, size));

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive some data on the socket.

template<
    typename 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.

Parameters

buffers

One or more buffers into which the data will be received.

flags

Flags specifying how the receive call is to be made.

Return Value

The number of bytes received.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Example

To receive into a single data buffer use the buffer function as follows:

socket.receive(boost::asio::buffer(data, size), 0);

See the buffer documentation for information on receiving into multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Receive some data on a connected socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes received. Returns 0 if an error occurred.

Remarks

The receive operation may not receive all of the requested number of bytes. Consider using the read function if you need to ensure that the requested amount of data is read before the blocking operation completes.

Inherited from socket_base.

Socket option for the receive buffer size of a socket.

typedef implementation_defined receive_buffer_size;

Implements the SOL_SOCKET/SO_RCVBUF socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the receive low watermark.

typedef implementation_defined receive_low_watermark;

Implements the SOL_SOCKET/SO_RCVLOWAT socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Get the remote endpoint of the socket.

endpoint_type remote_endpoint() const;
  » more...

endpoint_type remote_endpoint(
    boost::system::error_code & ec) const;
  » more...

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.

Return Value

An object that represents the remote endpoint of the socket.

Exceptions

boost::system::system_error

Thrown on failure.

Example
boost::asio::ip::tcp::socket socket(io_service);
...
boost::asio::ip::tcp::endpoint endpoint = socket.remote_endpoint();

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

An object that represents the remote endpoint of the socket. Returns a default-constructed endpoint object if an error occurred.

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

Inherited from socket_base.

Socket option to allow the socket to be bound to an address that is already in use.

typedef implementation_defined reuse_address;

Implements the SOL_SOCKET/SO_REUSEADDR socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Send some data on the socket.

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags);
  » more...

template<
    typename ConstBufferSequence>
std::size_t send(
    const ConstBufferSequence & buffers,
    socket_base::message_flags flags,
    boost::system::error_code & ec);
  » more...

Send some data on the socket.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be sent on the socket.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Remarks

The send operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Example

To send a single data buffer use the buffer function as follows:

socket.send(boost::asio::buffer(data, size));

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send some data on the socket.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be sent on the socket.

flags

Flags specifying how the send call is to be made.

Return Value

The number of bytes sent.

Exceptions

boost::system::system_error

Thrown on failure.

Remarks

The send operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Example

To send a single data buffer use the buffer function as follows:

socket.send(boost::asio::buffer(data, size), 0);

See the buffer documentation for information on sending multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Send some data on the socket.

template<
    typename 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.

Parameters

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.

Return Value

The number of bytes sent. Returns 0 if an error occurred.

Remarks

The send operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Inherited from socket_base.

Socket option for the send buffer size of a socket.

typedef implementation_defined send_buffer_size;

Implements the SOL_SOCKET/SO_SNDBUF socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from socket_base.

Socket option for the send low watermark.

typedef implementation_defined send_low_watermark;

Implements the SOL_SOCKET/SO_SNDLOWAT socket option.

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

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef StreamSocketService service_type;
Requirements

Header: boost/asio/basic_stream_socket.hpp

Convenience header: boost/asio.hpp

Set an option on the socket.

void set_option(
    const SettableSocketOption & option);
  » more...

boost::system::error_code set_option(
    const SettableSocketOption & option,
    boost::system::error_code & ec);
  » more...

Inherited from basic_socket.

Set an option on the socket.

template<
    typename SettableSocketOption>
void set_option(
    const SettableSocketOption & option);

This function is used to set an option on the socket.

Parameters

option

The new option value to be set on the socket.

Exceptions

boost::system::system_error

Thrown on failure.

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

Inherited from basic_socket.

Set an option on the socket.

template<
    typename 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.

Parameters

option

The new option value to be set on the socket.

ec

Set to indicate what error occurred, if any.

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

Disable sends or receives on the socket.

void shutdown(
    shutdown_type what);
  » more...

boost::system::error_code shutdown(
    shutdown_type what,
    boost::system::error_code & ec);
  » more...

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.

Parameters

what

Determines what types of operation will no longer be allowed.

Exceptions

boost::system::system_error

Thrown on failure.

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

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.

Parameters

what

Determines what types of operation will no longer be allowed.

ec

Set to indicate what error occurred, if any.

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

Inherited from socket_base.

Different ways a socket may be shutdown.

enum shutdown_type

Values

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.

Write some data to the socket.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);
  » more...

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Write some data to the socket.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be written to the socket.

Return Value

The number of bytes written.

Exceptions

boost::system::system_error

Thrown on failure. An error code of boost::asio::error::eof indicates that the connection was closed by the peer.

Remarks

The write_some operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Example

To write a single data buffer use the buffer function as follows:

socket.write_some(boost::asio::buffer(data, size));

See the buffer documentation for information on writing multiple buffers in one go, and how to use it with arrays, boost::array or std::vector.

Write some data to the socket.

template<
    typename 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.

Parameters

buffers

One or more data buffers to be written to the socket.

ec

Set to indicate what error occurred, if any.

Return Value

The number of bytes written. Returns 0 if an error occurred.

Remarks

The write_some operation may not transmit all of the data to the peer. Consider using the write function if you need to ensure that all data is written before the blocking operation completes.

Automatically resizable buffer class based on std::streambuf.

template<
    typename Allocator = std::allocator<char>>
class basic_streambuf :
  noncopyable
Types

Name

Description

const_buffers_type

The type used to represent the input sequence as a list of buffers.

mutable_buffers_type

The type used to represent the output sequence as a list of buffers.

Member Functions

Name

Description

basic_streambuf

Construct a basic_streambuf object.

commit

Move characters from the output sequence to the input sequence.

consume

Remove characters from the input sequence.

data

Get a list of buffers that represents the input sequence.

max_size

Get the maximum size of the basic_streambuf.

prepare

Get a list of buffers that represents the output sequence, with the given size.

size

Get the size of the input sequence.

Protected Member Functions

Name

Description

overflow

Override std::streambuf behaviour.

reserve

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

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

Header: boost/asio/basic_streambuf.hpp

Convenience header: boost/asio.hpp

Construct a 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.

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.

Remarks

If n is greater than the size of the output sequence, the entire output sequence is moved to the input sequence and no error is issued.

The type used to represent the input sequence as a list of buffers.

typedef implementation_defined const_buffers_type;
Requirements

Header: boost/asio/basic_streambuf.hpp

Convenience header: boost/asio.hpp

Remove characters from the input sequence.

void consume(
    std::size_t n);

Removes n characters from the beginning of the input sequence.

Remarks

If n is greater than the size of the input sequence, the entire input sequence is consumed and no error is issued.

Get a list of buffers that represents the input sequence.

const_buffers_type data() const;
Return Value

An object of type const_buffers_type that satisfies ConstBufferSequence requirements, representing all character arrays in the input sequence.

Remarks

The returned object is invalidated by any basic_streambuf member function that modifies the input sequence or output sequence.

Get the maximum size of the basic_streambuf.

std::size_t max_size() const;
Return Value

The allowed maximum of the sum of the sizes of the input sequence and output sequence.

The type used to represent the output sequence as a list of buffers.

typedef implementation_defined mutable_buffers_type;
Requirements

Header: boost/asio/basic_streambuf.hpp

Convenience header: boost/asio.hpp

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.

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.

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.

Exceptions

std::length_error

If size() + n > max_size().

Remarks

The returned object is invalidated by any basic_streambuf member function that modifies the input sequence or output sequence.

void reserve(
    std::size_t n);

Get the size of the input sequence.

std::size_t size() const;
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);
}

Override std::streambuf behaviour.

int_type underflow();

Behaves according to the specification of std::streambuf::underflow().

Provides waitable timer functionality.

template<
    typename Clock,
    typename WaitTraits = boost::asio::wait_traits<Clock>,
    typename WaitableTimerService = waitable_timer_service<Clock, WaitTraits>>
class basic_waitable_timer :
  public basic_io_object< WaitableTimerService >
Types

Name

Description

clock_type

The clock type.

duration

The duration type of the clock.

implementation_type

The underlying implementation type of I/O object.

service_type

The type of the service that will be used to provide I/O operations.

time_point

The time point type of the clock.

traits_type

The wait traits type.

Member Functions

Name

Description

async_wait

Start an asynchronous wait on the 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.

cancel

Cancel any asynchronous operations that are waiting on the timer.

cancel_one

Cancels one asynchronous operation that is waiting on the timer.

expires_at

Get the timer's expiry time as an absolute time.

Set the timer's expiry time as an absolute time.

expires_from_now

Get the timer's expiry time relative to now.

Set the timer's expiry time relative to now.

get_io_service

Get the io_service associated with the object.

wait

Perform a blocking wait on the timer.

Protected Member Functions

Name

Description

get_implementation

Get the underlying implementation of the I/O object.

get_service

Get the service associated with the I/O object.

Protected Data Members

Name

Description

implementation

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

service

(Deprecated: Use get_service().) The service associated with the I/O object.

The basic_waitable_timer class template provides the ability to perform a blocking or asynchronous wait for a timer to expire.

A waitable timer is always in one of two states: "expired" or "not expired". If the wait() or async_wait() function is called on an expired timer, the wait operation will complete immediately.

Most applications will use one of the steady_timer, system_timer or high_resolution_timer typedefs.

Remarks

This waitable timer functionality is for use with the C++11 standard library's <chrono> facility, or with the Boost.Chrono library.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Examples

Performing a blocking wait (C++11):

// Construct a timer without setting an expiry time.
boost::asio::steady_timer timer(io_service);

// Set an expiry time relative to now.
timer.expires_from_now(std::chrono::seconds(5));

// Wait for the timer to expire.
timer.wait();

Performing an asynchronous wait (C++11):

void handler(const boost::system::error_code& error)
{
  if (!error)
  {
    // Timer expired.
  }
}

...

// Construct a timer with an absolute expiry time.
boost::asio::steady_timer timer(io_service,
    std::chrono::steady_clock::now() + std::chrono::seconds(60));

// Start an asynchronous wait.
timer.async_wait(handler);
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.
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

Start an asynchronous wait on the timer.

template<
    typename WaitHandler>
void-or-deduced 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.
Parameters

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().

Constructor.

explicit basic_waitable_timer(
    boost::asio::io_service & io_service);
  » more...

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);
  » more...

Constructor to set a particular expiry time relative to now.

basic_waitable_timer(
    boost::asio::io_service & io_service,
    const duration & expiry_time);
  » more...

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.

Parameters

io_service

The io_service object that the timer will use to dispatch handlers for any asynchronous operations performed on the timer.

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.

Parameters

io_service

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

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.

Parameters

io_service

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

Cancel any asynchronous operations that are waiting on the timer.

std::size_t cancel();
  » more...

std::size_t cancel(
    boost::system::error_code & ec);
  » more...

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.

Return Value

The number of asynchronous operations that were cancelled.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled.

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.

Cancels one asynchronous operation that is waiting on the timer.

std::size_t cancel_one();
  » more...

std::size_t cancel_one(
    boost::system::error_code & ec);
  » more...

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.

Return Value

The number of asynchronous operations that were cancelled. That is, either 0 or 1.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled. That is, either 0 or 1.

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.

The clock type.

typedef Clock clock_type;
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

The duration type of the clock.

typedef clock_type::duration duration;
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

Get the timer's expiry time as an absolute time.

time_point expires_at() const;
  » more...

Set the timer's expiry time as an absolute time.

std::size_t expires_at(
    const time_point & expiry_time);
  » more...

std::size_t expires_at(
    const time_point & expiry_time,
    boost::system::error_code & ec);
  » more...

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

Return Value

The number of asynchronous operations that were cancelled.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled.

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.

Get the timer's expiry time relative to now.

duration expires_from_now() const;
  » more...

Set the timer's expiry time relative to now.

std::size_t expires_from_now(
    const duration & expiry_time);
  » more...

std::size_t expires_from_now(
    const duration & expiry_time,
    boost::system::error_code & ec);
  » more...

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

Return Value

The number of asynchronous operations that were cancelled.

Exceptions

boost::system::system_error

Thrown on failure.

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.

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.

Parameters

expiry_time

The expiry time to be used for the timer.

ec

Set to indicate what error occurred, if any.

Return Value

The number of asynchronous operations that were cancelled.

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.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();
  » more...

const implementation_type & get_implementation() const;
  » more...

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

implementation_type & get_implementation();

Inherited from basic_io_object.

Get the underlying implementation of the I/O object.

const implementation_type & get_implementation() const;

Inherited from basic_io_object.

Get the io_service associated with the object.

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

This function may be used to obtain the io_service object that the I/O object uses to dispatch handlers for asynchronous operations.

Return Value

A reference to the io_service object that the I/O object will use to dispatch handlers. Ownership is not transferred to the caller.

Get the service associated with the I/O object.

service_type & get_service();
  » more...

const service_type & get_service() const;
  » more...

Inherited from basic_io_object.

Get the service associated with the I/O object.

service_type & get_service();

Inherited from basic_io_object.

Get the service associated with the I/O object.

const service_type & get_service() const;

Inherited from basic_io_object.

(Deprecated: Use get_implementation().) The underlying implementation of the I/O object.

implementation_type implementation;

Inherited from basic_io_object.

The underlying implementation type of I/O object.

typedef service_type::implementation_type implementation_type;
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

Inherited from basic_io_object.

(Deprecated: Use get_service().) The service associated with the I/O object.

service_type & service;
Remarks

Available only for services that do not support movability.

Inherited from basic_io_object.

The type of the service that will be used to provide I/O operations.

typedef WaitableTimerService service_type;
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

The time point type of the clock.

typedef clock_type::time_point time_point;
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

The wait traits type.

typedef WaitTraits traits_type;
Requirements

Header: boost/asio/basic_waitable_timer.hpp

Convenience header: boost/asio.hpp

Perform a blocking wait on the timer.

void wait();
  » more...

void wait(
    boost::system::error_code & ec);
  » more...

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.

Exceptions

boost::system::system_error

Thrown on failure.

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.

Parameters

ec

Set to indicate what error occurred, if any.

Context object the represents the currently executing coroutine.

template<
    typename Handler>
class basic_yield_context
Types

Name

Description

callee_type

The coroutine callee type, used by the implementation.

caller_type

The coroutine caller type, used by the implementation.

Member Functions

Name

Description

basic_yield_context

Construct a yield context to represent the specified coroutine.

operator[]

Return a yield context that sets the specified error_code.

The basic_yield_context class is used to represent the currently executing stackful coroutine. A basic_yield_context may be passed as a handler to an asynchronous operation. For example:

template <typename Handler>
void my_coroutine(basic_yield_context<Handler> yield)
{
  ...
  std::size_t n = my_socket.async_read_some(buffer, yield);
  ...
}

The initiating function (async_read_some in the above example) suspends the current coroutine. The coroutine is resumed when the asynchronous operation completes, and the result of the operation is returned.

Requirements

Header: boost/asio/spawn.hpp

Convenience header: None

Construct a yield context to represent the specified coroutine.

basic_yield_context(
    const detail::weak_ptr< callee_type > & coro,
    caller_type & ca,
    Handler & handler);

Most applications do not need to use this constructor. Instead, the spawn() function passes a yield context as an argument to the coroutine function.

The coroutine callee type, used by the implementation.

typedef implementation_defined callee_type;

When using Boost.Coroutine v1, this type is:

typename coroutine<void()>

When using Boost.Coroutine v2 (unidirectional coroutines), this type is:

push_coroutine<void>
Requirements

Header: boost/asio/spawn.hpp

Convenience header: None

The coroutine caller type, used by the implementation.

typedef implementation_defined caller_type;

When using Boost.Coroutine v1, this type is:

typename coroutine<void()>::caller_type

When using Boost.Coroutine v2 (unidirectional coroutines), this type is:

pull_coroutine<void>
Requirements

Header: boost/asio/spawn.hpp

Convenience header: None

Return a yield context that sets the specified error_code.

basic_yield_context operator[](
    boost::system::error_code & ec) const;

By default, when a yield context is used with an asynchronous operation, a non-success error_code is converted to system_error and thrown. This operator may be used to specify an error_code object that should instead be set with the asynchronous operation's result. For example:

template <typename Handler>
void my_coroutine(basic_yield_context<Handler> yield)
{
  ...
  std::size_t n = my_socket.async_read_some(buffer, yield[ec]);
  if (ec)
  {
    // An error occurred.
  }
  ...
}

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 buffer(
    const mutable_buffer & b);
  » more...

mutable_buffers_1 buffer(
    const mutable_buffer & b,
    std::size_t max_size_in_bytes);
  » more...

const_buffers_1 buffer(
    const const_buffer & b);
  » more...

const_buffers_1 buffer(
    const const_buffer & b,
    std::size_t max_size_in_bytes);
  » more...

mutable_buffers_1 buffer(
    void * data,
    std::size_t size_in_bytes);
  » more...

const_buffers_1 buffer(
    const void * data,
    std::size_t size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
mutable_buffers_1 buffer(
    PodType (&data)[N]);
  » more...

template<
    typename PodType,
    std::size_t N>
mutable_buffers_1 buffer(
    PodType (&data)[N],
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    const PodType (&data)[N]);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    const PodType (&data)[N],
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
mutable_buffers_1 buffer(
    boost::array< PodType, N > & data);
  » more...

template<
    typename PodType,
    std::size_t N>
mutable_buffers_1 buffer(
    boost::array< PodType, N > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    boost::array< const PodType, N > & data);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    boost::array< const PodType, N > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    const boost::array< PodType, N > & data);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    const boost::array< PodType, N > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
mutable_buffers_1 buffer(
    std::array< PodType, N > & data);
  » more...

template<
    typename PodType,
    std::size_t N>
mutable_buffers_1 buffer(
    std::array< PodType, N > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    std::array< const PodType, N > & data);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    std::array< const PodType, N > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    const std::array< PodType, N > & data);
  » more...

template<
    typename PodType,
    std::size_t N>
const_buffers_1 buffer(
    const std::array< PodType, N > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    typename Allocator>
mutable_buffers_1 buffer(
    std::vector< PodType, Allocator > & data);
  » more...

template<
    typename PodType,
    typename Allocator>
mutable_buffers_1 buffer(
    std::vector< PodType, Allocator > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename PodType,
    typename Allocator>
const_buffers_1 buffer(
    const std::vector< PodType, Allocator > & data);
  » more...

template<
    typename PodType,
    typename Allocator>
const_buffers_1 buffer(
    const std::vector< PodType, Allocator > & data,
    std::size_t max_size_in_bytes);
  » more...

template<
    typename Elem,
    typename Traits,
    typename Allocator>
const_buffers_1 buffer(
    const std::basic_string< Elem, Traits, Allocator > & data);
  » more...

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);
  » 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 mutable_buffer and const_buffer, respectively. To mirror C++'s conversion rules, a mutable_buffer is implicitly convertible to a 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.

Accessing Buffer Contents

The contents of a buffer may be accessed using the buffer_size and 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 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.

Buffer Copying

The buffer_copy function may be used to copy raw bytes between individual buffers and buffer sequences.

In particular, when used with the buffer_size , the 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);

Note that buffer_copy is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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' }.

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

Header: boost/asio/buffer.hpp

Convenience header: boost/asio.hpp

Create a new modifiable buffer from an existing buffer.

mutable_buffers_1 buffer(
    const mutable_buffer & b);
Return Value

mutable_buffers_1(b).

Create a new modifiable buffer from an existing buffer.

mutable_buffers_1 buffer(
    const mutable_buffer & b,
    std::size_t max_size_in_bytes);
Return Value

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    buffer_cast<void*>(b),
    min(buffer_size(b), max_size_in_bytes));

Create a new non-modifiable buffer from an existing buffer.

const_buffers_1 buffer(
    const const_buffer & b);
Return Value

const_buffers_1(b).

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    buffer_cast<const void*>(b),
    min(buffer_size(b), max_size_in_bytes));

Create a new modifiable buffer that represents the given memory range.

mutable_buffers_1 buffer(
    void * data,
    std::size_t size_in_bytes);
Return Value

mutable_buffers_1(data, size_in_bytes).

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

const_buffers_1(data, size_in_bytes).

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]);
Return Value

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    static_cast<void*>(data),
    N * sizeof(PodType));

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    static_cast<void*>(data),
    min(N * sizeof(PodType), max_size_in_bytes));

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]);
Return Value

A const_buffers_1 value equivalent to:

const_buffers_1(
    static_cast<const void*>(data),
    N * sizeof(PodType));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    static_cast<const void*>(data),
    min(N * sizeof(PodType), max_size_in_bytes));

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    data.data(),
    data.size() * sizeof(PodType));

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    data.data(),
    min(data.size() * sizeof(PodType), max_size_in_bytes));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    data.size() * sizeof(PodType));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    min(data.size() * sizeof(PodType), max_size_in_bytes));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    data.size() * sizeof(PodType));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    min(data.size() * sizeof(PodType), max_size_in_bytes));

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    data.data(),
    data.size() * sizeof(PodType));

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    data.data(),
    min(data.size() * sizeof(PodType), max_size_in_bytes));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    data.size() * sizeof(PodType));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    min(data.size() * sizeof(PodType), max_size_in_bytes));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    data.size() * sizeof(PodType));

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    min(data.size() * sizeof(PodType), max_size_in_bytes));

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    data.size() ? &data[0] : 0,
    data.size() * sizeof(PodType));
Remarks

The buffer is invalidated by any vector operation that would also invalidate iterators.

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

A mutable_buffers_1 value equivalent to:

mutable_buffers_1(
    data.size() ? &data[0] : 0,
    min(data.size() * sizeof(PodType), max_size_in_bytes));
Remarks

The buffer is invalidated by any vector operation that would also invalidate iterators.

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.size() ? &data[0] : 0,
    data.size() * sizeof(PodType));
Remarks

The buffer is invalidated by any vector operation that would also invalidate iterators.

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.size() ? &data[0] : 0,
    min(data.size() * sizeof(PodType), max_size_in_bytes));
Remarks

The buffer is invalidated by any vector operation that would also invalidate iterators.

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

const_buffers_1(data.data(), data.size() * sizeof(Elem)).

Remarks

The buffer is invalidated by any non-const operation called on the given string object.

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

A const_buffers_1 value equivalent to:

const_buffers_1(
    data.data(),
    min(data.size() * sizeof(Elem), max_size_in_bytes));
Remarks

The buffer is invalidated by any non-const operation called on the given string object.

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 buffer_cast(
    const mutable_buffer & b);
  » more...

template<
    typename PointerToPodType>
PointerToPodType buffer_cast(
    const const_buffer & b);
  » more...
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.

Requirements

Header: boost/asio/buffer.hpp

Convenience header: boost/asio.hpp

Cast a non-modifiable buffer to a specified pointer to POD type.

template<
    typename PointerToPodType>
PointerToPodType buffer_cast(
    const mutable_buffer & b);

Cast a non-modifiable buffer to a specified pointer to POD type.

template<
    typename PointerToPodType>
PointerToPodType buffer_cast(
    const const_buffer & b);

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 buffer_copy(
    const mutable_buffer & target,
    const const_buffer & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const const_buffers_1 & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const mutable_buffer & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const mutable_buffers_1 & source);
  » more...

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffer & target,
    const ConstBufferSequence & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const const_buffer & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const const_buffers_1 & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const mutable_buffer & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const mutable_buffers_1 & source);
  » more...

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const ConstBufferSequence & source);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffer & source);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffers_1 & source);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffer & source);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffers_1 & source);
  » more...

template<
    typename MutableBufferSequence,
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const ConstBufferSequence & source);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const const_buffer & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const const_buffers_1 & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const mutable_buffer & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffer & target,
    const mutable_buffers_1 & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffer & target,
    const ConstBufferSequence & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const const_buffer & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const const_buffers_1 & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const mutable_buffer & source,
    std::size_t max_bytes_to_copy);
  » more...

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const mutable_buffers_1 & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const ConstBufferSequence & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffer & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffers_1 & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffer & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffers_1 & source,
    std::size_t max_bytes_to_copy);
  » more...

template<
    typename MutableBufferSequence,
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const ConstBufferSequence & source,
    std::size_t max_bytes_to_copy);
  » 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.

Note that buffer_copy is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Requirements

Header: boost/asio/buffer.hpp

Convenience header: boost/asio.hpp

Copies bytes from a source buffer to a target buffer.

std::size_t buffer_copy(
    const mutable_buffer & target,
    const const_buffer & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer.

std::size_t buffer_copy(
    const mutable_buffer & target,
    const const_buffers_1 & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer.

std::size_t buffer_copy(
    const mutable_buffer & target,
    const mutable_buffer & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer.

std::size_t buffer_copy(
    const mutable_buffer & target,
    const mutable_buffers_1 & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer sequence to a target buffer.

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffer & target,
    const ConstBufferSequence & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer.

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const const_buffer & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer.

std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const mutable_buffer & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer sequence to a target buffer.

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const ConstBufferSequence & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffer & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffers_1 & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffer & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffers_1 & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies bytes from a source buffer sequence to a target buffer sequence.

template<
    typename MutableBufferSequence,
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const ConstBufferSequence & source);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer sequence to a target buffer.

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffer & target,
    const ConstBufferSequence & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

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

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer sequence to a target buffer.

template<
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const mutable_buffers_1 & target,
    const ConstBufferSequence & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffer & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const const_buffers_1 & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffer & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer to a target buffer sequence.

template<
    typename MutableBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const mutable_buffers_1 & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

Copies a limited number of bytes from a source buffer sequence to a target buffer sequence.

template<
    typename MutableBufferSequence,
    typename ConstBufferSequence>
std::size_t buffer_copy(
    const MutableBufferSequence & target,
    const ConstBufferSequence & source,
    std::size_t max_bytes_to_copy);
Parameters

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.

Return Value

The number of bytes copied.

Remarks

The number of bytes copied is the lesser of:

  • buffer_size(target)
  • buffer_size(source)
  • max_bytes_to_copy

This function is implemented in terms of memcpy, and consequently it cannot be used to copy between overlapping memory regions.

The boost::asio::buffer_size function determines the total number of bytes in a buffer or buffer sequence.

std::size_t buffer_size(
    const mutable_buffer & b);
  » more...

std::size_t buffer_size(
    const mutable_buffers_1 & b);
  » more...

std::size_t buffer_size(
    const const_buffer & b);
  » more...

std::size_t buffer_size(
    const const_buffers_1 & b);
  » more...

template<
    typename BufferSequence>
std::size_t buffer_size(
    const BufferSequence & b);
  » more...
Requirements

Header: boost/asio/buffer.hpp

Convenience header: boost/asio.hpp

Get the number of bytes in a modifiable buffer.

std::size_t buffer_size(
    const mutable_buffer & b);

Get the number of bytes in a modifiable buffer.

std::size_t buffer_size(
    const mutable_buffers_1 & b);

Get the number of bytes in a non-modifiable buffer.

std::size_t buffer_size(
    const const_buffer & b);

Get the number of bytes in a non-modifiable buffer.

std::size_t buffer_size(
    const const_buffers_1 & b);

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.

Adds buffering to the read-related operations of a stream.

template<
    typename Stream>
class buffered_read_stream :
  noncopyable
Types

Name

Description

lowest_layer_type

The type of the lowest layer.

next_layer_type

The type of the next layer.

Member Functions

Name

Description

async_fill

Start an asynchronous fill.

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.

async_write_some

Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation.

buffered_read_stream

Construct, passing the specified argument to initialise the next layer.

close

Close the stream.

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.

get_io_service

Get the io_service associated with the object.

in_avail

Determine the amount of data that may be read without blocking.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

next_layer

Get a reference to the next layer.

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.

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.

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.

Data Members

Name

Description

default_buffer_size

The default buffer size.

The buffered_read_stream class template can be used to add buffering to the synchronous and asynchronous read operations of a stream.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/buffered_read_stream.hpp

Convenience header: boost/asio.hpp

Start an asynchronous fill.

template<
    typename ReadHandler>
void-or-deduced async_fill(
    ReadHandler handler);

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 MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_read_some(
    const MutableBufferSequence & buffers,
    ReadHandler handler);

Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_write_some(
    const ConstBufferSequence & buffers,
    WriteHandler handler);

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
explicit buffered_read_stream(
    Arg & a);
  » more...

template<
    typename Arg>
buffered_read_stream(
    Arg & a,
    std::size_t buffer_size);
  » more...

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
buffered_read_stream(
    Arg & a);

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
buffered_read_stream(
    Arg & a,
    std::size_t buffer_size);

Close the stream.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

Close the stream.

void close();

Close the stream.

boost::system::error_code close(
    boost::system::error_code & ec);

The default buffer size.

static const std::size_t default_buffer_size = implementation_defined;

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();
  » 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 fill(
    boost::system::error_code & ec);
  » more...

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

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

Get the io_service associated with the object.

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

Determine the amount of data that may be read without blocking.

std::size_t in_avail();
  » more...

std::size_t in_avail(
    boost::system::error_code & ec);
  » more...

Determine the amount of data that may be read without blocking.

std::size_t in_avail();

Determine the amount of data that may be read without blocking.

std::size_t in_avail(
    boost::system::error_code & ec);

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;

The type of the lowest layer.

typedef next_layer_type::lowest_layer_type lowest_layer_type;
Requirements

Header: boost/asio/buffered_read_stream.hpp

Convenience header: boost/asio.hpp

Get a reference to the next layer.

next_layer_type & next_layer();

The type of the next layer.

typedef remove_reference< Stream >::type next_layer_type;
Requirements

Header: boost/asio/buffered_read_stream.hpp

Convenience header: boost/asio.hpp

Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers);
  » more...

Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers);

Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);

Read some data from the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);
  » more...

Read some data from the stream. Returns the number of bytes read or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Read some data from the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);

Read some data from the stream. Returns the number of bytes read or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);

Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);
  » more...

Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);

Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers,
    boost::system::error_code & ec);

Adds buffering to the read- and write-related operations of a stream.

template<
    typename Stream>
class buffered_stream :
  noncopyable
Types

Name

Description

lowest_layer_type

The type of the lowest layer.

next_layer_type

The type of the next layer.

Member Functions

Name

Description

async_fill

Start an asynchronous fill.

async_flush

Start an asynchronous flush.

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.

async_write_some

Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation.

buffered_stream

Construct, passing the specified argument to initialise the next layer.

close

Close the stream.

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.

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.

get_io_service

Get the io_service associated with the object.

in_avail

Determine the amount of data that may be read without blocking.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

next_layer

Get a reference to the next layer.

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.

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.

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 buffered_stream class template can be used to add buffering to the synchronous and asynchronous read and write operations of a stream.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/buffered_stream.hpp

Convenience header: boost/asio.hpp

Start an asynchronous fill.

template<
    typename ReadHandler>
void-or-deduced async_fill(
    ReadHandler handler);

Start an asynchronous flush.

template<
    typename WriteHandler>
void-or-deduced async_flush(
    WriteHandler handler);

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 MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_read_some(
    const MutableBufferSequence & buffers,
    ReadHandler handler);

Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_write_some(
    const ConstBufferSequence & buffers,
    WriteHandler handler);

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
explicit buffered_stream(
    Arg & a);
  » more...

template<
    typename Arg>
explicit buffered_stream(
    Arg & a,
    std::size_t read_buffer_size,
    std::size_t write_buffer_size);
  » more...

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
buffered_stream(
    Arg & a);

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

Close the stream.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

Close the stream.

void close();

Close the stream.

boost::system::error_code close(
    boost::system::error_code & ec);

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();
  » 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 fill(
    boost::system::error_code & ec);
  » more...

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

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

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();
  » 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 flush(
    boost::system::error_code & ec);
  » 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. Throws an exception on failure.

std::size_t 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, or 0 if an error occurred.

std::size_t flush(
    boost::system::error_code & ec);

Get the io_service associated with the object.

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

Determine the amount of data that may be read without blocking.

std::size_t in_avail();
  » more...

std::size_t in_avail(
    boost::system::error_code & ec);
  » more...

Determine the amount of data that may be read without blocking.

std::size_t in_avail();

Determine the amount of data that may be read without blocking.

std::size_t in_avail(
    boost::system::error_code & ec);

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;

The type of the lowest layer.

typedef next_layer_type::lowest_layer_type lowest_layer_type;
Requirements

Header: boost/asio/buffered_stream.hpp

Convenience header: boost/asio.hpp

Get a reference to the next layer.

next_layer_type & next_layer();

The type of the next layer.

typedef remove_reference< Stream >::type next_layer_type;
Requirements

Header: boost/asio/buffered_stream.hpp

Convenience header: boost/asio.hpp

Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers);
  » more...

Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers);

Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);

Read some data from the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);
  » more...

Read some data from the stream. Returns the number of bytes read or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Read some data from the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);

Read some data from the stream. Returns the number of bytes read or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);

Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);
  » more...

Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Write the given data to the stream. Returns the number of bytes written. Throws an exception on failure.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers);

Write the given data to the stream. Returns the number of bytes written, or 0 if an error occurred.

template<
    typename ConstBufferSequence>
std::size_t write_some(
    const ConstBufferSequence & buffers,
    boost::system::error_code & ec);

Adds buffering to the write-related operations of a stream.

template<
    typename Stream>
class buffered_write_stream :
  noncopyable
Types

Name

Description

lowest_layer_type

The type of the lowest layer.

next_layer_type

The type of the next layer.

Member Functions

Name

Description

async_flush

Start an asynchronous flush.

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.

async_write_some

Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation.

buffered_write_stream

Construct, passing the specified argument to initialise the next layer.

close

Close the stream.

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.

get_io_service

Get the io_service associated with the object.

in_avail

Determine the amount of data that may be read without blocking.

lowest_layer

Get a reference to the lowest layer.

Get a const reference to the lowest layer.

next_layer

Get a reference to the next layer.

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.

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.

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.

Data Members

Name

Description

default_buffer_size

The default buffer size.

The buffered_write_stream class template can be used to add buffering to the synchronous and asynchronous write operations of a stream.

Thread Safety

Distinct objects: Safe.

Shared objects: Unsafe.

Requirements

Header: boost/asio/buffered_write_stream.hpp

Convenience header: boost/asio.hpp

Start an asynchronous flush.

template<
    typename WriteHandler>
void-or-deduced async_flush(
    WriteHandler handler);

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 MutableBufferSequence,
    typename ReadHandler>
void-or-deduced async_read_some(
    const MutableBufferSequence & buffers,
    ReadHandler handler);

Start an asynchronous write. The data being written must be valid for the lifetime of the asynchronous operation.

template<
    typename ConstBufferSequence,
    typename WriteHandler>
void-or-deduced async_write_some(
    const ConstBufferSequence & buffers,
    WriteHandler handler);

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
explicit buffered_write_stream(
    Arg & a);
  » more...

template<
    typename Arg>
buffered_write_stream(
    Arg & a,
    std::size_t buffer_size);
  » more...

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
buffered_write_stream(
    Arg & a);

Construct, passing the specified argument to initialise the next layer.

template<
    typename Arg>
buffered_write_stream(
    Arg & a,
    std::size_t buffer_size);

Close the stream.

void close();
  » more...

boost::system::error_code close(
    boost::system::error_code & ec);
  » more...

Close the stream.

void close();

Close the stream.

boost::system::error_code close(
    boost::system::error_code & ec);

The default buffer size.

static const std::size_t default_buffer_size = implementation_defined;

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();
  » 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 flush(
    boost::system::error_code & ec);
  » 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. Throws an exception on failure.

std::size_t 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, or 0 if an error occurred.

std::size_t flush(
    boost::system::error_code & ec);

Get the io_service associated with the object.

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

Determine the amount of data that may be read without blocking.

std::size_t in_avail();
  » more...

std::size_t in_avail(
    boost::system::error_code & ec);
  » more...

Determine the amount of data that may be read without blocking.

std::size_t in_avail();

Determine the amount of data that may be read without blocking.

std::size_t in_avail(
    boost::system::error_code & ec);

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();
  » more...

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;
  » more...

Get a reference to the lowest layer.

lowest_layer_type & lowest_layer();

Get a const reference to the lowest layer.

const lowest_layer_type & lowest_layer() const;

The type of the lowest layer.

typedef next_layer_type::lowest_layer_type lowest_layer_type;
Requirements

Header: boost/asio/buffered_write_stream.hpp

Convenience header: boost/asio.hpp

Get a reference to the next layer.

next_layer_type & next_layer();

The type of the next layer.

typedef remove_reference< Stream >::type next_layer_type;
Requirements

Header: boost/asio/buffered_write_stream.hpp

Convenience header: boost/asio.hpp

Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers);
  » more...

Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Peek at the incoming data on the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers);

Peek at the incoming data on the stream. Returns the number of bytes read, or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t peek(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);

Read some data from the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);
  » more...

Read some data from the stream. Returns the number of bytes read or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);
  » more...

Read some data from the stream. Returns the number of bytes read. Throws an exception on failure.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers);

Read some data from the stream. Returns the number of bytes read or 0 if an error occurred.

template<
    typename MutableBufferSequence>
std::size_t read_some(
    const MutableBufferSequence & buffers,
    boost::system::error_code & ec);