2017-04-03 40 views
0

私はsocket.setSoTimeout(int)メソッドについてかなり混乱しています。socketとsetSoTimeout()

シナリオで

私は()setSoTimeoutを呼び出すとき、それはsokcetを一時停止し、4000ミリ秒後に再開されていますか?

socket.setSoTimeout(4000); 
try{ 
     string data = input.read(); 

}catch (InterruptedIOException e) { 

} 

を呼び出しますかそれとも、ソケットからのすべての読み取りを完全にブロックするだけで、setSoTimeoutがまだアクティブな間に何かを読み込もうとすると例外がスローされますか?

最新の場合、これはなぜ便利なのですか?タイムアウト後の文書化によって、例外は自動的にスローされます。

ありがとうございます。 Socket.setSoTimeout()のドキュメントの

+0

「タイムアウト」という奇妙な概念があります。 – EJP

答えて

1

重要な部分は、次のとおりです。

ミリ秒単位で指定されたタイムアウトでSO_TIMEOUTを有効/無効にします。このオプションをゼロ以外のタイムアウトに設定すると、このSocketに関連付けられたInputStreamのread()呼び出しは、この時間だけブロックされます。

これは、ソケットの読み取りが「タイムアウト」の意味に照らして解釈する場合、おそらくより明確である(指定した時間よりも、もはや閉塞を防止し、あれば確かに、より明確であることになると言っていますあなたはシステムレベルのソケットインターフェイスに精通しています)。それはではなく、は、読書がその長い間ブロックされていることが保証されていると言いますが、それは確かに疑わしいユーティリティです。

タイムアウトを設定することによって解決される問題の中には、接続を閉じることなく、きれいに切断されたクライアントを処理する問題があります。ローカルマシンは、それが起こったことを検出する方法がないので、タイムアウトなしで、そのようなクライアントに接続されたソケットから読み取る試みは無期限にブロックされます。

-1

私は、setSotimeoutは、サーバーがread.ifタイムアウト値を超える応答を待つことができる時間を示し、例外がスローされると考えます。 example.Ifため

ますソケットにsetSotimeout(4000)を設定し、

ソケットは、対応する受信機のための唯一の4秒間待ちます、それは4秒後に例外がスローされます。

低速接続ネットワークまたは不良サーバーでは便利です。 レスポンスの待機を回避します。

+0

サーバーとは特に関係ありません。それは送信者と受信者に関するものです。 – EJP