gpt4 book ai didi

c++ - Boost asio async_read_until 在匹配条件下停止阅读

转载 作者:可可西里 更新时间:2023-11-01 02:50:29 26 4
gpt4 key购买 nike

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

最佳答案

Q. Is there any way to work around this

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

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

Q. and stop the buffer from consuming bytes from the socket right after the sequence condition was matched?

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

boost::asio::streambuf sb;
auto bytes = boost::asio::read_until(socket, sb, "\r\n\r\n");

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,它将为您管理“流位置”。

关于c++ - Boost asio async_read_until 在匹配条件下停止阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46846949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com