private void ProcessAccept(object sender, SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success && e.AcceptSocket != null && e.AcceptSocket.Connected) { e.AcceptSocket.Close(); _poolOfAcceptEventArgs.Push(e); StartAccept(); return; } ClientToken clientToken = _poolOfDataEventArgs.Pop(); clientToken.AcceptConnection(e, true); _poolOfAcceptEventArgs.Push(e); Interlocked.Increment(ref _numberOfAcceptedSockets); //Fire ClientConnected event if (ClientConnected != null) { if (CallClientConnectedAsync) { ClientConnected.BeginInvoke(this, clientToken.Id, r => ClientConnected.EndInvoke(r), null); } else { ClientConnected(this, clientToken.Id); } } StartReceive(clientToken); StartAccept(); }