From 0f04f751e1f99827d556391a38239d917cae5bb1 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 1 May 2023 17:59:48 -0600 Subject: [PATCH 1/2] Disconnect websocket clients on error --- backend/src/api/websocket-handler.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 3a444701f..cdbf87719 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -96,7 +96,10 @@ class WebsocketHandler { this.wss.on('connection', (client: WebSocket) => { this.numConnected++; - client.on('error', logger.info); + client.on('error', (e) => { + logger.info('websocket client error: ' + (e instanceof Error ? e.message : e)); + client.close(); + }); client.on('close', () => { this.numDisconnected++; }); @@ -283,6 +286,7 @@ class WebsocketHandler { } } catch (e) { logger.debug('Error parsing websocket message: ' + (e instanceof Error ? e.message : e)); + client.close(); } }); }); From 652100f774813894b19af4444bcc87ba3bb8a3ea Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 25 Nov 2023 09:02:27 +0000 Subject: [PATCH 2/2] More verbose websocket error logs --- backend/src/api/websocket-handler.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index cdbf87719..b082573f1 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -94,10 +94,11 @@ class WebsocketHandler { throw new Error('WebSocket.Server is not set'); } - this.wss.on('connection', (client: WebSocket) => { + this.wss.on('connection', (client: WebSocket, req) => { this.numConnected++; + client['remoteAddress'] = req.headers['x-forwarded-for'] || req.socket?.remoteAddress || 'unknown'; client.on('error', (e) => { - logger.info('websocket client error: ' + (e instanceof Error ? e.message : e)); + logger.info(`websocket client error from ${client['remoteAddress']}: ` + (e instanceof Error ? e.message : e)); client.close(); }); client.on('close', () => { @@ -285,7 +286,7 @@ class WebsocketHandler { client.send(serializedResponse); } } catch (e) { - logger.debug('Error parsing websocket message: ' + (e instanceof Error ? e.message : e)); + logger.debug(`Error parsing websocket message from ${client['remoteAddress']}: ` + (e instanceof Error ? e.message : e)); client.close(); } });