Пример #1
0
        /// <summary>
        /// Listens for incoming connection requests on its own thread.
        /// </summary>
        private async void ListenTCP()
        {
            Parent.ChangeState(State.Listening);
            socket.Listen(Parent.MaxPendingConnections);
            while (Parent.State == State.Listening)
            {
                try
                {
                    Socket client = await socket.AcceptAsync();

                    if (client != null)
                    {
                        var args = Parent.OnConnectionRequest(Parent, new ConnectionRequestEventArgs(client));
                        if (args.Cancel)
                        {
                            args.Client.Disconnect(false);
                            args.Client.Close();
                        }
                    }
                }
                catch (ObjectDisposedException ex)
                {
                    if (Parent.State != State.Closed)
                    {
                        Parent.OnErrorReceived(Parent, ex.AsEventArgs());
                        Close();
                    }
                }
                catch (Exception ex)
                {
                    Parent.OnErrorReceived(Parent, ex.AsEventArgs());
                    Close();
                }
            }
        }