asio C++ library

PrevUpHomeNext

Reactor-Style Operations

Sometimes a program must be integrated with a third-party library that wants to perform the I/O operations itself. To facilitate this, Asio includes a null_buffers type that can be used with both read and write operations. A null_buffers operation doesn't return until the I/O object is "ready" to perform the operation.

As an example, to perform a non-blocking read something like the following may be used:

ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
socket.async_read_some(null_buffers(), read_handler);
...
void read_handler(asio::error_code ec)
{
  if (!ec)
  {
    std::vector<char> buf(socket.available());
    socket.read_some(buffer(buf));
  }
}

These operations are supported for sockets on all platforms, and for the POSIX stream-oriented descriptor classes.

See Also

null_buffers, basic_socket::non_blocking(), basic_socket::native_non_blocking(), nonblocking example.


PrevUpHomeNext