private void Accept(SaeaAwaiter awaiter, SocketError socketError) { if (socketError == SocketError.Success) { var acceptedSocket = awaiter.Saea.AcceptSocket; var session = SessionPool.Take(); session.Attach(acceptedSocket); this.TcpSocketSaeaSessions.Add(session); this.CompletetionNotify?.Invoke(TcpSocketCompletionNotify.OnConnected, session); session.StartProcess(); } else { LogHelper.WriteLog("server_accept-fail"); } if (!this._isRuning) { return; } awaiter.Saea.AcceptSocket = null; SaeaExHelper.AcceptAsync(_listener, awaiter, Accept); }
public void Listen(IPEndPoint ipendPoint) { this._isRuning = true; _listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); SetSocketOptions(); _listener.Bind(ipendPoint); _listener.Listen(_config.PendingConnectionBacklog); var awaiter = HandlerSaeaPool.Take(); SaeaExHelper.AcceptAsync(_listener, awaiter, Accept); }