我想用Boost Asio做以下事情。我有一个套接字,我希望在数据可用于读取/写入套接字时注册要调用的回调,但我不希望它实际上进行读/写。基本上,我需要的是async_read_some
/ async_write_some
,除了实际的阅读和写作没有完成。
我需要这个,因为我正在使用一个带有自己的读写函数的外部库,它需要一个套接字描述符作为输入参数,我想以异步方式使用这个库。
答案 0 :(得分:8)
您正在寻找反应堆式的操作。这些可以通过向异步操作提供boost::asio::null_buffers
来获得。使用共享内存池等,Reactor样式的操作可用于与第三方库集成.Boost.Asio documentation提供了一些信息和以下示例代码:
ip::tcp::socket socket(my_io_service);
...
socket.non_blocking(true);
...
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));
}
}
Boost.Asio还提供了一个官方nonblocking example,说明了如何与想要直接在套接字上执行读写操作的库集成。
答案 1 :(得分:0)
使用socket.async_wait(asio::ip::tcp::socket::wait_read, wait_handler);