void Complete(SocketAsyncEventArgs e, bool completeSynchronously) { TransportBase transport = null; Exception exception = null; if (e.SocketError != SocketError.Success) { exception = new SocketException((int)e.SocketError); if (e.AcceptSocket != null) { e.AcceptSocket.Close(0); } } else { Fx.Assert(e.AcceptSocket != null, "Must have a valid socket accepted."); transport = new TcpTransport(e.AcceptSocket, this.transportSettings); transport.Open(); } e.Dispose(); this.callbackArgs.CompletedSynchronously = completeSynchronously; this.callbackArgs.Exception = exception; this.callbackArgs.Transport = transport; if (!completeSynchronously) { this.callbackArgs.CompletedCallback(this.callbackArgs); } }
bool HandleAcceptComplete(SocketAsyncEventArgs e, bool completedSynchronously) { if (e.SocketError == SocketError.Success) { TcpTransport transport = new TcpTransport(e.AcceptSocket, this.transportSettings); transport.Open(); TransportAsyncCallbackArgs args = new TransportAsyncCallbackArgs(); args.Transport = transport; args.CompletedSynchronously = completedSynchronously; this.OnTransportAccepted(args); return true; } else { e.Dispose(); this.TryClose(new SocketException((int)e.SocketError)); return false; } }