| [/ |
| / 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] |