2011-12-04 28 views
2

当线程被中断并同时阻塞来自套接字InputStream的输入时,该套接字的资源(例如本地端口)是否被释放?中断被阻塞的线程,等待来自套接字的输入

我知道Socket有一个叫做SoTimeout的选项。如果我设置了SoTimeout选项,那么在超时到期时,Socket绑定的端口会被释放吗?

+0

取决于您的代码在捕获异常时的功能 –

回答

4
  1. 没有什么,说Thread.interrupt()会打断阅读可言,更不用说关闭套接字,除非这是一个InterruptibleChannel,在这种情况下,语义明确记载的是一个ClosedByInterruptException抛出并关闭频道。

  2. 如果您设置套接字超时并获得SocketTimeoutException,则套接字保持打开状态。它的资源没有被释放(包括它的端口),这意味着在Socket关闭之前你不能绑定一个新的Socket到那个端口。

2

超时本身既不会关闭套接字,也不会解除绑定端口。你需要拨打socket.close()来完成。