如果一个线程在被套接字InputStream
的输入阻塞时被中断,那么该套接字的资源(例如本地端口)是否会被释放?
我知道Socket有一个名为SoTimeout
的选项。如果我设置SoTimeout
选项,超时到期时Socket绑定的端口是否会被释放?
答案 0 :(得分:4)
没有任何内容表明Thread.interrupt()
会完全中断读取,更不用说关闭套接字,除非它是{{ 1}},在这种情况下,语义清楚地记录为抛出InterruptibleChannel
并关闭通道。
如果设置套接字超时并获得ClosedByInterruptException
,套接字将保持打开状态。它的资源都没有被释放(包括它的端口),这意味着在Socket关闭之前你不能将新的Socket绑定到该端口。
答案 1 :(得分:2)
超时本身既不会关闭套接字,也不会取消绑定端口。您需要致电socket.close()
来实现这一目标。