private void AcceptProcess(SocketAsyncEventArgs e) { if (OnBeforeAccept(e.AcceptSocket)) { Interlocked.Increment(ref _nextSessionId); var c = new Client(_nextSessionId, this, e.AcceptSocket); c.Start(); AddClient(c); Logger.Log(Logger.LogLevel.Info, "Clients online: {0}", Clients.Count); } else { if (e.AcceptSocket.Connected) e.AcceptSocket.Shutdown(SocketShutdown.Both); e.AcceptSocket.Close(); } _acceptEventArgs.AcceptSocket = null; Interlocked.Exchange(ref _asyncAccepts, 0); NetworkSignal.Set(); }