URLConnection.connectionTimeout 是如何处理的?

How the URLConnection.connectionTimeout is handled?

给定代码:

HttpURLConnection huc = (HttpURLConnection) new URL( url ).openConnection();
huc.setConnectTimeout( 10000 );
huc.connect();

连接超时具体是如何处理的?设置了一些 HTTP header 还是什么?或者正在循环检查连接状态 connectionTimeout 时间?

我试图在源代码中找到它,但只有 long connectionTimout 字段...

可以这样想:

connect 内部,第一个并行计时器是 运行 用于连接超时。 如果计时器在实际连接建立(收到响应)之前结束,则失败。

实际上,在大多数平台上,操作系统可以设置超时参数并自行处理 - 以相同的方式。 没有看到 java 本机代码,但有 POSIX 方法,如 setsocketopt 用于设置超时。 POSIX connect 会超时。

在 java 中,超时是后来非常需要的附加功能,以利用这些可用的超时。