我以异步方式使用非Boost Asio。我通过网络以类似这样的格式发送数据:
因此,当我想首先收到包时,我会使用 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 正在调用独占。
这种行为可能是什么原因?