boost :: asio :: read_until不可靠

时间:2016-06-23 13:59:04

标签: c++ sockets boost

我正在尝试使用 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堆栈等)。 或者升压插座有限制吗?

感谢您的评论。

0 个答案:

没有答案