blob: 468645ad4c001153f711f90f6c8bacd236a72e14 [file] [log] [blame]
[/
/ Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
/
/ Distributed under the Boost Software License, Version 1.0. (See accompanying
/ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
/]
[section:reactor 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
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.
[heading See Also]
[link asio.reference.basic_socket.wait basic_socket::wait()],
[link asio.reference.basic_socket.async_wait basic_socket::async_wait()],
[link asio.reference.basic_socket.non_blocking basic_socket::non_blocking()],
[link asio.reference.basic_socket.native_non_blocking basic_socket::native_non_blocking()],
[link asio.examples.cpp03_examples.nonblocking nonblocking example].
[endsect]