0

我正在使用基于 JDK 1.4 的旧库,我发现尝试连接到不存在的 url 时会出现巨大的超时。调查揭示了下一个问题:

在 JDK 1.5 之前,没有设置 URLConnection 对象的连接超时。相反,它会简单地使用默认的操作系统级别超时值作为 TCP 超时(默认情况下恰好是 1800 秒/30 分钟)。JDK1.5 及之后的版本包括设置自定义超时的选项,该超时覆盖操作系统提供的默认设置。

是否可以从 java 覆盖“TCP 超时操作系统设置”,以便在 java 1.4 上编写的代码使用此设置?

4

3 回答 3

2

您需要调用系统命令,这将在您的机器上更改此设置

  • 您需要是 root 或具有 sudo 访问权限
  • 它为每个程序更改它
  • 你需要知道你支持的每个平台是什么。

或者您可以升级到 Java 7。甚至 Java 6 也已结束。

于 2013-07-31T06:37:11.850 回答
1

相反,它会简单地使用 TCP 超时的默认操作系统级别超时值(默认情况下恰好是 1800 秒/30 分钟)

这不是真的。有几种 TCP 超时,但适用于此处的是连接超时,它由 3 次尝试组成,内部超时为 10、20、40 秒,总共 70 秒。肯定不是半个小时。事实上,我不知道任何默认为半小时的 TCP 超时。

是否可以从 java 覆盖“TCP 超时操作系统设置”,以便在 java 1.4 上编写的代码使用此设置?

你可以在目标系统上运行regedit或任何合适的东西,但是你会为每个人改变它,这当然是不可取的。

但是,鉴于上述错误,我想知道您是否真的有问题。您应该能够忍受一分钟的默认连接超时。

于 2013-07-31T07:27:15.660 回答
0

如果您有权访问套接字对象,则可以通过设置SO_TIMEOUT套接字选项来更改超时。这允许您更改所有阻塞调用的超时时间(例如 connect())。它至少在 1.4.2 中可用。

于 2013-07-31T08:16:20.143 回答