使用async_read和asio :: transfer_exactly(非Boost Asio)

时间:2016-01-14 23:56:33

标签: c++ boost boost-asio

我以异步方式使用非Boost Asio。我通过网络以类似这样的格式发送数据:

  • 包装尺寸:uint64
  • body package:uchar *(包大小)

因此,当我想首先收到包时,我会使用 asio :: transfer_exactly 帮助器等待包大小:

asio::async_read(socket, buffer, asio::transfer_exactly(sizeof(uint64_t)), handler);

处理程序签名如下所示:

void handler(const asio::error_code& error, std::size_t bytes_transferred);

但有时这个处理程序正在执行 bytes_transferred = 0 错误不包含任何错误)而 buffer 不包含必需数据(包的大小)。之后,进一步的传输挂起。

套接字没有其他读取操作,因此 async_read 正在调用独占。

这种行为可能是什么原因?

0 个答案:

没有答案