0

C++ CSocket を使用してクライアント サーバー アプリケーションを作成しました。クライアントをサーバーに接続し、その後、通常の X ボタンでクライアントを閉じるか、 taskmanager でタスクを終了すると、サーバー CSocket が OnClose イベントを受け取ります。問題は、クライアントが実行されている Windows でインターネット接続を無効にすると、サーバー CSocket が OnClose イベントも OnReceive イベントも受信しないことです。

何が起こっているのか知っている人はいますか?

更新: テストしたところ、クライアントも OnClose を受信して​​いないことがわかりました! クライアントが実行されているウィンドウでインターネット接続を無効にしました!

4

1 に答える 1

1

クライアント側は、FIN または RST を介してサーバーへの接続を閉じることができずにシャットダウンされます。サーバーがクライアントが停止していることを検出するには、送信するデータがあるか (これは失敗します)、定期的な TCP キープアライブ プローブを送信する必要があります。 TCP_KEEPALIVEソケットオプションとして設定できます。

于 2009-12-15T16:37:53.133 に答える