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
讀取和將要管理的「流位置」爲您服務。