Exemplo n.º 1
0
        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();
        }