diff --git a/CryptoExchange.Net/Clients/SocketApiClient.cs b/CryptoExchange.Net/Clients/SocketApiClient.cs
index 70f862b8..dfed6d87 100644
--- a/CryptoExchange.Net/Clients/SocketApiClient.cs
+++ b/CryptoExchange.Net/Clients/SocketApiClient.cs
@@ -533,9 +533,6 @@ namespace CryptoExchange.Net.Clients
if (!connectResult.Success)
return connectResult;
- if (ClientOptions.DelayAfterConnect != TimeSpan.Zero)
- await Task.Delay(ClientOptions.DelayAfterConnect).ConfigureAwait(false);
-
if (!authenticated || socket.Authenticated)
return CallResult.Ok();
@@ -862,7 +859,7 @@ namespace CryptoExchange.Net.Clients
RateLimitAdmissionCallbackRequest = () => AdmissionOverride.Value,
Proxy = ClientOptions.Proxy,
Timeout = ApiOptions.SocketNoDataTimeout ?? ClientOptions.SocketNoDataTimeout,
- ReceiveBufferSize = ClientOptions.ReceiveBufferSize,
+ ReceiveBufferSize = ClientOptions.ReceiveBufferSize
};
///
diff --git a/CryptoExchange.Net/Objects/Options/SocketApiOptions.cs b/CryptoExchange.Net/Objects/Options/SocketApiOptions.cs
index 88af5edf..64188e31 100644
--- a/CryptoExchange.Net/Objects/Options/SocketApiOptions.cs
+++ b/CryptoExchange.Net/Objects/Options/SocketApiOptions.cs
@@ -19,6 +19,11 @@ namespace CryptoExchange.Net.Objects.Options
///
public int? MaxSocketConnections { get; set; }
+ ///
+ /// The time to wait after connecting a socket before sending messages. Can be used for API's which will rate limit if you subscribe directly after connecting.
+ ///
+ public TimeSpan? DelayAfterConnect { get; set; }
+
///
/// Set the values of this options on the target options
///
@@ -28,6 +33,7 @@ namespace CryptoExchange.Net.Objects.Options
item.SocketNoDataTimeout = SocketNoDataTimeout;
item.AutoTimestamp = AutoTimestamp;
item.MaxSocketConnections = MaxSocketConnections;
+ item.DelayAfterConnect = DelayAfterConnect;
return item;
}
}
diff --git a/CryptoExchange.Net/Sockets/Default/SocketConnection.cs b/CryptoExchange.Net/Sockets/Default/SocketConnection.cs
index 5a593fe9..99b73736 100644
--- a/CryptoExchange.Net/Sockets/Default/SocketConnection.cs
+++ b/CryptoExchange.Net/Sockets/Default/SocketConnection.cs
@@ -424,6 +424,9 @@ namespace CryptoExchange.Net.Sockets.Default
{
try
{
+ if ((ApiClient.ApiOptions.DelayAfterConnect ?? ApiClient.ClientOptions.DelayAfterConnect) != TimeSpan.Zero)
+ await Task.Delay(ApiClient.ApiOptions.DelayAfterConnect ?? ApiClient.ClientOptions.DelayAfterConnect).ConfigureAwait(false);
+
var reconnectSuccessful = await ProcessReconnectAsync().ConfigureAwait(false);
if (!reconnectSuccessful.Success)
{
@@ -616,7 +619,17 @@ namespace CryptoExchange.Net.Sockets.Default
/// Connect the websocket
///
///
- public async Task ConnectAsync(CancellationToken ct) => await _socket.ConnectAsync(ct).ConfigureAwait(false);
+ public async Task ConnectAsync(CancellationToken ct)
+ {
+ var result = await _socket.ConnectAsync(ct).ConfigureAwait(false);
+ if (!result.Success)
+ return result;
+
+ if ((ApiClient.ApiOptions.DelayAfterConnect ?? ApiClient.ClientOptions.DelayAfterConnect) != TimeSpan.Zero)
+ await Task.Delay(ApiClient.ApiOptions.DelayAfterConnect ?? ApiClient.ClientOptions.DelayAfterConnect).ConfigureAwait(false);
+
+ return result;
+ }
///
/// Retrieve the underlying socket