我正在使用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方法中被阻塞,无法检测到与服务器的断开连接并获取错误消息。为什么会出现这个问题?
答案 0 :(得分:2)
这可能是因为您未能正确实现在TCP之上使用的协议,或者因为该协议中存在设计缺陷。如果协议说永远等待来自服务器的数据而不发送任何内容,那么故障就在协议中。如果协议说要超时读取或发送一些数据而你没有这样做,那么这个缺陷就在你的协议实现中。
TCP不保证未尝试发送任何数据的一方可以检测到连接丢失。使用TCP 的协议必须围绕此设计。