From c361bc691f510b96f8909c5e6c62a4635d50275c Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Tue, 2 Mar 2021 09:02:42 +0100 Subject: [PATCH] feat: listen to the "offline" event The connection will be closed once the "offline" event is emitted by the browser, in order not to wait for the heartbeat mechanism to detect the disconnection. Reference: https://developer.mozilla.org/en-US/docs/Web/API/Window/offline_event Related: https://github.com/socketio/socket.io-client/issues/1433 --- lib/socket.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/socket.js b/lib/socket.js index e8781d37b..ec283d393 100644 --- a/lib/socket.js +++ b/lib/socket.js @@ -102,6 +102,12 @@ class Socket extends Emitter { }, false ); + if (this.hostname !== "localhost") { + this.offlineEventListener = () => { + this.onClose("transport close"); + }; + addEventListener("offline", this.offlineEventListener, false); + } } this.open(); @@ -622,6 +628,10 @@ class Socket extends Emitter { // ignore further transport communication this.transport.removeAllListeners(); + if (typeof removeEventListener === "function") { + removeEventListener("offline", this.offlineEventListener, false); + } + // set ready state this.readyState = "closed";