From 1b4ca864ed8a26571e317daf3f26aa46bcd12543 Mon Sep 17 00:00:00 2001 From: Jkorf Date: Wed, 22 Sep 2021 14:12:49 +0200 Subject: [PATCH] Fixed websocket not reconnecting on .NetFramework when connection unexpectedly gets closed --- CryptoExchange.Net/CryptoExchange.Net.xml | 143 ++++++++++++++++++ .../Sockets/CryptoExchangeWebSocketClient.cs | 14 ++ 2 files changed, 157 insertions(+) diff --git a/CryptoExchange.Net/CryptoExchange.Net.xml b/CryptoExchange.Net/CryptoExchange.Net.xml index f5927ab..cdc0cd0 100644 --- a/CryptoExchange.Net/CryptoExchange.Net.xml +++ b/CryptoExchange.Net/CryptoExchange.Net.xml @@ -3962,5 +3962,148 @@ + + + Specifies that is allowed as an input even if the + corresponding type disallows it. + + + + + Initializes a new instance of the class. + + + + + Specifies that is disallowed as an input even if the + corresponding type allows it. + + + + + Initializes a new instance of the class. + + + + + Specifies that a method that will never return under any circumstance. + + + + + Initializes a new instance of the class. + + + + + Specifies that the method will not return if the associated + parameter is passed the specified value. + + + + + Gets the condition parameter value. + Code after the method is considered unreachable by diagnostics if the argument + to the associated parameter matches this value. + + + + + Initializes a new instance of the + class with the specified parameter value. + + + The condition parameter value. + Code after the method is considered unreachable by diagnostics if the argument + to the associated parameter matches this value. + + + + + Specifies that an output may be even if the + corresponding type disallows it. + + + + + Initializes a new instance of the class. + + + + + Specifies that when a method returns , + the parameter may be even if the corresponding type disallows it. + + + + + Gets the return value condition. + If the method returns this value, the associated parameter may be . + + + + + Initializes the attribute with the specified return value condition. + + + The return value condition. + If the method returns this value, the associated parameter may be . + + + + + Specifies that an output is not even if the + corresponding type allows it. + + + + + Initializes a new instance of the class. + + + + + Specifies that the output will be non- if the + named parameter is non-. + + + + + Gets the associated parameter name. + The output will be non- if the argument to the + parameter specified is non-. + + + + + Initializes the attribute with the associated parameter name. + + + The associated parameter name. + The output will be non- if the argument to the + parameter specified is non-. + + + + + Specifies that when a method returns , + the parameter will not be even if the corresponding type allows it. + + + + + Gets the return value condition. + If the method returns this value, the associated parameter will not be . + + + + + Initializes the attribute with the specified return value condition. + + + The return value condition. + If the method returns this value, the associated parameter will not be . + + diff --git a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs index f511880..29f8d11 100644 --- a/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs +++ b/CryptoExchange.Net/Sockets/CryptoExchangeWebSocketClient.cs @@ -384,6 +384,13 @@ namespace CryptoExchange.Net.Sockets // cancelled break; } + catch (IOException ioe) + { + // Connection closed unexpectedly, .NET framework + Handle(errorHandlers, ioe); + await CloseInternalAsync(false, true).ConfigureAwait(false); + break; + } catch (WebSocketException wse) { // Connection closed unexpectedly @@ -432,6 +439,13 @@ namespace CryptoExchange.Net.Sockets await CloseInternalAsync(true, false).ConfigureAwait(false); break; } + catch (IOException ioe) + { + // Connection closed unexpectedly, .NET framework + Handle(errorHandlers, ioe); + await CloseInternalAsync(true, false).ConfigureAwait(false); + break; + } if (receiveResult.MessageType == WebSocketMessageType.Close) {