diff --git a/packages/lib/link/connectors.js b/packages/lib/link/connectors.js index e2aacdf7..dc7bc6a3 100644 --- a/packages/lib/link/connectors.js +++ b/packages/lib/link/connectors.js @@ -73,7 +73,12 @@ class WebSocketBaseConnector extends events.EventEmitter { this._check("connected"); if (Date.now() - this._lastHeartbeat > 2000 * this._heartbeatInterval) { logger.verbose("Connector | closing after heartbeat timed out"); - this._socket.close(1008, "Heartbeat timeout"); + // eslint-disable-next-line node/no-process-env + if (process.env.APP_ENV === "browser") { + this._socket.close(4008, "Heartbeat timeout"); + } else { + this._socket.terminate(); + } } else { this._socket.send(JSON.stringify({ diff --git a/packages/master/src/WsServer.js b/packages/master/src/WsServer.js index ea08fd91..1e1de286 100644 --- a/packages/master/src/WsServer.js +++ b/packages/master/src/WsServer.js @@ -136,7 +136,7 @@ class WsServer { let timeoutId = setTimeout(() => { logger.verbose(`WsServer | closing ${req.socket.remoteAddress} after timing out on handshake`); wsRejectedConnectionsCounter.inc(); - socket.close(1008, "Handshake timeout"); + socket.terminate(); this.pendingSockets.delete(socket); }, 30*1000); diff --git a/packages/master/src/WsServerConnector.js b/packages/master/src/WsServerConnector.js index bd58003d..1db846cb 100644 --- a/packages/master/src/WsServerConnector.js +++ b/packages/master/src/WsServerConnector.js @@ -73,19 +73,10 @@ class WsServerConnector extends libLink.WebSocketBaseConnector { continue(socket, lastSeq) { // It's possible the previous connection hasn't closed yet due to a - // stale connection. If this is the case the connector will have to - // wait for the previous socket to close down before it can continue - // from a new socket, or there will be overlapping events from both. + // stale connection. Terminate it if so. if (this._state === "connected") { - this._socket.close(4003, "Session Hijacked"); - - // Correctly waiting for the connector to close and then - // handling all the edge cases like multiple continues happening - // in parallel or connections going stale is far too difficult. - // Kill the connection here and let the client reconnect later - // when the connector is not held up by an active connection. - socket.close(1013, "Session Busy"); - socket.terminate(); + this._socket.terminate(); + this._socket.once("close", () => this.continue(socket, lastSeq)); return; }