@@ -248,13 +248,18 @@ 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) , // connection lost (-1005)
252+ ( NSURLErrorDomain . self, NSURLErrorCannotConnectToHost) , // -1004 should be -1001, but -1004 is CannotConnectToHost
253+ ( NSURLErrorDomain . self, NSURLErrorTimedOut) , // -1001
254+ ( NSURLErrorDomain . self, NSURLErrorNotConnectedToInternet) , // -1009
255+ ( NSURLErrorDomain . self, NSURLErrorDataNotAllowed) , // -1020
256+ ( NSPOSIXErrorDomain . self, Int ( ECONNABORTED) ) , // background to foreground
257+ ( NSPOSIXErrorDomain . self, 57 ) : // Socket is not connected (ENOTCONN)
253258 self . subject. send ( . error( WebSocketClient . Error. connectionLost) )
254259 Task { [ weak self] in
255260 await self ? . networkMonitor. updateState ( . offline)
256261 }
257- case ( NSURLErrorDomain . self, NSURLErrorCancelled) :
262+ case ( NSURLErrorDomain . self, NSURLErrorCancelled) : // -999
258263 log. debug ( " Skipping NSURLErrorCancelled error " )
259264 self . subject. send ( . error( WebSocketClient . Error. connectionCancelled) )
260265 default :
@@ -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