我已经知道,无法简单地检测套接字是否断开连接 - 服务器和客户端必须喊“<em>你能听见我吗?”和“是的我可以。“就像我们在skype上所做的那样
但是当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服务器,所以我知道客户端何时断开连接 - 任何读/写尝试都会导致异常。
答案 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。在最坏的情况下,您可以从调试器推断出异常类型:)