diff --git a/SocketIOClientSwift/SocketEngine.swift b/SocketIOClientSwift/SocketEngine.swift index 3a1fc90..bec5e42 100644 --- a/SocketIOClientSwift/SocketEngine.swift +++ b/SocketIOClientSwift/SocketEngine.swift @@ -40,6 +40,7 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { private var fastUpgrade = false private var forcePolling = false private var forceWebsockets = false + private var gotPong = true private var pingTimer:NSTimer? private var postWait = [String]() private var _polling = true @@ -516,6 +517,8 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { } else if type == PacketType.NOOP { doPoll() } else if type == PacketType.PONG { + gotPong = true + // We should upgrade if message == "3probe" { upgradeTransport() @@ -558,6 +561,14 @@ public final class SocketEngine: NSObject, WebSocketDelegate, SocketLogClient { } func sendPing() { + //Server is not responding + if !gotPong { + pingTimer?.invalidate() + client?.engineDidClose("Ping timeout") + return + } + + gotPong = false write("", withType: PacketType.PING, withData: nil) } diff --git a/SocketIOClientSwift/SocketIOClient.swift b/SocketIOClientSwift/SocketIOClient.swift index 410f8f2..d03d638 100644 --- a/SocketIOClientSwift/SocketIOClient.swift +++ b/SocketIOClientSwift/SocketIOClient.swift @@ -359,7 +359,7 @@ public final class SocketIOClient: NSObject, SocketEngineClient, SocketLogClient _connecting = false if closed || !reconnects { - didDisconnect("Engine closed") + didDisconnect(reason) } else if !reconnecting { handleEvent("reconnect", data: [reason], isInternalMessage: true) tryReconnect()