Java:套接字读取超时异常



我试图调用一个非常繁重的进程。它的平均工作时间估计为9-10分钟。

当我执行这个过程时,我为一个大得离谱的数字设置了超时:99999999。

2分钟后,我得到以下错误:

java.net.SocketTimeoutException:读取超时

我试着再搞一些,我把超时设置为3000,不出所料,3秒后我也出现了同样的错误。

你知道socket.setSoTimeout(99999999)为什么将其设置为最大120000吗?

我遇到了同样的问题,解决方案没有使用CCD_ 2,直到最后一次向套接字读取或写入数据为止。这使得套接字进入FIN_WAIT状态,因此在关闭之前等待2分钟。您可以在这篇文章中阅读更多关于的信息

很明显,您没有设置您认为要设置的超时,或者其他人随后正在更改它。你必须发布一些代码才能得到进一步的解释。

请注意,根据W.R.Stevens在TCP/IP Illustrated,Vol II,#17.4中的说法,超时时间很短,为1000Hz,因此超过11分钟的超时是不可能的。这适用于BSD代码。

我不确定您的应用程序是如何工作的,但请尝试为套接字设置无限超时

public void setSoTimeout(int timeout)
              throws SocketException

使用指定的超时(以毫秒为单位)启用/禁用SO_TIMEOUT。如果此选项设置为非零超时,则与此套接字关联的InputStream上的read()调用将仅阻塞此时间量。如果超时到期,则会引发java.net.SocketTimeoutException,尽管套接字仍然有效。必须在进入阻止操作之前启用该选项才能生效。超时值必须为> 0。超时为零被解释为无限超时。

如果你提供更多关于你的电话的信息,我可能会改进答案。

相关内容

  • 没有找到相关文章

最新更新