我试图打电话给一个非常重的过程。 它的平均工作时间估计为9-10分钟。
当我执行该过程时,我将超时设置为一个非常庞大的数字:99999999。
2分钟后,我收到以下错误:
java.net.SocketTimeoutException:读取超时
我试图把它弄得更糟,我把超时设置为3000,并且在预期的3秒后我得到了同样的错误。
您是否知道为什么socket.setSoTimeout(99999999)
将其设置为最大120000?
答案 0 :(得分:3)
我遇到了同样的问题而且没有使用解决方案
socket.shutdownInput(); socket.shutDownOutput();
直到最后一次向套接字读取或写入数据。这使得套接字进入FIN_WAIT状态,因此在关闭前等待2分钟。您可以在this post
答案 1 :(得分:2)
显然,您没有设置您认为正在设置的超时,或者其他人正在更改它。你必须发布一些代码才能得到进一步的解释。
请注意,根据WR Stevens在 TCP / IP Illustrated,第二卷,#17.4中,超时保持短暂的1000Hz刻度,因此超时超过11分钟可能。这适用于BSD代码。
答案 2 :(得分:1)
我不确定您的应用程序是如何工作的,但尝试设置无限timeout to the socket
public void setSoTimeout(int timeout) throws SocketException
使用指定的超时启用/禁用
SO_TIMEOUT
,以毫秒为单位。如果将此选项设置为非零超时,则与此Socket关联的read()
上的InputStream
调用将仅阻止这段时间。如果超时到期,则引发java.net.SocketTimeoutException
,尽管Socket仍然有效。必须在进入阻止操作之前启用该选项才能生效。超时必须为> 0
。超时为零被解释为无限超时。
如果您提供有关通话的更多信息,我可以改进答案。