提升asio服务器以了解客户端何时关闭套接字

时间:2017-11-27 11:05:37

标签: c++ boost-asio

我有一个工作正常的客户端服务器应用程序。 客户端向服务器发送一些消息,然后关闭套接字(调用shutdown并关闭socket())

读取数据的代码的服务器端如下所示:

while (1)
{
    try
    {
        int headerBytesReceived = asio::read( *sock.get(), boost::asio::buffer(inbound_header_) );
        std::cout << "headerBytesReceived : " << headerBytesReceived << "\n" << std::flush;
        //.......
        //.......
    }
    catch (system::system_error &e)
    {
        std::cout << "Server Error occured! Error code = "
            << e.code() << ". Message: "
            << e.what() << "\n";
        break;
    }
}

服务器以无限循环的形式读取线程中的数据。 现在,当客户端关闭套接字时,我想要慷慨地离开循环。 现在,在客户端完成发送消息并关闭其套接字之后,将调用catch并显示以下错误:

发生服务器错误!错误代码= asio.misc:2。消息:读取:文件结束

有没有更好的方法可以让我知道连接已经关闭并且我需要打破循环?通过检查错误代码? 当然,我可以删除cout语句,但我想知道错误是什么。

0 个答案:

没有答案