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