2011-07-11 8 views
1

初めてSocket.Send(byte []データ)を使用すると、リモートホストが接続を長時間閉じても例外をスローしません時間前。 2回目のデータの送信時に例外がスローされます。ソケット送信メソッドは、リモートホストが接続を閉じたときに例外をスローしません

私はチェックして、正しいバイト数を返します。私はまた、out SocketErrorパラメータを取るオーバーロードを使用しました。これには、呼び出し後にSocketError.Successが含まれます。

なぜソケットは最初の呼び出しで例外をスローしませんが、2番目の呼び出しでは例外をスローしません。

答えて

1

データがのローカルTCP/IPスタックに送信されると、「送信」操作は完了したとみなされます。データがリモート側に到着したことを保証するものではありません。

+0

ああ、ほとんどの通信局には何らかの種類のACKが組み込まれているのはなぜですか?しかし、私は、TCP/IPに何らかの仕掛けメカニズムを組み込んでいることも思い出しています。 – uriDium

+0

TCP/IPにはパケットレベルのackがあり、メッセージレベルのackはありません。 TCP/IPの設計では、頻繁にポーリングまたはハートビートメッセージを送信する必要があります。より完全な説明については、[私のブログ](http://nitoprograms.blogspot.com/2009/05/detection-of-half-open-dropped.html)を参照してください。 –

+0

かなり前に、私はTCP/IPスタックを研究してくれました。 :) – uriDium

関連する問題