HttpUrlConnection如何设置SO_KEEPALIVE

时间:2017-08-04 16:35:06

标签: java http

有没有办法为JDK stdlib HttpUrlConnection设置套接字级别选项(如SO_KEEPALIVE)?我试图找出一种方法来获取不会成为偶尔"悬挂"的受害者的HTTP请求。连接(似乎是因为网络数据包丢失而经常发生)。更强大的HTTP客户端。我知道有setReadTimeout方法,但我试图找到一些东西来推动TCP流回到生活中,而不仅仅是中止它,因为读取超时似乎。或者至少报告连接失败已经发生,而不是永远挂在读取上。但这也允许阅读回来"只要它想要"假设连接仍然处于活动状态。"

通过一些检查,似乎SO_KEEPALIVE的默认值为" off"对于C层和Java级别的套接字。

1 个答案:

答案 0 :(得分:1)

这不是建立在三个谬误之上的。

  1. SO_KEEPALIVE并没有将TCP流重新回到生活中,尽管名称选择不当。在默认的两小时间隔后,它只检测死连接。这不是你要找的东西。

  2. 读取超时不会中止连接。它会抛出一个SocketTimeoutException。连接仍然存在,随后的读取可能会成功。

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

  4. 使用读取超时。