HttpUrlConnection如何设置SO_KEEPALIVE

是否可以为JDK stdlib设置套接字级别选项(如SO_KEEPALIVE)HttpUrlConnection?我试图找出一种获取HTTP请求的方法,该方法不会成为偶尔的“挂起”连接(似乎经常由于网络数据包丢失而发生)的受害者。一个更强大的HTTP客户端。我知道有这种setReadTimeout方法,但我正在尝试寻找一些方法来使TCP流恢复正常运行,而不是像读取超时那样中止它。或者至少报告连接发生故障,而不是永久挂起读取。但这还允许读取在假设连接“仍处于活动状态”的情况下“在需要时”返回。

经过一些检查,看来C层套接字和Java层套接字的SO_KEEPALIVE缺省值均为“ off”。

回答:

这不是基于一个谬论,而是基于三个谬论。

  1. 尽管名称不正确,SO_KEEPALIVE不会“将TCP流推回生活”。在两个小时的默认间隔后,它仅检测到死连接。不是您要找的东西。

  2. 读取超时不会终止连接。它抛出一个SocketTimeoutException。连接仍然有效,后续读取可能会成功。

  3. 检测到丢弃的数据包并在TCP中重新传输。

使用读取超时。

以上是 HttpUrlConnection如何设置SO_KEEPALIVE 的全部内容, 来源链接: utcz.com/qa/415707.html

回到顶部