From bc4b05cc6afa58227bfdd2042cad243db0056b91 Mon Sep 17 00:00:00 2001 From: Camille Moussu <66134347+Eriikah@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:20:40 +0100 Subject: [PATCH] [#486] removed double retry on connect timeout (#529) --- src/websocket/WebSocketGate.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/websocket/WebSocketGate.tsx b/src/websocket/WebSocketGate.tsx index 024c5a8..fbb5030 100644 --- a/src/websocket/WebSocketGate.tsx +++ b/src/websocket/WebSocketGate.tsx @@ -26,6 +26,7 @@ export function WebSocketGate() { const pingCleanupRef = useRef(null); const connectTimeoutRef = useRef(null); + const didConnectTimeoutRef = useRef(false); const CONNECT_TIMEOUT_MS = 10_000; const hadSocketBeforeRef = useRef(false); @@ -139,6 +140,9 @@ export function WebSocketGate() { connectTimeoutRef.current = null; } + // Reset timeout marker on successful connection + didConnectTimeoutRef.current = false; + if (hadSocketBeforeRef.current) { justReconnectedRef.current = true; setWebSocketStatus(t("websocket.reconnected")); @@ -177,9 +181,14 @@ export function WebSocketGate() { const connect = async () => { if (isConnectingRef.current || isSocketOpen) return; isConnectingRef.current = true; + didConnectTimeoutRef.current = false; connectTimeoutRef.current = setTimeout(() => { console.warn("WebSocket connection attempt timed out"); + didConnectTimeoutRef.current = true; + abortController.abort(); + connectTimeoutRef.current = null; + isConnectingRef.current = false; cleanup(); scheduleReconnect(); @@ -200,7 +209,10 @@ export function WebSocketGate() { connectTimeoutRef.current = null; } - scheduleReconnect(); + // Only schedule reconnect if the timeout handler hasn't already done so + if (!didConnectTimeoutRef.current) { + scheduleReconnect(); + } } finally { isConnectingRef.current = false; }