Reactor反应器
有的程序想要使用第三方库,然后又想自己实现IO操作。为了满足这种需求,Aiso有一个无缓冲对象的类型以供读写操作。无缓冲对象的操作不会等到I/O对象“准备好了”才开始。
这里有个例子,展示了无阻塞的读取操作:
ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
socket.async_read_some(null_buffers(),read_handler);
...
void read_handler(asio::error_code ec)
{
if(!ec)
{
std::vector<char> buf(socket.available);
socket.read_some(buffer(buf));
}
}
这些操作对所有平台的socket都适用,对于满足POSIX标记的流式对象也适用。
参见
null_buffers, basic_socket::non_blocking(), basic_socket::native_non_blocking(), nonblocking example.