private void ConnectCallback(IAsyncResult ar) { if (_closed) { return; } try { ServerTimer timer = (ServerTimer)ar.AsyncState; server = timer.Server; timer.Elapsed -= destConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); // Complete the connection. remote?.EndConnectDest(ar); _destConnected = true; if (_config.isVerboseLogging) { Logging.Info($"Socket connected to ss server: {server.FriendlyName()}"); } var latency = DateTime.Now - _startConnectTime; IStrategy strategy = controller.GetCurrentStrategy(); strategy?.UpdateLatency(server, latency); _tcprelay.UpdateLatency(server, latency); StartPipe(); } catch (ArgumentException) { } catch (Exception e) { if (server != null) { IStrategy strategy = controller.GetCurrentStrategy(); strategy?.SetFailure(server); } Logging.LogUsefulException(e); RetryConnect(); } }
private void ConnectCallback(IAsyncResult ar) { if (_closed) { return; } try { AsyncSession <ServerTimer> session = (AsyncSession <ServerTimer>)ar.AsyncState; ServerTimer timer = session.State; _server = timer.Server; timer.Elapsed -= DestConnectTimer_Elapsed; timer.Enabled = false; timer.Dispose(); IProxy remote = session.Remote; // Complete the connection. remote.EndConnectDest(ar); _destConnected = true; Logger.Debug($"Socket connected to ss server: {_server.ToString()}"); TimeSpan latency = DateTime.Now - _startConnectTime; OnConnected?.Invoke(this, new SSTCPConnectedEventArgs(_server, latency)); StartPipe(session); } catch (ArgumentException) { } catch (Exception e) { if (_server != null) { OnFailed?.Invoke(this, new SSRelayEventArgs(_server)); } ErrorClose(e); } }