Android间歇性SSL Socket读取超时

时间:2016-01-31 21:37:18

标签: java android ssl android-async-http

我正在构建一个调用HTTP / REST api的Android应用程序。 我已经自我签署了一个测试证书,并将其添加到我的手机信任商店。

我遇到了一个非常奇怪的问题,我将收到以下异常:

java.net.SocketTimeoutException: Read timed out
at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:705)
...

我完全不知道这是怎么回事。 重要说明:

  • 这是随机发生的,经过大量请求后回来,但有时会消失一两天。
  • 我无法可靠地重现这个问题。
  • 我调整了超时设置但没有结果。
  • 该问题超过了应用程序的生命周期。重新启动应用程序没有任何效果,虽然它似乎在5分钟内自行解决。
  • 如果我正在使用cookie商店,删除它似乎暂时解决了这个问题。如果我没有使用cookie存储,则需要创建一个新的HttpClient实例(因为cookie会暂时与HttpClient实例一起存在)
  • 这不是DNS问题,因为我可以解析端点(因为我有另一个使用相同端点和相同crt的应用程序)。
  • 我正在使用AS的AsyncHttp库,但问题仍然发生在使用该库之外。
  • 我尝试过另一个版本的Android设备(没有运气)。

我尝试过有趣的事情:

  • 我创建了一个新的AsyncHttp实例,发出请求(没有设置cookiestore)并成功收到响应。然后,应用程序使用cookie存储创建另一个AsyncHttp实例,问题仍然存在。即使在应用程序生命周期之外,第一个(非烹饪)请求也会起作用,但第二个请求不会。
  • 我累了关掉tcp_timestamp(暂时通过proc中的文件)。没变。

如果有人对类似问题有任何想法或经验,请告诉我。

1 个答案:

答案 0 :(得分:0)

这实际上是与我的服务器代码有关的会话错误。