diff --git a/CryptoExchange.Net/Objects/ExchangeOptions.cs b/CryptoExchange.Net/Objects/ExchangeOptions.cs
index 7d3e526..eef3446 100644
--- a/CryptoExchange.Net/Objects/ExchangeOptions.cs
+++ b/CryptoExchange.Net/Objects/ExchangeOptions.cs
@@ -78,6 +78,11 @@ namespace CryptoExchange.Net.Objects
public class SocketClientOptions: ExchangeOptions
{
+ ///
+ /// Whether or not the socket should automatically reconnect when losing connection
+ ///
+ public bool AutoReconnect { get; set; } = true;
+
///
/// Time to wait between reconnect attempts
///
@@ -91,6 +96,7 @@ namespace CryptoExchange.Net.Objects
LogVerbosity = LogVerbosity,
Proxy = Proxy,
LogWriters = LogWriters,
+ AutoReconnect = AutoReconnect,
ReconnectInterval = ReconnectInterval
};
diff --git a/CryptoExchange.Net/SocketClient.cs b/CryptoExchange.Net/SocketClient.cs
index 49cf8c1..d1342b7 100644
--- a/CryptoExchange.Net/SocketClient.cs
+++ b/CryptoExchange.Net/SocketClient.cs
@@ -25,6 +25,7 @@ namespace CryptoExchange.Net
protected List sockets = new List();
public TimeSpan ReconnectInterval { get; private set; }
+ public bool AutoReconnect { get; private set; }
protected Func dataInterpreter;
protected const string DataHandlerName = "DataHandler";
@@ -48,6 +49,7 @@ namespace CryptoExchange.Net
/// Options
protected void Configure(SocketClientOptions exchangeOptions)
{
+ AutoReconnect = exchangeOptions.AutoReconnect;
ReconnectInterval = exchangeOptions.ReconnectInterval;
}
@@ -168,7 +170,7 @@ namespace CryptoExchange.Net
/// The socket that was closed
protected virtual void SocketOnClose(IWebsocket socket)
{
- if (socket.ShouldReconnect)
+ if (AutoReconnect && socket.ShouldReconnect)
{
if (socket.Reconnecting)
return; // Already reconnecting
@@ -181,6 +183,13 @@ namespace CryptoExchange.Net
while (socket.ShouldReconnect)
{
Thread.Sleep(ReconnectInterval);
+ if (!socket.ShouldReconnect)
+ {
+ // Should reconnect changed to false while waiting to reconnect
+ socket.Reconnecting = false;
+ return;
+ }
+
socket.Reset();
if (!socket.Connect().Result)
{