Java:套接字读取超时异常

2022-09-03 15:51:18

我试图给一个非常繁重的过程打电话。它的平均工作长度估计为9-10分钟。

当我执行该过程时,我为一个荒谬的大数字设置了超时:99999999。

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

java.net.SocketTimeoutException: Readd over out

我试图再搞砸一些,我将超时设置为3000,并且在3秒后按预期,我得到了相同的错误。

您知道为什么要将其设置为120000 max吗?socket.setSoTimeout(99999999)


答案 1

我遇到了同样的问题,直到最后一次将数据读取或写入套接字时才使用解决方案。这使得套接字进入FIN_WAIT状态,从而在关闭前等待2分钟。您可以在这篇文章中阅读更多相关信息socket.shutdownInput(); socket.shutDownOutput();


答案 2

显然,您没有设置您认为正在设置的超时,或者其他人正在更改它。您必须发布一些代码才能进一步阐明。

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


推荐