Example #1
0
        public SocketListener AddListener(string name, IPEndPoint localEndPoint, EncryptType encryptType, CompressionType compressionType, ICryptoService cryptoService, byte backLog, byte acceptThreads)
        {

            SocketListener listener = null;
            
            if (!Disposed)
            {
              
              listener = new SocketListener(this, name, localEndPoint, encryptType, compressionType, cryptoService, backLog, acceptThreads);
              AddCreator(listener);
              
            }
            
            return listener;
            
        }
        /// <summary>
        /// Accept callback!
        /// </summary>
        internal void BeginAcceptCallback(object state)
        {
            SocketAsyncEventArgs e = (SocketAsyncEventArgs)state;

            if (!Disposed)
            {
                SocketListener            listener       = null;
                System.Net.Sockets.Socket acceptedSocket = null;
                BaseSocketConnection      connection     = null;

                listener = (SocketListener)e.UserToken;

                if (e.SocketError == SocketError.Success)
                {
                    try
                    {
                        //----- Get accepted socket!
                        acceptedSocket = e.AcceptSocket;

                        //----- Adjust buffer size!
                        acceptedSocket.ReceiveBufferSize = Host.SocketBufferSize;
                        acceptedSocket.SendBufferSize    = Host.SocketBufferSize;

                        connection = new ServerSocketConnection(Host, listener, acceptedSocket);

                        //----- Initialize!
                        Host.AddSocketConnection(connection);
                        connection.Active = true;

                        Host.InitializeConnection(connection);
                    }
                    catch
                    {
                        if (connection != null)
                        {
                            if (Host != null)
                            {
                                Host.DisposeConnection(connection);
                                Host.RemoveSocketConnection(connection);
                            }

                            connection = null;
                        }
                    }
                }

                //---- Continue to accept!
                SocketAsyncEventArgs e2 = new SocketAsyncEventArgs();
                e2.UserToken  = listener;
                e2.Completed += new EventHandler <SocketAsyncEventArgs>(BeginAcceptCallbackAsync);

                if (!listener.Socket.AcceptAsync(e2))
                {
                    BeginAcceptCallbackAsync(this, e2);
                }
            }

            e.UserToken = null;
            e.Dispose();
            e = null;
        }