我的服务器一直在等待客户端发送3个字节,这表明客户端接下来会做什么。在客户端请求完成的操作完成后,服务器再次从客户端等待3个字节。
我正在使用此代码从客户端接收3个字节。
char buf[3];
boost::system::error_code error;
size_t length = 0;
//Read 3 bytes from client
while( length < 3 )
{
length += socket.read_some(boost::asio::buffer(&buf[length], 3 - length), error);
if (error)
{
cout << length << endl; //prints 0
throw boost::system::system_error(error);
}
}
但是,在等待“read_some”函数时突然抛出EOF错误。
我读过EOF意味着客户端套接字已经关闭。我已经检查过,客户端套接字永远不会关闭。
我不知道这里发生了什么。任何帮助将不胜感激
编辑:如果我忽略错误,服务器工作正常。但我确信这不是处理这种情况的正确方法。
答案 0 :(得分:0)
Streams, Short Reads and Short Writes州的文档:
为什么EOF是错误
流的结尾可能导致阅读,
async_read
,read_until
或async_read_until
函数违反合同。例如。由于EOF,可以提前读取N个字节。 EOF错误可用于区分流的结束和大小为0的成功读取。