我有一个工作正常的客户端服务器应用程序。 客户端向服务器发送一些消息,然后关闭套接字(调用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语句,但我想知道错误是什么。