private void HandleAcceptComplete(IDuplexSessionChannel channel) { Exception exception = null; bool flag = false; this.inputChannelAcceptor.PrepareChannel(channel); IAsyncResult result = null; try { result = channel.BeginOpen(this.idleTimeout, this.onOpenInnerChannel, channel); flag = true; } catch (CommunicationException exception2) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception2, TraceEventType.Information); } } catch (TimeoutException exception3) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception3, TraceEventType.Information); } } catch (Exception exception4) { if (Fx.IsFatal(exception4)) { throw; } exception = exception4; } finally { if (!flag && (channel != null)) { channel.Abort(); } } if (flag) { if (result.CompletedSynchronously) { this.CompleteOpen(channel, result); } } else if (exception != null) { this.inputChannelAcceptor.Enqueue(exception, null); } }
protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state) { return(innerChannel.BeginOpen(timeout, callback, state)); }