151

使用しているライブラリに問題があります。それはライブラリかもしれませんし、私の使い方が間違っているかもしれません!

基本的に、これを行うと(ミリ秒単位のタイムアウト)

_ignitedHttp.setConnectionTimeout(1);  // v short
_ignitedHttp.setSocketTimeout(60000);  // 60 seconds

タイムアウト例外は生成されず、正常に動作しますが、次のようにすると、

_ignitedHttp.setConnectionTimeout(60000);  // 60 seconds
_ignitedHttp.setSocketTimeout(1);          // v short

ソケット例外が発生します。

それで、私の質問は、接続例外をシミュレートできないのはなぜですか? ソケットと接続タイムアウトの違いを誤解していますか? ライブラリはここにあります(まだ正式にリリースされていません)。

4

2 に答える 2

260

接続タイムアウトは、TCP接続の開始時にのみ発生します。これは通常、リモートマシンが応答しない場合に発生します。これは、サーバーがシャットダウンされたか、間違ったIP / DNS名を使用したか、間違ったポートを使用したか、サーバーへのネットワーク接続がダウンしていることを意味します。

ソケットタイムアウトは、継続的な着信データフローの監視専用です。指定されたタイムアウトの間データフローが中断された場合、接続は停止/切断されたと見なされます。もちろん、これはデータが常に受信される接続でのみ機能します。

ソケットタイムアウトを1に設定すると、ミリ秒ごとに新しいデータを受信する必要があります(データブロックを賢く読み取り、ブロックが十分に大きいと仮定します)。

着信ストリームのみが1ミリ秒を超えて停止した場合、タイムアウトが発生します。

于 2011-09-09T11:24:20.390 に答える
111

接続タイムアウトは、プログラムが別のプロセスへの接続をセットアップするために待機できる最大時間です。この時点では、アプリケーション データを取得したり投稿したりすることはなく、接続自体を確立するだけです。

ソケット タイムアウトは、個々のパケットを待機するときのタイムアウトです。ソケット タイムアウトが完全な応答を受信するためのタイムアウトであるというのはよくある誤解です。したがって、ソケット タイムアウトが 1 秒で、応答が 3 つの IP パケットで構成され、各応答パケットの到着に 0.9 秒かかり、合計応答時間が 2.7 秒の場合、タイムアウトは発生しません。

于 2015-11-30T21:14:31.877 に答える