public static void main(String args[]){
byte[] message = ...
Socket socket = ...
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
dOut.write(message); //#1
dOut.close();
socket.close();
}
行 #1 がデータをバッファに入れ、リモート マシンにフラッシュするのを待っていると仮定しましょう。その後、ストリームとソケットは閉じられます。
送信プロセスでネットワークに何らかの未知の問題が発生したと想定し、OS は TCP 再送信タイムアウトまでバッファにあったパケットを再送信します。
Javaプログラムでこの例外をどのようにキャッチできるのでしょうか? 上記のコードは既にデータをバッファに送信しており、おそらくストリームとソケットを閉じている (そしておそらく Java 本体を終了している) ため、他のすべてのジョブ (TCP 関連、再送信) をオペレーティング システムに任せています。
私の質問は、Java プログラムが終了しても、TCP の再送信 (パケットが失われたと仮定します) は継続するのでしょうか? 再送信タイムアウト エラーをキャッチする最良の方法は何ですか?