C++ 异步等待,直到套接字可用于Asio中的读/写

C++ 异步等待,直到套接字可用于Asio中的读/写,c++,boost,boost-asio,C++,Boost,Boost Asio,我想用Boost Asio执行以下操作。我有一个套接字,我想注册一个回调,当数据可以在套接字上读/写时调用,但我不想让它实际执行读/写操作。基本上,我需要的类似于async\u read\u some/async\u write\u some,只是实际的读写没有完成 我之所以需要它,是因为我正在使用一个具有自己的读写函数的外部库,该函数需要一个套接字描述符作为输入参数,并且我希望以异步方式使用该库。您正在寻找反应器式操作。这些可以通过提供给异步操作来获得。Reactor风格的操作对于与第三方库集

我想用Boost Asio执行以下操作。我有一个套接字,我想注册一个回调,当数据可以在套接字上读/写时调用,但我不想让它实际执行读/写操作。基本上,我需要的类似于
async\u read\u some
/
async\u write\u some
,只是实际的读写没有完成


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

您正在寻找反应器式操作。这些可以通过提供给异步操作来获得。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));
  }
}
ip::tcp::socket套接字(我的io服务);
...
插座。非阻塞(真);
...
socket.async\u read\u some(null\u buffers(),read\u handler);
...
无效读取处理程序(boost::system::error\u code ec)
{
如果(!ec)
{
std::vector buf(socket.available());
socket.read_some(buffer(buf));
}
}

Asio还提供了一个官方版本,说明了如何与希望直接在套接字上执行读写操作的库集成。

使用
socket.async\u wait(Asio::ip::tcp::socket::wait\u read,wait\u handler)

是否希望使用异步连接、异步写入、异步读取的代码?仅异步读取和异步写入。我可以自己连接,因为库使用来自已建立连接的套接字,所以我可以自己使用异步连接。
null\u缓冲区自Boost 1.66.0以来一直被弃用: