サーバーへのソケットの接続タイムアウトを手動で処理しようとしています。サーバーが 1 秒以内に応答しない場合は、それを知りたいので、その直後にさらに 3 回試行します。
私のコードが基づいている主な行は次のとおりです。
// tcpSocket was previously declared, instantiate it
tcpSocket = new Socket();
try {
// try to connect with a 1-second timeout
tcpSocket.connect(new InetSocketAddress(mRemoteAddr, mRemotePort), 1000);
} catch (SocketTimeoutException ex) {
// retry here... omissis
}
最初の接続 (たとえば、ローカル ポートからX
) が 1000 ミリ秒以内に受け入れられない場合、 を取得しSocketTimeoutException
、次の接続が成功します (新しいローカル ポートで、たとえばY
)。
しかし、Wireshark で TCP パッケージを読み取ると、3-6-9 秒後にX
接続が自動的に再試行され、新しいSYN
パッケージが送信されることがわかります。tcpSocket.close()
のcatch
ブロックにa を入れようとさえしましたSocketTimeoutException
が、接続が確立されていない場合は閉じることができません (呼び出しclose
ても何も起こりません)。
connect
私が理解していることから、私が見ている間違った動作 (つまり、接続の自動再試行) は、メソッドでタイムアウトを指定しない場合にのみ正しいものです。
これはバグですか、それとも私が間違っていることはありますか?