@@ -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