2011-12-04 11 views
2

スレッドがソケットのInputStreamからの入力でブロックしている間に中断された場合、そのソケットのリソース(例えばローカルポート)は解放されますか?ブロックされているスレッドを中断してソケットからの入力を待っている

ソケットには、SoTimeoutというオプションがあります。 SoTimeoutオプションを設定した場合、タイムアウトの期限が切れたときにソケットが解放されるようにバインドされているポートはありますか?

+0

例外をキャッチしたときのコードの内容 –

答えて

4
  1. Thread.interrupt()がおろかが、その場合には意味がはっきりClosedByInterruptExceptionがスローされていることを文書化され、それがInterruptibleChannelあるない限り、ソケットを閉じて、全く読んが中断されると言うものはありませんチャネルは閉じられています。

  2. ソケットタイムアウトを設定してSocketTimeoutExceptionを取得した場合、ソケットは開いたままです。そのリソースは解放されません(ポートを含む)。つまり、Socketが閉じられるまで、新しいSocketをそのポートにバインドすることはできません。

2

タイムアウト自体はSocketを閉じることも、ポートをバインド解除することもありません。これを達成するにはsocket.close()に電話する必要があります。

関連する問題