8

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

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

4

2 回答 2

8

您正在寻找反应堆式操作。这些可以通过提供boost::asio::null_buffers给异步操作来获得。Reactor 样式的操作可用于与第三方库集成、使用共享内存池等。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 还提供了一个官方的非阻塞示例,说明了如何与想要直接在套接字上执行读写操作的库集成。

于 2013-06-28T12:38:36.747 回答
0

采用socket.async_wait(asio::ip::tcp::socket::wait_read, wait_handler);

于 2021-03-02T14:55:22.860 回答