当线程被中断并同时阻塞来自套接字InputStream
的输入时,该套接字的资源(例如本地端口)是否被释放?中断被阻塞的线程,等待来自套接字的输入
我知道Socket有一个叫做SoTimeout
的选项。如果我设置了SoTimeout
选项,那么在超时到期时,Socket绑定的端口会被释放吗?
当线程被中断并同时阻塞来自套接字InputStream
的输入时,该套接字的资源(例如本地端口)是否被释放?中断被阻塞的线程,等待来自套接字的输入
我知道Socket有一个叫做SoTimeout
的选项。如果我设置了SoTimeout
选项,那么在超时到期时,Socket绑定的端口会被释放吗?
没有什么,说Thread.interrupt()
会打断阅读可言,更不用说关闭套接字,除非这是一个InterruptibleChannel
,在这种情况下,语义明确记载的是一个ClosedByInterruptException
抛出并关闭频道。
如果您设置套接字超时并获得SocketTimeoutException
,则套接字保持打开状态。它的资源没有被释放(包括它的端口),这意味着在Socket关闭之前你不能绑定一个新的Socket到那个端口。
超时本身既不会关闭套接字,也不会解除绑定端口。你需要拨打socket.close()
来完成。
取决于您的代码在捕获异常时的功能 –