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; }