我正在使用基于JDK 1.4的旧库,我发现尝试连接到不存在的URL时存在大量超时。调查显示下一个问题:
在JDK 1.5之前,没有为URLConnection对象设置连接超时。相反,它只是使用TCP超时的默认操作系统级别超时值(默认情况下恰好是1800秒/ 30分钟)。 JDK1.5及之后包含了设置自定义超时的选项,该超时覆盖了操作系统提供的默认设置。
是否可以从java覆盖'TCP超时OS设置',因此在java 1.4上编写的代码使用此设置?
答案 0 :(得分:2)
你需要调用系统命令,这将在你的机器上改变它
或者你可以升级到Java 7.甚至Java 6都是行尾。
答案 1 :(得分:1)
相反,它只会使用TCP超时的默认操作系统级别超时值(默认情况下为1800秒/ 30分钟)
那不是真的。有几个TCP超时,但这里适用的是连接超时,它包括三次内部超时尝试,如10,20,40秒,总共70秒。当然不是半个小时。事实上,我不知道任何TCP超时默认为半小时。
是否可以从java覆盖'TCP超时OS设置',因此在java 1.4上编写的代码使用此设置?
您可以在目标系统上运行regedit
或任何适当的内容,但是您将为每个人更改它,这当然是不可取的。
然而,鉴于上述错误,我想知道你是否真的有问题。你应该能够忍受一分钟的默认连接超时。
答案 2 :(得分:0)
如果您有权访问套接字对象,则可以通过设置SO_TIMEOUT套接字选项来更改超时。这允许您更改所有阻塞调用的超时(例如connect())。它至少在1.4.2中可用。