Hi, using Ktor 3 client SSE Im getting this except...
# ktor
i
Hi, using Ktor 3 client SSE Im getting this exception on Android (Using Android Engine)
Copy code
io.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)
Copy code
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,
🧵 2
Copy code
io.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