Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 2c31183

Browse files
committed
Allow closing WebSocket without status code, closes #284
1 parent 216c1f4 commit 2c31183

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

packages/web-sockets/src/couple.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,13 @@ export async function coupleWebSocket(
4444
ws.send(e.data);
4545
});
4646
pair.addEventListener("close", (e) => {
47-
if (ws.readyState < StandardWebSocket.CLOSING) ws.close(e.code, e.reason);
47+
if (ws.readyState < StandardWebSocket.CLOSING) {
48+
if (e.code === 1005 /* No Status Received */) {
49+
ws.close();
50+
} else {
51+
ws.close(e.code, e.reason);
52+
}
53+
}
4854
});
4955

5056
if (ws.readyState === StandardWebSocket.CONNECTING) {

packages/web-sockets/test/couple.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,23 @@ test("coupleWebSocket: closes client socket on worker close", async (t) => {
192192
t.is(event.code, 1000);
193193
t.is(event.reason, "Test Closure");
194194
});
195+
test("coupleWebSocket: closes client socket on worker close with no close code", async (t) => {
196+
const [eventTrigger, eventPromise] = triggerPromise<{
197+
code: number;
198+
reason: string;
199+
}>();
200+
const server = await useServer(t, noop, (ws) => {
201+
ws.addEventListener("close", eventTrigger);
202+
});
203+
const ws = new StandardWebSocket(server.ws);
204+
const [client, worker] = Object.values(new WebSocketPair());
205+
worker.accept();
206+
await coupleWebSocket(ws, client);
207+
worker.close();
208+
209+
const event = await eventPromise;
210+
t.is(event.code, 1005);
211+
});
195212

196213
test("coupleWebSocket: accepts worker socket immediately if already open", async (t) => {
197214
const [eventTrigger, eventPromise] = triggerPromise<{ data: any }>();

0 commit comments

Comments
 (0)