我想我的问题对你们来说很容易,但是我找不到对我的问题的明确解释。我必须确切地说我对c ++很新。
我正在尝试使用boost :: asio socket创建一个非常简单的TCP客户端。我实际上有同步调用的东西。但在某些时候,我停止与我的服务器的连接(通过关闭我的wifi),套接字继续写,没有任何错误。
由于TCP协议应该发送ACK消息,我相信写连接将检测到连接丢失。
我读了很多关于keep_alive的内容,关于每个类似问题的本机套接字和异步写入,但似乎没有回答我的具体问题。
这是我的代码的一部分,我尝试编写并检测丢失的连接。不确定会有所帮助..
try {
boost::system::error_code error;
boost::asio::write(socket_, boost::asio::buffer(message), error);
}
catch (std::exception& e)
{
ReportError(e.what());try {
boost::system::error_code error;
boost::asio::write(socket_, boost::asio::buffer(message), error);
if (error) {
is_server_up = false;
}
}
catch (std::exception& e)
{
ReportError(e.what());
}
}
所以我的问题是:
PS:非常欢迎任何关于如何改进我的实施的评论!
答案 0 :(得分:1)
由于TCP协议应该发送ACK消息,我相信写连接将检测到连接丢失。
是的,它会的。但是write
并不等待确认,这会使应用程序变得不必要地变慢。稍后将发现连接丢失,最终读取和写入将失败并出现错误。
如果在连接丢失后至少执行了一次成功的写操作,则该写操作最终会失败。发生故障后尝试的每次读取或写入操作都将报告错误。