提升 asio async_read_until在匹配条件下停止读取

Boost asio async_read_until stop reading on matched condition

本文关键字:条件下 读取 asio async read until 提升      更新时间:2023-10-16

我有一个关于使用boost asio async_read_until的一般问题。文档说,调用处理程序时,缓冲区内可能有更多数据。有没有办法解决这个问题,并在匹配序列条件后立即阻止缓冲区消耗套接字中的字节?

问:有什么方法可以解决这个问题吗

不是直接的,因为网络流量的工作方式(它是面向数据包的)。

当然,如果发送方主动确保,您可能会在协议边界上得到一些东西,但这对于流协议来说是不寻常的。

Q. 并在匹配序列条件后立即停止缓冲区消耗套接字中的字节?

否,但您可以停止使用缓冲区。因此,例如,这是一个有效的模式:

boost::asio::streambuf sb;
auto bytes = boost::asio::read_until(socket, sb, "rnrn");
std::istream is(&sb);
std::string line;
while (getline(is, line) && !line.empty())    {
     std::cout << "Received: '" << line << "'n";
}
// sb still contains un-consumed data, if any

只需使用相同的streambuf进行任何后续读取,它就会为您管理"流位置"。