Прерывание потоков, которые заблокированы, ожидая ввода от сокета - PullRequest
2 голосов
/ 04 декабря 2011

Когда поток прерывается, когда он также блокирует вход от сокета InputStream, освобождаются ли ресурсы этого сокета (например, локального порта)?

Я знаю, что у сокета есть опция под названиемSoTimeout.Если я установлю опцию SoTimeout, будет ли освобожден порт, который Socket должен освободить по истечении времени ожидания?

Ответы [ 2 ]

4 голосов
/ 04 декабря 2011
  1. Ничто не говорит о том, что Thread.interrupt() вообще прервет чтение , не говоря уже о закрытии сокета, , если это InterruptibleChannel, и в этом случае семантика четко задокументирована, что ClosedByInterruptException выбрасывается и канал закрыт.

  2. Если вы установите тайм-аут сокета и получите SocketTimeoutException, сокет остается открытым.Ни один из его ресурсов не освобожден (включая его порт), что означает, что вы не можете привязать новый сокет к этому порту, пока сокет не будет закрыт.

2 голосов
/ 04 декабря 2011

Время ожидания само по себе не закроет сокет и не отвяжет порт. Для этого вам нужно позвонить socket.close().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...