异步等待直到套接字可用于在Asio中读/写

时间:2013-06-28 12:02:06

标签: c++ boost boost-asio

我想用Boost Asio做以下事情。我有一个套接字,我希望在数据可用于读取/写入套接字时注册要调用的回调,但我不希望它实际上进行读/写。基本上,我需要的是async_read_some / async_write_some,除了实际的阅读和写作没有完成。

我需要这个,因为我正在使用一个带有自己的读写函数的外部库,它需要一个套接字描述符作为输入参数,我想以异步方式使用这个库。

2 个答案:

答案 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);