あなたは、クライアント側のネットワーク接続を無効にするとするCSocketは、OnCloseのかOnReceiveを受信しません
-
19-09-2019 - |
質問
私はC ++のCSocketと、クライアント・サーバ・アプリケーションを作成しました。タスクマネージャでそれを私はクライアントをサーバーに接続し、その後、私は、通常のXボタンまたは終了タスクとクライアントを閉じると、サーバーのCSocketは、OnCloseのイベントを受け取ります。問題は、私は、クライアントが実行されているWindows上でのインターネット接続を無効にすると、サーバのCSocketは、OnCloseのもOnReceiveイベントを受信しないで!
は、誰もが、おそらく何が起こっているのか知っていますか?
アップデート:私はちょうどテストし、クライアントがあまりにもOnCloseのを受け取るなかったことを見てきました!私は、クライアントが実行されているWindows上でのインターネット接続を無効に!
解決
クライアント側は、FINまたはRSTを介してサーバへの接続を閉じることができずにシャットダウンです。サーバは、クライアントが死んでいることを検出するために、それは、送信するデータを持っている必要がありますいずれか(失敗した)または定期的なTCPキープアライブプローブを送信する必要があります。 TCP_KEEPALIVE
は、ソケットオプションとして設定することができます。
所属していません StackOverflow