From 89cbd85875173af9704f52204f63c59ce6810d79 Mon Sep 17 00:00:00 2001 From: Jkorf Date: Mon, 8 Jun 2026 11:22:53 +0200 Subject: [PATCH] Fixed timing issue causing websocket connection to possible loop in error state --- .../Sockets/Default/CryptoExchangeWebSocketClient.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CryptoExchange.Net/Sockets/Default/CryptoExchangeWebSocketClient.cs b/CryptoExchange.Net/Sockets/Default/CryptoExchangeWebSocketClient.cs index b0303a85..cbd90937 100644 --- a/CryptoExchange.Net/Sockets/Default/CryptoExchangeWebSocketClient.cs +++ b/CryptoExchange.Net/Sockets/Default/CryptoExchangeWebSocketClient.cs @@ -584,11 +584,12 @@ namespace CryptoExchange.Net.Sockets.Default { byte[] rentedBuffer = _receiveBufferPool.Rent(_receiveBufferSize); var buffer = new ArraySegment(rentedBuffer); + var broken = false; try { while (true) { - if (_ctsSource.IsCancellationRequested) + if (_ctsSource.IsCancellationRequested || broken) break; MemoryStream? multipartStream = null; @@ -622,6 +623,8 @@ namespace CryptoExchange.Net.Sockets.Default if (_closeTask?.IsCompleted != false) _closeTask = CloseInternalAsync(); + + broken = true; break; } @@ -735,11 +738,12 @@ namespace CryptoExchange.Net.Sockets.Default { byte[] rentedBuffer = _receiveBufferPool.Rent(_receiveBufferSize); var buffer = new Memory(rentedBuffer); + var broken = false; try { while (true) { - if (_ctsSource.IsCancellationRequested) + if (_ctsSource.IsCancellationRequested || broken) break; MemoryStream? multipartStream = null; @@ -773,6 +777,8 @@ namespace CryptoExchange.Net.Sockets.Default if (_closeTask?.IsCompleted != false) _closeTask = CloseInternalAsync(); + + broken = true; break; }