@@ -137,30 +137,40 @@ protected override void StartPort()
137
137
if ( ! ForwardedPortStatus . ToStarting ( ref _status ) )
138
138
return ;
139
139
140
- Session . RegisterMessage ( "SSH_MSG_REQUEST_FAILURE" ) ;
141
- Session . RegisterMessage ( "SSH_MSG_REQUEST_SUCCESS" ) ;
142
- Session . RegisterMessage ( "SSH_MSG_CHANNEL_OPEN" ) ;
140
+ InitializePendingChannelCountdown ( ) ;
143
141
144
- Session . RequestSuccessReceived += Session_RequestSuccess ;
145
- Session . RequestFailureReceived += Session_RequestFailure ;
146
- Session . ChannelOpenReceived += Session_ChannelOpening ;
142
+ try
143
+ {
144
+ Session . RegisterMessage ( "SSH_MSG_REQUEST_FAILURE" ) ;
145
+ Session . RegisterMessage ( "SSH_MSG_REQUEST_SUCCESS" ) ;
146
+ Session . RegisterMessage ( "SSH_MSG_CHANNEL_OPEN" ) ;
147
147
148
- InitializePendingChannelCountdown ( ) ;
148
+ Session . RequestSuccessReceived += Session_RequestSuccess ;
149
+ Session . RequestFailureReceived += Session_RequestFailure ;
150
+ Session . ChannelOpenReceived += Session_ChannelOpening ;
149
151
150
- // send global request to start direct tcpip
151
- Session . SendMessage ( new GlobalRequestMessage ( GlobalRequestName . TcpIpForward , true , BoundHost , BoundPort ) ) ;
152
- // wat for response on global request to start direct tcpip
153
- Session . WaitOnHandle ( _globalRequestResponse ) ;
152
+ // send global request to start forwarding
153
+ Session . SendMessage ( new GlobalRequestMessage ( GlobalRequestName . TcpIpForward , true , BoundHost , BoundPort ) ) ;
154
+ // wat for response on global request to start direct tcpip
155
+ Session . WaitOnHandle ( _globalRequestResponse ) ;
154
156
155
- if ( ! _requestStatus )
157
+ if ( ! _requestStatus )
158
+ {
159
+ throw new SshException ( string . Format ( CultureInfo . CurrentCulture , "Port forwarding for '{0}' port '{1}' failed to start." , Host , Port ) ) ;
160
+ }
161
+ }
162
+ catch ( Exception )
156
163
{
157
- // when the request to start port forward was rejected, then we're no longer
164
+ // mark port stopped
165
+ _status = ForwardedPortStatus . Stopped ;
166
+
167
+ // when the request to start port forward was rejected or failed, then we're no longer
158
168
// interested in these events
159
169
Session . RequestSuccessReceived -= Session_RequestSuccess ;
160
170
Session . RequestFailureReceived -= Session_RequestFailure ;
161
171
Session . ChannelOpenReceived -= Session_ChannelOpening ;
162
172
163
- throw new SshException ( string . Format ( CultureInfo . CurrentCulture , "Port forwarding for '{0}' port '{1}' failed to start." , Host , Port ) ) ;
173
+ throw ;
164
174
}
165
175
166
176
_status = ForwardedPortStatus . Started ;
0 commit comments