...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Sometimes a program must be integrated with a third-party library that
wants to perform the I/O operations itself. To facilitate this, Boost.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); ... ip::tcp::socket::non_blocking nb(true); socket.io_control(nb); ... socket.async_read_some(null_buffers(), read_handler); ... void read_handler(boost::system::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.