从disconected socket读取时出现未处理的异常

时间:2013-03-15 23:44:24

标签: c++ sockets boost boost-asio unhandled-exception

我已经知道,无法简单地检测套接字是否断开连接 - 服务器和客户端必须喊“<​​em>你能听见我吗?”和“是的我可以。“就像我们在上所做的那样 但是当boost::asio套接字从另一边断开时,我尝试从套接字读取时获得 Unhanded exception 。这种断路检测对我来说足够有用。我可以处理该异常,因此程序将在控制台中生成消息而不是崩溃吗? 一些代码适合那些需要它的人:

bool SocketClient::read(int bytes, char *text) {
      char buffer = 0;
      int length = 0;
      while(bytes>0) {
        size_t len = sock.receive(boost::asio::buffer(&buffer, 1));  //boom: UNHANDLED EXCEPTION
        bytes--;
        text[length] = buffer;
        length++;

      }
      return true;
}

因为我正在连接到minecraft服务器,所以我知道客户端何时断开连接 - 任何读/写尝试都会导致异常。

1 个答案:

答案 0 :(得分:3)

try
{
    size_t len = sock.receive(boost::asio::buffer(&buffer, 1));  //boom: UNHANDLED EXCEPTION
    // More code ...
}
catch (const boost::system::system_error& ex)
{
  if ( ex.code() == boost::asio::error::eof ) 
  {
    // Work your magic (console logging, retry , bailout etc.)
  }
}

请同时查看doc。在最坏的情况下,您可以从调试器推断出异常类型:)