3

を使用してC#.Netソケットを構成しました

m_clientSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, Convert.ToInt32(True))

m_clientSocket.IOControl(IOControlCode.KeepAliveValues, SIO_KEEPALIVE_VALS, result)

私の設定では、30 秒ごとに送信し、最初の確認応答が受信されない場合は 10 秒ごとに送信します。

接続が確立されたときに、キープアライブとキープアライブ ack フラグがサーバーに送受信されるのを確認できます。

接続が切断されると、キープアライブが送信され、確認応答が受信されないことがわかります。送信されているキープ アライブの動作が、設定に合わせて変更されていることがわかります。つまり、30 秒ごとではなく、10 秒ごとに送信されています。

ブレークに応答できるように、何らかのイベントが発生することを期待していました (つまり、ソケットをシャットダウンしてから、ソケットのリサイクルを開始します)。

キープアライブが接続が切断されていることに気付いたという事実を理解する方法を誰か教えてもらえますか?

ありがとうアディ

4

1 に答える 1

1

ソケットは、接続状態(またはその他の問題)に関するイベントを発生させません。障害を検出するには、送信または受信操作を実行する必要があります。

ソケットを定期的にポーリングすると、失敗の兆候も得られるはずです。ここにその例があります: サーバーソケットからのクライアントの切断を即座に検出します

于 2011-06-22T18:14:11.933 に答える