@@ -1866,6 +1866,8 @@ private void SocketDisconnectAndDispose()
1866
1866
{
1867
1867
try
1868
1868
{
1869
+ DiagnosticAbstraction . Log ( string . Format ( "[{0}] Shutting down socket." , ToHex ( SessionId ) ) ) ;
1870
+
1869
1871
// interrupt any pending reads; should be done outside of socket read lock as we
1870
1872
// actually want shutdown the socket to make sure blocking reads are interrupted
1871
1873
//
@@ -1891,13 +1893,26 @@ private void SocketDisconnectAndDispose()
1891
1893
}
1892
1894
#endif // FEATURE_SOCKET_POLL
1893
1895
}
1896
+ catch ( SshOperationTimeoutException ex )
1897
+ {
1898
+ // TODO: log as info or debug
1899
+ DiagnosticAbstraction . Log ( "Time-out shutting down socket or clearing read buffer: " + ex ) ;
1900
+ }
1894
1901
catch ( SocketException ex )
1895
1902
{
1903
+ // TODO: log as info or debug
1896
1904
DiagnosticAbstraction . Log ( "Failure shutting down socket or clearing read buffer: " + ex ) ;
1897
1905
}
1906
+ catch ( Exception ex )
1907
+ {
1908
+ // TODO: log as warning
1909
+ DiagnosticAbstraction . Log ( "Time-out shutting down socket or clearing read buffer: " + ex ) ;
1910
+ }
1898
1911
}
1899
1912
1913
+ DiagnosticAbstraction . Log ( string . Format ( "[{0}] Disposing socket." , ToHex ( SessionId ) ) ) ;
1900
1914
_socket . Dispose ( ) ;
1915
+ DiagnosticAbstraction . Log ( string . Format ( "[{0}] Disposed socket." , ToHex ( SessionId ) ) ) ;
1901
1916
_socket = null ;
1902
1917
}
1903
1918
}
@@ -1913,8 +1928,8 @@ private void MessageListener()
1913
1928
{
1914
1929
var readSockets = new List < Socket > { _socket } ;
1915
1930
1916
- // remain in message loop until socket is shut down
1917
- while ( true )
1931
+ // remain in message loop until socket is shut down or until we're disconnecting
1932
+ while ( ! _isDisconnecting )
1918
1933
{
1919
1934
#if FEATURE_SOCKET_POLL
1920
1935
Socket . Select ( readSockets , null , null , - 1 ) ;
0 commit comments