我正在尝试使用 boost :: asio :: read_until 来实现客户端/服务器。 read_until非常适合我的消息传递。
但是,当我在各种情况下测试客户端和服务器时,我发现了 read_until在高流量检测到分隔符之前返回。
在循环中发送160000个字节时,read_until迟早会返回较少 传输的字节数。
如果发生这种情况,例如,在循环中发送大小为16384字节或更少。
我的实施非常简单。
// sender:
std::size_t bytes_out=boost::asio::write(socket(), boost::asio::buffer(msg, len),
boost::asio::transfer_all(), ignored_error);
assert(bytes_out==160000);
// receiver:
boost::asio::streambuf b;
std::size_t bytes_transferred = boost::asio::read_until(socket(), b,
delim);
assert(bytes_transferred ==160000);
在发送端,我断言发送的字节数= 160000。我没有一个断言。但是,在接收方,read_until迟早会返回更少的字节 比发了。
delim为0,我确保消息中没有包含0(例如 发送160000'a')。
这一切都在windows vm上测试过。
我不是专家,也许在某个地方有一个限制(tcp堆栈等)。 或者升压插座有限制吗?
感谢您的评论。