1
我有一个关于使用boost asio的async_read_until的常见问题。该文档说,当处理程序被调用时,缓冲区内可能有更多的数据。有没有什么办法可以解决这个问题,并在序列条件匹配后立即停止缓冲区从套接字中消耗字节?在匹配条件下提升asio async_read_until停止阅读
我有一个关于使用boost asio的async_read_until的常见问题。该文档说,当处理程序被调用时,缓冲区内可能有更多的数据。有没有什么办法可以解决这个问题,并在序列条件匹配后立即停止缓冲区从套接字中消耗字节?在匹配条件下提升asio async_read_until停止阅读
不能直接问:有什么办法可以解决此
,因为这样的网络流量工程(它的面向分组)。
当然,如果发送方主动确保它的话,你可以在协议边界上获得东西,但这对流协议来说是不常见的。
Q.和停止从序列状态被匹配后消耗来自插座右字节缓冲器?
不,但您可以停止使用缓冲区。所以,例如这是一个有效的模式:
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
读取和将要管理的“流位置”为您服务。