BOOST中read_some和 boost::asio::error::eof错误

Posted 大侠不好当

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BOOST中read_some和 boost::asio::error::eof错误相关的知识,希望对你有一定的参考价值。

当socket读写完成调用回调函数时候一定要检查 是不是有EOF错误,如果有那么好了,另一方已经断开连接了别无选择,你也断开把。
 
for (;;) {
    boost::array < char, 128 > buf;
    boost::system::error_code error;
    size_t len = socket.read_some(boost::asio::buffer(buf), boost::asio::assign_error(error));
    //当服务器关闭连接时,boost::asio::ip::tcp::socket::read_some()会用boost::asio::error::eof标志完成, 这时我们应该退出读取循环了. 
    if (error == boost::asio::error::eof)
      break;
    // Connection closed cleanly by peer.
    else if (error)
      throw error;
    // Some other error.
    std::cout.write(buf.data(), len);
}
//如果发生了什么异常我们同样会抛出它 

  

 原文 http://blog.chinaunix.net/uid-22273897-id-393662.html

以上是关于BOOST中read_some和 boost::asio::error::eof错误的主要内容,如果未能解决你的问题,请参考以下文章

boost read_some函数疑惑

传递给 boost::asio::async_read_some 的回调从未在 boost::asio::read_some 返回数据的使用中调用

概念理解:boost::asio::定时器2

为啥这个简单的 Boost::asio 程序不能按预期工作?

boost async 读/写失败,“系统资源不足,无法完成请求的服务”

boost 多线程异步处理例子