2011-07-03 8 views
0

SocketChannel.writeは、基になる接続がCLOSE-WAITの状態のときに例外をスローしないことに気付きました。それは期待される行動ですか?もしそうなら、どうすれば接続がESTABLISHEDではないとわかるでしょうか?CLOSE-WAITでSocketChannelに書き込む

答えて

2

最初に例外をスローするべきではありません。接続はまだ書き込み可能である可能性があります。 CLOSE_WAITは、着信FINが受信されたことを意味します。すべての意味は、もう一方の端が終了したことです。それはまだ読んでいるかもしれません:出力のために接続をシャットダウンするだけかもしれません。したがって、TCPはデータを書き込む必要があります。ピアが接続全体を閉じた場合、書き込みの受信時にRSTを発行します。これは、後続の書き込みで接続リセットとして発生します。

アプリケーションプロトコルは、ピアによって閉じられた接続への書き込みが不可能であるか、エラーが表示される前に複数の書き込みが行われるようにする必要があります。 TCPは、おそらく最初の書き込みでエラーを出すことはできません。