I make a simple request just to check if I have Internet access:
return try {
val request = Request.Builder()
.url("https://www.google.com")
.build()
val response = OkHttpClient()
.newCall(request)
.execute()
response.body()?.close()
response.isSuccessful
} catch (e: IOException) {
false
}
And pretty often I fall into catch
block with java.net.SocketTimeoutException: Read timed out
. I found out that OkHttp doesn't go further this line in okhttp3.internal.connection.RealConnection
:
private void connectTls(ConnectionSpecSelector connectionSpecSelector) throws IOException {
// ...
try {
// ...
sslSocket.startHandshake(); // never goes to the next line
// ...
} catch(AssertionError e) {
// never goes here
} finally {
// goes here
}
}
I can't figure out what happens in sslSocket.startHandshake()
because apparently sslSocket
is com.android.org.conscrypt.ConscryptEngineSocket
and Android doesn't really want me to see how it works.
Is it some kind of a bug or I just do something wrong? Is there a fix or at least a workaround?
Log:
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setUseSessionTickets(Z)V (blacklist,core-platform-api, reflection, denied)
Accessing hidden method Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(Ljava/lang/String;)V (blacklist,core-platform-api, reflection, denied)
I use Android 11 (API 30) and OkHttp3 v3.12.0.
P.S. As I remember, I can't update OkHttp to something newer because I have another dependencies that rely on OkHttp of this particular version because newer versions are backward incompatible.