From 42412588256d23d8c792b38ec5c160f542e8705b Mon Sep 17 00:00:00 2001 From: Stevan Freeborn <65925598+StevanFreeborn@users.noreply.github.com> Date: Tue, 5 May 2026 21:32:48 -0500 Subject: [PATCH] fix: handle overflowing int max value and reset socket on failure --- .../Discord/Gateway/DiscordGatewayClient.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs b/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs index 06ea753..e51bf42 100644 --- a/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs +++ b/src/src/StevesBot.Worker/Discord/Gateway/DiscordGatewayClient.cs @@ -70,6 +70,8 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient await SetGatewayUrlAsync(gatewayUrl, cancellationToken); } + _webSocket?.Dispose(); + await SetWebSocketAsync(_webSocketFactory.Create(), cancellationToken); await ConnectWithGatewayUrlAsync(cancellationToken); @@ -685,9 +687,10 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient await _webSocket.ConnectAsync(uri, cancellationToken); connected = true; } - catch (Exception e) when (e is WebSocketException) + catch (Exception e) { - var currentDelay = (int)(delay.TotalMilliseconds * Math.Pow(2, attempts)); + var calculatedDelay = delay.TotalMilliseconds * Math.Pow(2, attempts); + var currentDelay = (int)Math.Min(calculatedDelay, int.MaxValue); _logger.LogWarning( e, @@ -700,6 +703,9 @@ internal sealed class DiscordGatewayClient : IDiscordGatewayClient await Task.Delay(currentDelay, cancellationToken); attempts++; + + _webSocket.Dispose(); + await SetWebSocketAsync(_webSocketFactory.Create(), cancellationToken); } } }