反应器类型的操作
有的时候程序必须依赖第三方库来完成I/O操作,鉴于这种情况,Boost::Asio提供了一个null_buffers 类型可以同时完成读和写操作,null_buffers 直到执行I/O操作的对象就绪才返回。
下面是一个执行非阻塞的读操作的例子
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));
}
}
这些操作支持任意平台上的socket。