@@ -248,8 +248,13 @@ extension WebSocketClient: URLSessionWebSocketDelegate {
248
248
249
249
let nsError = error as NSError
250
250
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 ) :
253
258
self . subject. send ( . error( WebSocketClient . Error. connectionLost) )
254
259
Task { [ weak self] in
255
260
await self ? . networkMonitor. updateState ( . offline)
@@ -283,11 +288,11 @@ extension WebSocketClient {
283
288
}
284
289
285
290
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 " )
288
293
self . connection? . cancel ( with: . invalid, reason: nil )
289
294
self . subject. send ( . disconnected( . invalid, nil ) )
290
- case ( . offline, . online) :
295
+ case ( . offline, . online) , ( . none , . online ) :
291
296
log. debug ( " [WebSocketClient] NetworkMonitor - Device back online " )
292
297
await self . createConnectionAndRead ( )
293
298
default :
@@ -335,13 +340,19 @@ extension WebSocketClient {
335
340
}
336
341
337
342
switch closeCode {
338
- case . internalServerError:
343
+ case . internalServerError,
344
+ . abnormalClosure,
345
+ . invalid,
346
+ . policyViolation:
347
+ log. debug ( " [WebSocketClient] Retrying on closeCode: \( closeCode) " )
339
348
let delayInMs = await retryWithJitter. next ( )
340
349
Task { [ weak self] in
341
350
try await Task . sleep ( nanoseconds: UInt64 ( delayInMs) * 1_000_000 )
342
351
await self ? . createConnectionAndRead ( )
343
352
}
344
- default : break
353
+ default :
354
+ log. debug ( " [WebSocketClient] Not retrying for closeCode: \( closeCode) " )
355
+ break
345
356
}
346
357
347
358
}
0 commit comments