2013-05-06 61 views
1

我使用boost::asio::ip::tcp::iostream從TCP流中讀取二進制數據。我做這樣的:如何知道boost :: asio :: ip :: tcp :: iostream沒有可用的數據?

stream.read(reinterpret_cast<char*>(&packetSize), 4); // first 4 bytes is length 
stream.read(buffer, packetSize); 

我應該檢查stream.gcount()和未來stream.gcount() == 0時,這意味着,讀取數據沒有更多的可用(TCP會話結束)?

+0

如果您已獲得所有您期望的數據或發生錯誤,則會話結束。 – 2013-05-06 13:32:59

回答

0

您正在尋找被深埋在基類http://en.cppreference.com/w/cpp/io/basic_ios

使用良好的流成員()和!EOF(),看看您是否獲得了數據。您可以在流對象(exception())上設置標誌以指示流在發生錯誤時引發異常。這使得處理更容易一些。

相關問題