假设我有多个套接字连接,每个套接字连接可能需要在I / O操作中单独在无限超时和有限超时之间切换。 Socket.setSoTimeout()
的文档意味着,在setSoTimeout()
上调用Socket
会更改所有Socket
个对象的超时,因为字段SocketOptions.SO_TIMEOUT
是静态的。
有没有办法为单个Socket
个对象设置超时?
答案 0 :(得分:1)
不,这并不意味着它会为所有套接字更改timeout
。它只会更改关联套接字对象的timeout
。摘自java文档
Socket#setSoTimeout
使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位。 将此选项设置为非零超时,对()调用read() 与此Socket 关联的InputStream将仅阻止此操作 多少时间。如果超时到期,a 引发了java.net.SocketTimeoutException,尽管Socket仍然存在 有效。必须在进入阻止之前启用该选项 操作有效。超时必须> 0.超时为零 被解释为无限超时。
答案 1 :(得分:0)
在对`https://plnkr.co/edit/OtfLPuQFptfgUxuo0pXJ`
的源代码进行一些挖掘之后,似乎java.net.Socket
不是全局超时值。相反,它是某个选项的某种ID,并且使用所述ID通过SocketOptions.SO_TIMEOUT
实例检索实际的超时值。
SocketImpl