Skip to content

Commit f7ccf33

Browse files
authored
Merge pull request socketio#1034 from OneSman7/Fix-loosing-packets-on-websocket-connect-failure
Fixed loosing POST packets on web socket connection failure
2 parents d07441e + feb476c commit f7ccf33

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

Source/SocketIO/Engine/SocketEngine.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,7 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
359359
///
360360
/// **You shouldn't call this directly**
361361
open func doFastUpgrade() {
362+
362363
if waitingForPoll {
363364
DefaultSocketLogger.Logger.error("Outstanding poll when switched to WebSockets," +
364365
"we'll probably disconnect soon. You should report this.", type: SocketEngine.logType)
@@ -371,6 +372,12 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
371372
fastUpgrade = false
372373
probing = false
373374
flushProbeWait()
375+
376+
// Need to flush postWait to socket since it connected successfully
377+
// (moved from flushProbeWait() since it is also called on connected failure)
378+
if !postWait.isEmpty {
379+
flushWaitingForPostToWebSocket()
380+
}
374381
}
375382

376383
private func flushProbeWait() {
@@ -381,10 +388,6 @@ open class SocketEngine : NSObject, URLSessionDelegate, SocketEnginePollable, So
381388
}
382389

383390
probeWait.removeAll(keepingCapacity: false)
384-
385-
if postWait.count != 0 {
386-
flushWaitingForPostToWebSocket()
387-
}
388391
}
389392

390393
/// Causes any packets that were waiting for POSTing to be sent through the WebSocket. This happens because when

Source/SocketIO/Manager/SocketManager.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,11 @@ open class SocketManager : NSObject, SocketManagerSpec, SocketParsable, SocketDa
168168
DefaultSocketLogger.Logger.log("Adding engine", type: SocketManager.logType)
169169

170170
engine?.engineQueue.sync {
171+
171172
self.engine?.client = nil
173+
174+
// Close old engine so it will not leak because of URLSession if in polling mode
175+
self.engine?.disconnect(reason: "Adding new engine")
172176
}
173177

174178
engine = SocketEngine(client: self, url: socketURL, config: config)

0 commit comments

Comments
 (0)