2011-12-04 5 views
2

스레드가 소켓의 InputStream에서 입력을 차단하는 동안 인터럽트되면 소켓 (예 : 로컬 포트)의 리소스가 해제됩니까?차단 된 스레드 인터럽트 소켓에서 입력 대기 중

소켓에 SoTimeout이라는 옵션이 있다는 것을 알고 있습니다. SoTimeout 옵션을 설정하면 제한 시간이 만료 될 때 소켓이 해제되도록 포트가 바인딩됩니까?

+0

예외를 잡을 때 코드가 수행하는 작업에 따라 다릅니다. –

답변

4
  1. Thread.interrupt()이 커녕 어떤 경우에 의미가 명확하게 ClosedByInterruptException가 발생되는 것을 문서화, 그것이 InterruptibleChannel입니다 하지 않는 소켓을 닫습니다, 전혀 읽을 이 중단 될 말한다 아무것도 없다 채널이 닫힙니다.

  2. 소켓 시간 제한을 설정하고 SocketTimeoutException이되면 소켓이 열린 상태로 유지됩니다. 그것의 자원을 발표하지 않습니다 (포트 포함). 소켓이 닫힐 때까지 새로운 소켓을 그 포트에 바인드 할 수 없습니다.

2

시간 초과 자체가 Socket을 닫지 않고 포트를 바인딩 해제하지 않습니다. 이를 수행하려면 socket.close()으로 전화해야합니다.