public void BeginAcceptClients() { Task.Run(async() => { while (true) { try { var ex = await listener.AcceptTcpClientAsync().ConfigureAwait(false); var s = new TcpClientEx(); s.AttachToSocket(ex.Client); //s.Client.SetupSocketTimeouts(new SocketSettings { NetworkClientKeepAliveInterval = 1000, NetworkClientKeepAliveTimeout = 1000 }); var remoteEndPoint = s.Client.RemoteEndPoint as IPEndPoint; if (remoteEndPoint != null) { logger.Trace($"Accepted a new client from {remoteEndPoint.Address}"); } logger.Notice($"Client connection accepted from {remoteEndPoint?.Address}:{remoteEndPoint?.Port}"); OnNewSocksClientConnected(s); } catch (Exception e) { logger.Error(e.Message); } } }); }