@@ -375,6 +375,8 @@ private static Socket Connect(string serverName, int port, TimeoutTimer timeout,
375
375
376
376
IEnumerable < IPAddress > ipAddresses = GetHostAddressesSortedByPreference ( serverName , ipPreference ) ;
377
377
378
+ SocketException lastSocketException = null ;
379
+
378
380
foreach ( IPAddress ipAddress in ipAddresses )
379
381
{
380
382
bool isSocketSelected = false ;
@@ -426,7 +428,7 @@ private static Socket Connect(string serverName, int port, TimeoutTimer timeout,
426
428
{
427
429
if ( timeout . IsExpired )
428
430
{
429
- return null ;
431
+ throw new Win32Exception ( 258 , "The operation has timed out." ) ;
430
432
}
431
433
432
434
int socketSelectTimeout =
@@ -471,6 +473,7 @@ private static Socket Connect(string serverName, int port, TimeoutTimer timeout,
471
473
SqlClientEventSource . Log . TryAdvancedTraceEvent (
472
474
"{0}.{1}{2}THIS EXCEPTION IS BEING SWALLOWED: {3}" ,
473
475
nameof ( SniTcpHandle ) , nameof ( Connect ) , EventType . ERR , e ) ;
476
+ lastSocketException = e ;
474
477
}
475
478
finally
476
479
{
@@ -479,6 +482,14 @@ private static Socket Connect(string serverName, int port, TimeoutTimer timeout,
479
482
}
480
483
}
481
484
485
+ if ( lastSocketException != null )
486
+ {
487
+ SqlClientEventSource . Log . TryAdvancedTraceEvent (
488
+ "{0}.{1}{2}Last Socket Exception: {3}" ,
489
+ nameof ( SniTcpHandle ) , nameof ( Connect ) , EventType . ERR , lastSocketException ) ;
490
+ throw lastSocketException ;
491
+ }
492
+
482
493
return null ;
483
494
}
484
495
}
@@ -588,6 +599,7 @@ private static Socket ParallelConnect(IPAddress[] serverAddresses, int port, Tim
588
599
{
589
600
SqlClientEventSource . Log . TryAdvancedTraceEvent (
590
601
"{0}.{1}{2}ParallelConnect timeout expired." , nameof ( SniTcpHandle ) , nameof ( ParallelConnect ) , EventType . INFO ) ;
602
+ // We will throw below after cleanup
591
603
break ;
592
604
}
593
605
@@ -654,6 +666,11 @@ private static Socket ParallelConnect(IPAddress[] serverAddresses, int port, Tim
654
666
655
667
if ( connectedSocket == null )
656
668
{
669
+ if ( timeout . IsExpired )
670
+ {
671
+ throw new Win32Exception ( 258 , "The operation has timed out." ) ;
672
+ }
673
+
657
674
SqlClientEventSource . Log . TryAdvancedTraceEvent (
658
675
"{0}.{1}{2}No socket connections succeeded. Last error: {3}" ,
659
676
nameof ( SniTcpHandle ) , nameof ( ParallelConnect ) , EventType . ERR , lastError ) ;
0 commit comments