boost tcp客户端有时无法检测到与服务器的断开连接

时间:2012-08-24 02:22:26

标签: boost tcp connection boost-asio detect

我正在使用boost::asio::tcp::socket连接到服务器,并致电 read_some()从服务器接收二进制数据,以下是代码:

len = sock->read_some(boost::asio::buffer(pBuf), error);

if (error == boost::asio::error::eof) {

    break;

}

else if (error) {

    break;

}

但是在服务器关闭套接字后,客户端仍然在read_some方法中被阻塞,无法检测到与服务器的断开连接并获取错误消息。为什么会出现这个问题?

1 个答案:

答案 0 :(得分:2)

这可能是因为您未能正确实现在TCP之上使用的协议,或者因为该协议中存在设计缺陷。如果协议说永远等待来自服务器的数据而不发送任何内容,那么故障就在协议中。如果协议说要超时读取或发送一些数据而你没有这样做,那么这个缺陷就在你的协议实现中。

TCP不保证未尝试发送任何数据的一方可以检测到连接丢失。使用TCP 的协议必须围绕此设计