@@ -248,8 +248,13 @@ extension WebSocketClient: URLSessionWebSocketDelegate {
248248
249249 let nsError = error as NSError
250250 switch ( nsError. domain, nsError. code) {
251- case ( NSURLErrorDomain . self, NSURLErrorNetworkConnectionLost) , // connection lost
252- ( NSPOSIXErrorDomain . self, Int ( ECONNABORTED) ) : // background to foreground
251+ case ( NSURLErrorDomain . self, NSURLErrorNetworkConnectionLost) ,
252+ ( NSURLErrorDomain . self, NSURLErrorCannotConnectToHost) ,
253+ ( NSURLErrorDomain . self, NSURLErrorTimedOut) ,
254+ ( NSURLErrorDomain . self, NSURLErrorNotConnectedToInternet) ,
255+ ( NSURLErrorDomain . self, NSURLErrorDataNotAllowed) ,
256+ ( NSPOSIXErrorDomain . self, Int ( ECONNABORTED) ) ,
257+ ( NSPOSIXErrorDomain . self, 57 ) :
253258 self . subject. send ( . error( WebSocketClient . Error. connectionLost) )
254259 Task { [ weak self] in
255260 await self ? . networkMonitor. updateState ( . offline)
@@ -283,11 +288,11 @@ extension WebSocketClient {
283288 }
284289
285290 switch stateChange {
286- case ( . online, . offline) :
287- log. debug ( " [WebSocketClient] NetworkMonitor - Device went offline " )
291+ case ( . online, . offline) , ( . none , . offline ) , ( . online , . none ) :
292+ log. debug ( " [WebSocketClient] NetworkMonitor - Device went offline or network status became unknown " )
288293 self . connection? . cancel ( with: . invalid, reason: nil )
289294 self . subject. send ( . disconnected( . invalid, nil ) )
290- case ( . offline, . online) :
295+ case ( . offline, . online) , ( . none , . online ) :
291296 log. debug ( " [WebSocketClient] NetworkMonitor - Device back online " )
292297 await self . createConnectionAndRead ( )
293298 default :
@@ -335,13 +340,19 @@ extension WebSocketClient {
335340 }
336341
337342 switch closeCode {
338- case . internalServerError:
343+ case . internalServerError,
344+ . abnormalClosure,
345+ . invalid,
346+ . policyViolation:
347+ log. debug ( " [WebSocketClient] Retrying on closeCode: \( closeCode) " )
339348 let delayInMs = await retryWithJitter. next ( )
340349 Task { [ weak self] in
341350 try await Task . sleep ( nanoseconds: UInt64 ( delayInMs) * 1_000_000 )
342351 await self ? . createConnectionAndRead ( )
343352 }
344- default : break
353+ default :
354+ log. debug ( " [WebSocketClient] Not retrying for closeCode: \( closeCode) " )
355+ break
345356 }
346357
347358 }
0 commit comments