0
我想我的问题对你来说很容易,但我找不到明确的解释我的问题。我必须确定我对C++很陌生。在没有连接的套接字中写入时没有错误
我想创建一个非常简单的TCP客户端,使用boost :: asio套接字。我实际上有一些与同步调用工作。但在某些时候,我停止与我的服务器连接(通过关闭我的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());
}
}
所以我的问题是:
- 是否有关于如何检测,我错过了vaste万维网上书写错误的任何简单的解释?
- 我是否使用boost :: asio的正确函数?
PS:如何提高我的实现任何评论是非常欢迎!
数据进入TCP IP发送窗口,直到端口正式关闭或您填满窗口后才会听到投诉。与此同时,TCP正在愉快地尝试发送该数据,并将继续尝试,直到地狱冻结。众所周知,网络中断是暂时的,下一次尝试数据将被发送。 – user4581301
有什么办法让地狱冻结真的很快呢? –
不是。 TCP被设计为发送数据或死亡尝试。你可能不得不建立一个保持活力的方案来检测你是否有连接。 – user4581301