From a4196480ce1d40777d33e0ba4c9aea09b18e6fc0 Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Sun, 27 Sep 2026 01:21:45 -0400 Subject: [PATCH] A socket's own error closes that socket, not the server A message over the size limit or a malformed frame raised an error on the socket, which had no listener, and Node ended the process: one message from anyone could take the server down until systemd restarted it. The socket is terminated instead. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG --- packages/server/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index 0187144..71c72c5 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -738,6 +738,8 @@ wss.on("connection", (socket, req) => { roomsCreated: 0, lastCatchUpAt: 0, hotseatReports: 0, }; sessions.add(session); + // A socket's own error (a frame over the limit, a malformed one) closes that socket, never the server. + socket.on("error", () => socket.terminate()); send(socket, { type: "welcome", game: "wizwar" }); socket.on("close", () => {