@@ -244,7 +244,7 @@ async def _connect_secure(cls, resolved_address, timeout, keep_alive, ssl):
244244                await  cls .close_socket (s )
245245            raise  ServiceUnavailable (
246246                "Timed out trying to establish connection to {!r}" .format (
247-                     resolved_address ))
247+                     resolved_address ))  from   None 
248248        except  asyncio .CancelledError :
249249            log .debug ("[#0000]  S: <CANCELLED> %s" , resolved_address )
250250            log .debug ("[#0000]  C: <CLOSE> %s" , resolved_address )
@@ -259,15 +259,18 @@ async def _connect_secure(cls, resolved_address, timeout, keep_alive, ssl):
259259                message = "Failed to establish encrypted connection." ,
260260                address = (resolved_address .host_name , local_port )
261261            ) from  error 
262-         except  OSError  as  error :
262+         except  Exception  as  error :
263263            log .debug ("[#0000]  S: <ERROR> %s %s" , type (error ).__name__ ,
264264                      " " .join (map (repr , error .args )))
265265            log .debug ("[#0000]  C: <CLOSE> %s" , resolved_address )
266266            if  s :
267267                await  cls .close_socket (s )
268-             raise  ServiceUnavailable (
269-                 "Failed to establish connection to {!r} (reason {})" .format (
270-                     resolved_address , error ))
268+             if  isinstance (error , OSError ):
269+                 raise  ServiceUnavailable (
270+                     "Failed to establish connection to {!r} (reason {})" 
271+                     .format (resolved_address , error )
272+                 ) from  error 
273+             raise 
271274
272275    async  def  _handshake (self , resolved_address ):
273276        """ 
@@ -302,10 +305,10 @@ async def _handshake(self, resolved_address):
302305            self .settimeout (original_timeout  +  1 )
303306        try :
304307            data  =  await  self .recv (4 )
305-         except  OSError :
308+         except  OSError   as   exc :
306309            raise  ServiceUnavailable (
307310                "Failed to read any data from server {!r} " 
308-                 "after connected" .format (resolved_address ))
311+                 "after connected" .format (resolved_address ))  from   exc 
309312        finally :
310313            self .settimeout (original_timeout )
311314        data_size  =  len (data )
@@ -513,14 +516,17 @@ def _connect(cls, resolved_address, timeout, keep_alive):
513516            raise  ServiceUnavailable (
514517                "Timed out trying to establish connection to {!r}" .format (
515518                    resolved_address ))
516-         except  OSError  as  error :
519+         except  Exception  as  error :
517520            log .debug ("[#0000]  S: <ERROR> %s %s" , type (error ).__name__ ,
518521                      " " .join (map (repr , error .args )))
519522            log .debug ("[#0000]  C: <CLOSE> %s" , resolved_address )
520523            cls .close_socket (s )
521-             raise  ServiceUnavailable (
522-                 "Failed to establish connection to {!r} (reason {})" .format (
523-                     resolved_address , error ))
524+             if  isinstance (error , OSError ):
525+                 raise  ServiceUnavailable (
526+                     "Failed to establish connection to {!r} (reason {})" 
527+                     .format (resolved_address , error )
528+                 ) from  error 
529+             raise 
524530
525531    @classmethod  
526532    def  _secure (cls , s , host , ssl_context ):
@@ -582,10 +588,10 @@ def _handshake(cls, s, resolved_address):
582588            selector .select (1 )
583589        try :
584590            data  =  s .recv (4 )
585-         except  OSError :
591+         except  OSError   as   exc :
586592            raise  ServiceUnavailable (
587593                "Failed to read any data from server {!r} " 
588-                 "after connected" .format (resolved_address ))
594+                 "after connected" .format (resolved_address ))  from   exc 
589595        data_size  =  len (data )
590596        if  data_size  ==  0 :
591597            # If no data is returned after a successful select 
0 commit comments