1

java.net.Socketプロセスとリモートの2つのピア(Windowsプロセス)間の接続のエンドポイントであるのインスタンスがあるとします。リモートプロセスが終了し、接続を閉じました。今、私は自分のソケットをしようwriteとしています。close

writeandclose呼び出し(またはそれらの1つ)が失敗し、例外が発生することを期待します( SIGPIPEUnixソケットAPIのシグナルのように)が、成功します。

java.net.Socketこの場合の予想される動作は何ですか?UnixソケットAPIの動作とは異なりますか?WindowsとLinuxで同じように機能しますか?

4

1 に答える 1

1

OS は、相手側が接続を閉じたことを必ずしも認識していないため、状況はパイプとは少し異なります。したがって...理論的には...ソケットへの多数の書き込みが機能しているように見える可能性があります。ただし、リモート マシンがまだネットワーク上にある場合、ライターは最終的に例外を受け取るはずです。ソケットflushまたはにスローされる可能性が高いcloseです。

FWIW、の動作はjava.net.Socket、OSのプロトコルスタックの動作方法によって大きく左右されます。

于 2012-06-21T13:47:27.207 に答える