Skip to content

Commit 0964af1

Browse files
authored
Fix websocket close event data (#22513)
Fixes: #22499
1 parent 4b70445 commit 0964af1

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

src/library_websocket.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ var LibraryWebSocket = {
217217
#endif
218218
var eventPtr = WS.getSocketEvent(socketId);
219219
{{{ makeSetValue('eventPtr', C_STRUCTS.EmscriptenWebSocketCloseEvent.wasClean, 'e.wasClean', 'i8') }}},
220-
{{{ makeSetValue('eventPtr', C_STRUCTS.EmscriptenWebSocketCloseEvent.wasClean, 'e.code', 'i16') }}},
220+
{{{ makeSetValue('eventPtr', C_STRUCTS.EmscriptenWebSocketCloseEvent.code, 'e.code', 'i16') }}},
221221
stringToUTF8(e.reason, eventPtr + {{{ C_STRUCTS.EmscriptenWebSocketCloseEvent.reason }}}, 512);
222222
{{{ makeDynCall('iipp', 'callbackFunc') }}}(0/*TODO*/, eventPtr, userData);
223223
}

test/websocket/test_websocket_send.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@ EM_BOOL WebSocketOpen(int eventType, const EmscriptenWebSocketOpenEvent *e, void
2121

2222
EM_BOOL WebSocketClose(int eventType, const EmscriptenWebSocketCloseEvent *e, void *userData) {
2323
printf("close(socket=%d, eventType=%d, wasClean=%d, code=%d, reason=%s, userData=%p)\n", e->socket, eventType, e->wasClean, e->code, e->reason, userData);
24+
assert(e->wasClean == 1);
25+
assert(e->code == 1005 /* No Status Rcvd */);
26+
emscripten_websocket_delete(e->socket);
27+
if (e->socket == sock1) {
28+
sock1 = 0;
29+
} else if (e->socket == sock2) {
30+
sock2 = 0;
31+
}
32+
// Once both sockets have been closed we are done.
33+
if (!sock1 && !sock2) {
34+
emscripten_force_exit(0);
35+
}
2436
return 0;
2537
}
2638

@@ -49,17 +61,6 @@ EM_BOOL WebSocketMessage(int eventType, const EmscriptenWebSocketMessageEvent *e
4961
}
5062
printf("\n");
5163
emscripten_websocket_close(e->socket, 0, 0);
52-
emscripten_websocket_delete(e->socket);
53-
if (e->socket == sock1) {
54-
sock1 = 0;
55-
} else {
56-
sock2 = 0;
57-
}
58-
// Once both sockets are closed we are done.
59-
if (!sock1 && !sock2) {
60-
emscripten_force_exit(0);
61-
}
62-
6364
return 0;
6465
}
6566

0 commit comments

Comments
 (0)