diff --git a/src/Renci.SshNet/ForwardedPortDynamic.NET.cs b/src/Renci.SshNet/ForwardedPortDynamic.NET.cs index ffb007aa..6f626a16 100644 --- a/src/Renci.SshNet/ForwardedPortDynamic.NET.cs +++ b/src/Renci.SshNet/ForwardedPortDynamic.NET.cs @@ -17,6 +17,8 @@ namespace Renci.SshNet partial void InternalStart() { + InitializePendingChannelCountdown(); + var ip = IPAddress.Any; if (!string.IsNullOrEmpty(BoundHost)) { @@ -32,29 +34,10 @@ namespace Renci.SshNet Session.ErrorOccured += Session_ErrorOccured; Session.Disconnected += Session_Disconnected; - InitializePendingChannelCountdown(); + StartAccept(null); // consider port started when we're listening for inbound connections _status = ForwardedPortStatus.Started; - - try - { - StartAccept(null); - } - catch (ObjectDisposedException) - { - // AcceptAsync will throw an ObjectDisposedException when the server is closed before - // the listener has started accepting connections. - // - // this is only possible when the listener is stopped (from another thread) right - // after it was started. - StopPort(Session.ConnectionInfo.Timeout); - } - catch (Exception ex) - { - StopPort(Session.ConnectionInfo.Timeout); - RaiseExceptionEvent(ex); - } } private void StartAccept(SocketAsyncEventArgs e) diff --git a/src/Renci.SshNet/ForwardedPortDynamic.cs b/src/Renci.SshNet/ForwardedPortDynamic.cs index 1316b278..dbe9794d 100644 --- a/src/Renci.SshNet/ForwardedPortDynamic.cs +++ b/src/Renci.SshNet/ForwardedPortDynamic.cs @@ -82,11 +82,10 @@ namespace Renci.SshNet // signal existing channels that the port is closing base.StopPort(timeout); + // prevent new requests from getting processed + StopListener(); // wait for open channels to close InternalStop(timeout); - // prevent new requests from getting processed before we signal existing - // channels that the port is closing - StopListener(); // mark port stopped _status = ForwardedPortStatus.Stopped; }