我想用 Boost Asio 执行以下操作。我有一个套接字,我想注册一个回调,当数据可用于在套接字上读取/写入时调用,但我不希望它实际执行读取/写入操作。基本上,我需要的类似于async_read_some
/async_write_some
,除了实际的读写没有完成。
我需要这个,因为我正在使用一个具有自己的读写函数的外部库,该函数需要套接字描述符作为输入参数,并且我想以异步方式使用这个库。
您正在寻找反应堆式操作。这些可以通过提供来获得boost::asio::null_buffers到异步操作。反应堆式操作对于与第三方库集成、使用共享内存池等非常有用。Boost.Asio文档提供了一些信息和以下示例代码:
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官方还提供了非阻塞示例,说明如何与想要直接在套接字上执行读写操作的库集成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)