怎么知道boost :: asio :: ip :: tcp :: iostream上没有数据可用?

时间:2013-05-06 11:51:12

标签: c++ boost boost-asio iostream

我正在使用boost::asio::ip::tcp::iostream从TCP流中读取二进制数据。我这样做:

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

我应该只检查stream.gcount()和下一个stream.gcount() == 0,这意味着没有更多可用于阅读的数据(TCP会话已完成)?

1 个答案:

答案 0 :(得分:0)

您正在寻找的流成员深深埋藏在基类http://en.cppreference.com/w/cpp/io/basic_ios

使用good()和!eof()来查看是否有数据。您可以在流对象(exception())上设置标志,以指示流在发生错误的情况下抛出异常。这使处理更容易一些。