簡體   English   中英

Boost asio async_read_until 在匹配條件下停止讀取

[英]Boost asio async_read_until stop reading on matched condition

我有一個關於使用 boost asio 的 async_read_until 的一般問題。 文檔說在調用處理程序時緩沖區內可能有更多數據。 有沒有辦法解決這個問題,並在序列條件匹配后立即停止緩沖區從套接字中消耗字節?

:有什么辦法可以解決這個問題

不是直接的,因為網絡流量的工作方式(它是面向數據包的)。

當然,如果發送方積極確保它,您可能會在協議邊界上得到一些東西,但這對於流協議來說是不尋常的。

問:並在序列條件匹配后立即停止緩沖區從套接字消耗字節?

不,但您可以停止使用緩沖區。 所以,例如這是一個有效的模式:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM