From ad68be447a5d1fb7afa4580c560c4aea07187c75 Mon Sep 17 00:00:00 2001 From: Daniel Weber Date: Thu, 14 Mar 2024 23:16:07 +0100 Subject: [PATCH 1/2] Throw an ObjectDisposedException on WebSocketMessageType.Close. --- src/Providers.Core/Extensions/ClientWebSocketExtensions.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs b/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs index be7aefaac0..77d14b349e 100644 --- a/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs +++ b/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs @@ -22,6 +22,9 @@ public static async Task> ReceiveAsync(this ClientWebSocket cl var result = await client.ReceiveAsync(bytes.Memory[read..], ct); + if (result.MessageType == WebSocketMessageType.Close) + throw new ObjectDisposedException(client.GetType().Name); + read += result.Count; if (result.EndOfMessage) From e9f10e9cec927bee7e420a7e64857889a853d801 Mon Sep 17 00:00:00 2001 From: Daniel Weber Date: Thu, 14 Mar 2024 23:20:52 +0100 Subject: [PATCH 2/2] Loop style. --- .../Extensions/ClientWebSocketExtensions.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs b/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs index 77d14b349e..922def3122 100644 --- a/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs +++ b/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs @@ -13,23 +13,23 @@ public static async Task> ReceiveAsync(this ClientWebSocket cl try { - while (true) + ValueWebSocketReceiveResult result; + + do { ct.ThrowIfCancellationRequested(); if (read == bytes.Memory.Length) bytes = bytes.Double(); - var result = await client.ReceiveAsync(bytes.Memory[read..], ct); + result = await client.ReceiveAsync(bytes.Memory[read..], ct); if (result.MessageType == WebSocketMessageType.Close) throw new ObjectDisposedException(client.GetType().Name); read += result.Count; - - if (result.EndOfMessage) - break; } + while (!result.EndOfMessage); return bytes[..read]; }