ホスト A に Apache HTTPClient (4.2.5) を使用してホスト B のサーバーにメッセージを POST するクライアントがあります。ファッション:
client = new DefaultHttpClient();
params = client.getParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 20000);
すべてではなく一部のデータ ストリームが送信された後、クライアントの送信が突然終了した場合 (ホスト B 上のターゲット サーバーのクラッシュなど) のタイムアウト動作をテストしようとしています。したがって、私のテスト方法は次のとおりです。
- ホスト A のクライアント アプリケーションから HTTP POST を開始します。
- クライアントが基礎となる Apache HTTPClient フレームワークを呼び出したことをログが示した直後に、ホスト B でファイアウォール ルールを有効にして、ホスト A からのトラフィックをブロックします。
テストが実際に要求データを途中で切断していることを (パケット キャプチャを介して) 確認できます。
読み取りタイムアウト間隔 (20 秒) の後にクライアント アプリケーションがタイムアウトすることを期待していましたが、代わりに、クライアントが最終的に遭遇する前にはるかに長い間隔 (500 ~ 600 秒の範囲) でハングすることがわかります。接続タイムアウト。
クライアントがタイムアウトとして指定したものを無視している理由について、誰かが説明できますか (または、失敗した場合は、推測してください)。この場合、タイムアウトを強制する方法はありますか?