2

I am writing tests which run OkHttp/Retrofit requests against a MockWebServer. Among other things I'm testing timeouts. Here I noticed, that some of my timeout tests do not produce the same kind of exception all the time:

While the exception thrown is always a SocketTimeoutException, the exception message differs between two possibilities. Sometimes I get

  • "timeout", sometimes
  • "Read timed out".

There seems to be no clear pattern (it's the very same test which sometimes produces one or the other of these exception messages).

I assume that different constellations/causes lead to the differing messages... Can somebody explain to me the difference between these two cases?


Here are the corresponding stack traces:

"Read timed out"

Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:170)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at okio.Okio$2.read(Okio.java:140)
    at okio.AsyncTimeout$2.read(AsyncTimeout.java:238)
    at okio.RealBufferedSource.read(RealBufferedSource.java:45)
    at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:381)
    at okio.RealBufferedSource.read(RealBufferedSource.java:45)
    at okio.ForwardingSource.read(ForwardingSource.java:35)
    at retrofit2.OkHttpCall$ExceptionCatchingRequestBody$1.read(OkHttpCall.java:279)
    at okio.RealBufferedSource$1.read(RealBufferedSource.java:386)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at com.google.gson.stream.JsonReader.fillBuffer(JsonReader.java:1287)
    at com.google.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1016)
    at com.google.gson.stream.JsonReader.nextName(JsonReader.java:787)
    at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:739)
    at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:714)
    at com.google.gson.internal.bind.TypeAdapters$35$1.read(TypeAdapters.java:910)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
    at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117)
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
    at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)

"timeout"

Caused by: java.net.SocketTimeoutException: timeout
    at okio.Okio$3.newTimeoutException(Okio.java:212)
    at okio.AsyncTimeout.exit(AsyncTimeout.java:288)
    at okio.AsyncTimeout$2.read(AsyncTimeout.java:242)
    at okio.RealBufferedSource.read(RealBufferedSource.java:45)
    at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:381)
    at okio.RealBufferedSource.read(RealBufferedSource.java:45)
    at okio.ForwardingSource.read(ForwardingSource.java:35)
    at retrofit2.OkHttpCall$ExceptionCatchingRequestBody$1.read(OkHttpCall.java:279)
    at okio.RealBufferedSource$1.read(RealBufferedSource.java:386)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at com.google.gson.stream.JsonReader.fillBuffer(JsonReader.java:1287)
    at com.google.gson.stream.JsonReader.nextQuotedValue(JsonReader.java:1016)
    at com.google.gson.stream.JsonReader.nextName(JsonReader.java:787)
    at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:739)
    at com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:714)
    at com.google.gson.internal.bind.TypeAdapters$35$1.read(TypeAdapters.java:910)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
    at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:117)
    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:211)
    at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:106)
fgysin
  • 11,329
  • 13
  • 61
  • 94

0 Answers0