有没有办法为JDK stdlib HttpUrlConnection
设置套接字级别选项(如SO_KEEPALIVE)?我试图找出一种方法来获取不会成为偶尔"悬挂"的受害者的HTTP请求。连接(似乎是因为网络数据包丢失而经常发生)。更强大的HTTP客户端。我知道有setReadTimeout
方法,但我试图找到一些东西来推动TCP流回到生活中,而不仅仅是中止它,因为读取超时似乎。或者至少报告连接失败已经发生,而不是永远挂在读取上。但这也允许阅读回来"只要它想要"假设连接仍然处于活动状态。"
通过一些检查,似乎SO_KEEPALIVE的默认值为" off"对于C层和Java级别的套接字。
答案 0 :(得分:1)
这不是建立在三个谬误之上的。
SO_KEEPALIVE并没有将TCP流重新回到生活中,尽管名称选择不当。在默认的两小时间隔后,它只检测死连接。这不是你要找的东西。
读取超时不会中止连接。它会抛出一个SocketTimeoutException
。连接仍然存在,随后的读取可能会成功。
检测到丢弃的数据包并在TCP中重新传输。
使用读取超时。