-1

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

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 服务器,所以我知道客户端何时断开连接 - 任何读/写尝试都会导致异常。

4

1 回答 1

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.)
  }
}

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

于 2013-03-15T23:50:46.730 回答