Whi*_*ash 6 c++ boost boost-asio
我以异步方式使用非 Boost Asio。我通过网络发送数据包,其格式如下:
因此,当我想首先接收包裹时,我使用asio::transfer_exactly助手等待包裹大小:
asio::async_read(socket, buffer, asio::transfer_exactly(sizeof(uint64_t)), handler);
Run Code Online (Sandbox Code Playgroud)
处理程序签名如下所示:
void handler(const asio::error_code& error, std::size_t bytes_transferred);
Run Code Online (Sandbox Code Playgroud)
但有时此处理程序以bytes_transferred = 0执行(错误不包含任何错误)并且缓冲区不包含必要的数据(包的大小)。之后,进一步的传输挂起。
套接字中没有其他读取操作,因此async_read正在调用独占。
这种行为的原因是什么?