Boost read_some函数抛出eof异常

时间:2014-03-15 15:55:33

标签: c++ sockets boost

我的服务器一直在等待客户端发送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意味着客户端套接字已经关闭。我已经检查过,客户端套接字永远不会关闭。

我不知道这里发生了什么。任何帮助将不胜感激

编辑:如果我忽略错误,服务器工作正常。但我确信这不是处理这种情况的正确方法。

1 个答案:

答案 0 :(得分:0)

Streams, Short Reads and Short Writes州的文档:

  

为什么EOF是错误

     

流的结尾可能导致阅读,async_readread_untilasync_read_until函数违反合同。例如。由于EOF,可以提前读取N个字节。   EOF错误可用于区分流的结束和大小为0的成功读取。