我已经知道,不可能简单地检测套接字是否断开 - 服务器和客户端必须喊“你能听到我吗? ”和“是的,我能。 ”就像我们在Skype上所做的那样。
但是当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 服务器,所以我知道客户端何时断开连接 - 任何读/写尝试都会导致异常。