1. ホーム

[解決済み】ソケットの接続タイムアウトと読み込みタイムアウトの違いは何ですか?

2022-04-12 16:31:14

質問

3つの質問

  1. とはどのような違いがあるのでしょうか? 接続 読む ソケットのタイムアウト?

  2. とは何ですか? 接続 timeout set to "infinity" はどういう意味ですか?どのような場合に無限ループになるのでしょうか?また、無限ループが停止するきっかけは何でしょうか?

  3. はどのようなものですか? 読む timeout set to "infinity"とはどういう意味ですか?どのような場合に無限ループになるのでしょうか?また、無限ループが終了するきっかけは何でしょうか?

解決方法は?

<ブロッククオート
  1. ソケットの接続タイムアウトと読み込みタイムアウトの違いは何ですか?

接続タイムアウトは、最初の接続、つまりTCP接続のハンドシェイクを完了するまでのタイムアウトです。 読み込みタイムアウトは、データの読み込み待ちのタイムアウトです。 1 . サーバ(またはネットワーク)がデータを配信できなかった場合、クライアントがソケットを作成してから <timeout> 秒後に read を呼び出すと、読み取りタイムアウトエラーが発生します。

  1. 接続タイムアウトを "infinity" に設定すると、どのような意味になりますか?また、どのような場合に無限ループに陥るのでしょうか?

それは、接続の試みが永遠にブロックされる可能性があるということです。 無限ループはありませんが、接続の試みは他のスレッドがソケットを閉じることによってブロックが解除される可能性があります。 (A Thread.interrupt() の呼び出しも有効かもしれません......よく分かりませんが)。

<ブロッククオート
  1. read timeout set to "infinity" とはどういう意味ですか?どのような場合に無限ループになるのでしょうか? 無限ループを終了させるトリガーは何ですか?

を呼び出したということです。 read は、ソケットストリーム上で永久にブロックされる可能性があります。 繰り返しますが、無限ループは発生しませんが read によってブロックを解除することができます。 Thread.interrupt() を呼び出してソケットを閉じ、(もちろん)相手側はデータを送信するか接続を閉じます。


1 - それは、あるコメント者が考えていたような、ソケットがオープンまたはアイドルであることができる時間のタイムアウトではありません....