Idan
10/27/2024, 4:30 PMio.ktor.client.plugins.sse.SSEClientException: timeout
at io.ktor.client.plugins.sse.BuildersKt.mapToSSEException(builders.kt:251)
at io.ktor.client.plugins.sse.BuildersKt.serverSentEvents-mY9Nd3A(builders.kt:111)
at io.ktor.client.plugins.sse.BuildersKt$serverSentEvents$1.invokeSuspend(Unknown Source:18)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:28)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:99)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:113)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:589)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:823)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:720)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:707)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@3c6ac1, <http://Dispatchers.IO]|Dispatchers.IO]>
Caused by: java.net.SocketTimeoutException: timeout
at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:214)
at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:263)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:217)
at com.android.okhttp.okio.RealBufferedSource.request(RealBufferedSource.java:72)
at com.android.okhttp.okio.RealBufferedSource.require(RealBufferedSource.java:65)
at com.android.okhttp.okio.RealBufferedSource.readHexadecimalUnsignedLong(RealBufferedSource.java:271)
at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.readChunkSize(Http1xStream.java:456)
at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.read(Http1xStream.java:437)
at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:372)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:277)
at java.io.BufferedInputStream.read(BufferedInputStream.java:338)
at kotlinx.io.InputStreamSource.readAtMostTo(JvmCore.kt:85)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel$awaitContent$2.invokeSuspend(Reading.kt:66)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel$awaitContent$2.invoke(Unknown Source:8)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel$awaitContent$2.invoke(Unknown Source:4)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:42)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:164)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel.awaitContent(Reading.kt:62)
at io.ktor.utils.io.ByteReadChannel$DefaultImpls.awaitContent$default(ByteReadChannel.kt:30)
at io.ktor.utils.io.ByteReadChannelOperationsKt.readUTF8LineTo(ByteReadChannelOperations.kt:375)
at io.ktor.utils.io.ByteReadChannelOperationsKt.readUTF8Line(ByteReadChannelOperations.kt:144)
at io.ktor.utils.io.ByteReadChannelOperationsKt.readUTF8Line$default(ByteReadChannelOperations.kt:142)
at io.ktor.client.plugins.sse.DefaultClientSSESession.parseEvent(DefaultClientSSESession.kt:47)
at io.ktor.client.plugins.sse.DefaultClientSSESession.access$parseEvent(DefaultClientSSESession.kt:12)
at io.ktor.client.plugins.sse.DefaultClientSSESession$_incoming$1.invokeSuspend(DefaultClientSSESession.kt:25)
at io.ktor.client.plugins.sse.DefaultClientSSESession$_incoming$1.invoke(Unknown Source:8)
at io.ktor.client.plugins.sse.DefaultClientSSESession$_incoming$1.invoke(Unknown Source:4)
2024-10-27 18:22:35.094 16233-16301 AndroidRuntime space.idan.khat E at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo$suspendImpl(Builders.kt:316) (Ask Gemini)
at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo(Unknown Source:0)
at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:56)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
... 6 more
Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.read(SocketInputStream.java:188)
at java.net.SocketInputStream.read(SocketInputStream.java:143)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:983)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:947)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:862)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:835)
at com.android.okhttp.okio.Okio$2.read(Okio.java:138)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:213)
... 36 more
And on iOS (Using Darwin)
Caused by: kotlinx.io.IOException: Socket timeout has expired [url=, socket_timeout=unknown] ms
Im using this example https://ktor.io/docs/client-server-sent-events.html#example to connect
Is it possible to catch SSException(s) and perform re-connection?
Thanks,Idan
10/27/2024, 4:50 PMio.ktor.client.plugins.sse.SSEClientException: timeout
at io.ktor.client.plugins.sse.BuildersKt.mapToSSEException(builders.kt:251)
at io.ktor.client.plugins.sse.BuildersKt.serverSentEvents-mY9Nd3A(builders.kt:111)
at io.ktor.client.plugins.sse.BuildersKt$serverSentEvents$1.invokeSuspend(Unknown Source:18)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.internal.ScopeCoroutine.afterResume(Scopes.kt:28)
at kotlinx.coroutines.AbstractCoroutine.resumeWith(AbstractCoroutine.kt:100)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:99)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:113)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:589)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:823)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:720)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:707)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@3c6ac1, <http://Dispatchers.IO]|Dispatchers.IO]>
Caused by: java.net.SocketTimeoutException: timeout
at com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:214)
at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:263)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:217)
at com.android.okhttp.okio.RealBufferedSource.request(RealBufferedSource.java:72)
at com.android.okhttp.okio.RealBufferedSource.require(RealBufferedSource.java:65)
at com.android.okhttp.okio.RealBufferedSource.readHexadecimalUnsignedLong(RealBufferedSource.java:271)
at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.readChunkSize(Http1xStream.java:456)
at com.android.okhttp.internal.http.Http1xStream$ChunkedSource.read(Http1xStream.java:437)
at com.android.okhttp.okio.RealBufferedSource$1.read(RealBufferedSource.java:372)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:277)
at java.io.BufferedInputStream.read(BufferedInputStream.java:338)
at kotlinx.io.InputStreamSource.readAtMostTo(JvmCore.kt:85)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel$awaitContent$2.invokeSuspend(Reading.kt:66)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel$awaitContent$2.invoke(Unknown Source:8)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel$awaitContent$2.invoke(Unknown Source:4)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:42)
at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:164)
at kotlinx.coroutines.BuildersKt.withContext(Unknown Source:1)
at io.ktor.utils.io.jvm.javaio.RawSourceChannel.awaitContent(Reading.kt:62)
at io.ktor.utils.io.ByteReadChannel$DefaultImpls.awaitContent$default(ByteReadChannel.kt:30)
at io.ktor.utils.io.ByteReadChannelOperationsKt.readUTF8LineTo(ByteReadChannelOperations.kt:375)
at io.ktor.utils.io.ByteReadChannelOperationsKt.readUTF8Line(ByteReadChannelOperations.kt:144)
at io.ktor.utils.io.ByteReadChannelOperationsKt.readUTF8Line$default(ByteReadChannelOperations.kt:142)
at io.ktor.client.plugins.sse.DefaultClientSSESession.parseEvent(DefaultClientSSESession.kt:47)
at io.ktor.client.plugins.sse.DefaultClientSSESession.access$parseEvent(DefaultClientSSESession.kt:12)
at io.ktor.client.plugins.sse.DefaultClientSSESession$_incoming$1.invokeSuspend(DefaultClientSSESession.kt:25)
at io.ktor.client.plugins.sse.DefaultClientSSESession$_incoming$1.invoke(Unknown Source:8)
at io.ktor.client.plugins.sse.DefaultClientSSESession$_incoming$1.invoke(Unknown Source:4)
2024-10-27 18:22:35.094 16233-16301 AndroidRuntime space.idan.khat E at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo$suspendImpl(Builders.kt:316) (Ask Gemini)
at kotlinx.coroutines.flow.ChannelFlowBuilder.collectTo(Unknown Source:0)
at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:56)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
... 6 more
Caused by: java.net.SocketException: Socket closed
at java.net.SocketInputStream.read(SocketInputStream.java:188)
at java.net.SocketInputStream.read(SocketInputStream.java:143)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readFromSocket(ConscryptEngineSocket.java:983)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:947)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.readUntilDataAvailable(ConscryptEngineSocket.java:862)
at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.read(ConscryptEngineSocket.java:835)
at com.android.okhttp.okio.Okio$2.read(Okio.java:138)
at com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:213)
... 36 more