Fix websocket reconnect race
studio-mac · ~/src/signal-bus
Codex · gpt-5.3-codex
I'll trace connect() vs onclose and serialize reconnects behind a generation token so a stale socket can't reopen after a newer handshake.
async function connect() {
socket = new WebSocket(url)
socket.onclose = () => setTimeout(connect, backoff())
}+ let gen = 0async function connect() {+ const my = ++gen+ socket?.close()socket = new WebSocket(url)- socket.onclose = () => setTimeout(connect, backoff())+ socket.onclose = () => {+ if (my === gen) setTimeout(connect, backoff())+ }}
$ pnpm test src/ws/client.test.ts