[英]Java: socket read time out exception
我试图打电话给一个非常重的过程。 它的平均工作时间估计为9-10分钟。
当我执行该过程时,我将超时设置为一个非常庞大的数字:99999999。
2分钟后,我收到以下错误:
java.net.SocketTimeoutException:读取超时
我试图把它弄得更糟,我把超时设置为3000,并且在预期的3秒后我得到了同样的错误。
您是否知道为什么socket.setSoTimeout(99999999)
将其设置为最大120000?
显然,您没有设置您认为正在设置的超时,或者其他人正在更改它。 你必须发布一些代码才能得到进一步的阐述。
请注意,根据WR Stevens在TCP / IP Illustrated,第二卷,#17.4中的说法,超时保持为1000Hz刻度的短暂,因此超时不能超过11分钟。 这适用于BSD代码。
我不确定您的应用程序是如何工作的,但尝试为套接字设置无限超时
public void setSoTimeout(int timeout) throws SocketException
使用指定的超时启用/禁用
SO_TIMEOUT
,以毫秒为单位。 如果将此选项设置为非零超时,则与此Socket关联的InputStream
上的read()
调用将仅阻止这段时间。 如果超时到期,则引发java.net.SocketTimeoutException
,尽管Socket仍然有效。 必须在进入阻止操作之前启用该选项才能生效。 超时必须> 0
。 超时为零被解释为无限超时。
如果您提供有关通话的更多信息,我可以改进答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.