diff --git a/sdk/runanywhere-kotlin/src/main/kotlin/com/runanywhere/sdk/foundation/connect/AndroidConnectTransport.kt b/sdk/runanywhere-kotlin/src/main/kotlin/com/runanywhere/sdk/foundation/connect/AndroidConnectTransport.kt index 08e3cbda1..3fa7dbd17 100644 --- a/sdk/runanywhere-kotlin/src/main/kotlin/com/runanywhere/sdk/foundation/connect/AndroidConnectTransport.kt +++ b/sdk/runanywhere-kotlin/src/main/kotlin/com/runanywhere/sdk/foundation/connect/AndroidConnectTransport.kt @@ -446,6 +446,7 @@ internal class AndroidConnectSocket( const val HANDSHAKE_TIMEOUT_MS = 5_000 const val HEARTBEAT_INTERVAL_MS = 3_000L const val HEARTBEAT_TIMEOUT_MS = 2_000 + /** Generous inter-frame timeout so a stalled host is visible without false positives. */ val GENERATION_READ_TIMEOUT_MS = RADefaults.Connect.GENERATION_READ_TIMEOUT_MS } diff --git a/sdk/runanywhere-swift/Sources/RunAnywhere/Public/Connect/ConnectSession.swift b/sdk/runanywhere-swift/Sources/RunAnywhere/Public/Connect/ConnectSession.swift index 6e4dfe99b..f1c1a150b 100644 --- a/sdk/runanywhere-swift/Sources/RunAnywhere/Public/Connect/ConnectSession.swift +++ b/sdk/runanywhere-swift/Sources/RunAnywhere/Public/Connect/ConnectSession.swift @@ -282,7 +282,11 @@ public final class ConnectSession: ObservableObject { "Timed out connecting to \(hostDisplayName)." ) } - let value = try await group.next()! + guard let value = try await group.next() else { + throw ConnectTransportError.network( + "Connecting to \(hostDisplayName) finished without a response." + ) + } group.cancelAll() return value }