- 締切済み
ソケットクラスのsetSoTimeoutについて
少し前に、仕事で使用していたプログラムの中に Socket sc = new Socket(); sc.setSoTimeout(20000); としている記述がありました。これは何をやっているのだろうと 思いリファレンスを見てみたところ 「Socket に関連付けられた InputStream の read() 呼び出しが、その時間の間だけブロックされます。タイムアウトの期限が切れると、Socket がまだ有効であっても java.net.SocketTimeoutException が発行されます。」 という記述がありました。 read() 呼び出しが、その時間の間だけブロックされるという意味がよくわからないのですが どういうことでしょうか。 これはAさんがソケット通信して取得した結果を20秒の間に読み込まなければいけなくて、 Bさんはその20秒間ソケット通信ができないということでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
回答No.1
「ブロックされる」のはそのソケットのInputStreamからデータを読み出そうとしているプログラム(のスレッド)です。 ブロックされている間はread()よりも先へ実行を進めることができません。データを読み出せたか、指定したタイムアウト時間が経過するとブロックが解除されます。