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 synchronous and asynchronous operations that may be used to wait for a socket to become ready to read, ready to write, or to have a pending error condition.
As an example, to perform a non-blocking read something like the following may be used:
ip::tcp::socket socket(my_io_context); ... socket.non_blocking(true); ... socket.async_wait(ip::tcp::socket::wait_read, 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.
basic_socket::wait(), basic_socket::async_wait(), basic_socket::non_blocking(), basic_socket::native_non_blocking(), nonblocking example.