HttpUrlConnection如何设置SO_KEEPALIVE
是否可以为JDK stdlib设置套接字级别选项(如SO_KEEPALIVE)HttpUrlConnection?我试图找出一种获取HTTP请求的方法,该方法不会成为偶尔的“挂起”连接(似乎经常由于网络数据包丢失而发生)的受害者。一个更强大的HTTP客户端。我知道有这种setReadTimeout方法,但我正在尝试寻找一些方法来使TCP流恢复正常运行,而不是像读取超时那样中止它。或者至少报告连接发生故障,而不是永久挂起读取。但这还允许读取在假设连接“仍处于活动状态”的情况下“在需要时”返回。
经过一些检查,看来C层套接字和Java层套接字的SO_KEEPALIVE缺省值均为“ off”。
回答:
这不是基于一个谬论,而是基于三个谬论。
尽管名称不正确,SO_KEEPALIVE不会“将TCP流推回生活”。在两个小时的默认间隔后,它仅检测到死连接。不是您要找的东西。
读取超时不会终止连接。它抛出一个
SocketTimeoutException
。连接仍然有效,后续读取可能会成功。检测到丢弃的数据包并在TCP中重新传输。
使用读取超时。
以上是 HttpUrlConnection如何设置SO_KEEPALIVE 的全部内容, 来源链接: utcz.com/qa/415707.html