@@ -240,20 +240,20 @@ async def _connect_secure(cls, resolved_address, timeout, keep_alive, ssl):
240
240
log .debug ("[#0000] S: <TIMEOUT> %s" , resolved_address )
241
241
log .debug ("[#0000] C: <CLOSE> %s" , resolved_address )
242
242
if s :
243
- await cls .close_socket (s )
243
+ cls ._kill_raw_socket (s )
244
244
raise ServiceUnavailable (
245
245
"Timed out trying to establish connection to {!r}" .format (
246
246
resolved_address )) from None
247
247
except asyncio .CancelledError :
248
248
log .debug ("[#0000] S: <CANCELLED> %s" , resolved_address )
249
249
log .debug ("[#0000] C: <CLOSE> %s" , resolved_address )
250
250
if s :
251
- await cls .close_socket (s )
251
+ cls ._kill_raw_socket (s )
252
252
raise
253
253
except (SSLError , CertificateError ) as error :
254
254
local_port = s .getsockname ()[1 ]
255
255
if s :
256
- await cls .close_socket (s )
256
+ cls ._kill_raw_socket (s )
257
257
raise BoltSecurityError (
258
258
message = "Failed to establish encrypted connection." ,
259
259
address = (resolved_address ._host_name , local_port )
@@ -263,7 +263,7 @@ async def _connect_secure(cls, resolved_address, timeout, keep_alive, ssl):
263
263
" " .join (map (repr , error .args )))
264
264
log .debug ("[#0000] C: <CLOSE> %s" , resolved_address )
265
265
if s :
266
- await cls .close_socket (s )
266
+ cls ._kill_raw_socket (s )
267
267
if isinstance (error , OSError ):
268
268
raise ServiceUnavailable (
269
269
"Failed to establish connection to {!r} (reason {})"
@@ -350,14 +350,18 @@ async def close_socket(cls, socket_):
350
350
except OSError :
351
351
pass
352
352
else :
353
- try :
354
- socket_ .shutdown (SHUT_RDWR )
355
- except OSError :
356
- pass
357
- try :
358
- socket_ .close ()
359
- except OSError :
360
- pass
353
+ cls ._kill_raw_socket (socket_ )
354
+
355
+ @classmethod
356
+ def _kill_raw_socket (cls , socket_ ):
357
+ try :
358
+ socket_ .shutdown (SHUT_RDWR )
359
+ except OSError :
360
+ pass
361
+ try :
362
+ socket_ .close ()
363
+ except OSError :
364
+ pass
361
365
362
366
@classmethod
363
367
async def connect (cls , address , * , tcp_timeout , deadline ,
@@ -409,7 +413,10 @@ async def connect(cls, address, *, tcp_timeout, deadline,
409
413
log .debug ("[#%04X] C: <CANCELED> %s" , local_port ,
410
414
resolved_address )
411
415
if s :
412
- await cls .close_socket (s )
416
+ try :
417
+ s .kill ()
418
+ except OSError :
419
+ pass
413
420
raise
414
421
except Exception :
415
422
if s :
@@ -528,15 +535,15 @@ def _connect(cls, resolved_address, timeout, keep_alive):
528
535
except SocketTimeout :
529
536
log .debug ("[#0000] S: <TIMEOUT> %s" , resolved_address )
530
537
log .debug ("[#0000] C: <CLOSE> %s" , resolved_address )
531
- cls .close_socket (s )
538
+ cls ._kill_raw_socket (s )
532
539
raise ServiceUnavailable (
533
540
"Timed out trying to establish connection to {!r}" .format (
534
541
resolved_address ))
535
542
except Exception as error :
536
543
log .debug ("[#0000] S: <ERROR> %s %s" , type (error ).__name__ ,
537
544
" " .join (map (repr , error .args )))
538
545
log .debug ("[#0000] C: <CLOSE> %s" , resolved_address )
539
- cls .close_socket (s )
546
+ cls ._kill_raw_socket (s )
540
547
if isinstance (error , OSError ):
541
548
raise ServiceUnavailable (
542
549
"Failed to establish connection to {!r} (reason {})"
@@ -554,7 +561,7 @@ def _secure(cls, s, host, ssl_context):
554
561
sni_host = host if HAS_SNI and host else None
555
562
s = ssl_context .wrap_socket (s , server_hostname = sni_host )
556
563
except (OSError , SSLError , CertificateError ) as cause :
557
- cls .close_socket (s )
564
+ cls ._kill_raw_socket (s )
558
565
raise BoltSecurityError (
559
566
message = "Failed to establish encrypted connection." ,
560
567
address = (host , local_port )
@@ -615,15 +622,15 @@ def _handshake(cls, s, resolved_address, deadline):
615
622
# If no data is returned after a successful select
616
623
# response, the server has closed the connection
617
624
log .debug ("[#%04X] S: <CLOSE>" , local_port )
618
- cls .close_socket (s )
625
+ cls ._kill_raw_socket (s )
619
626
raise ServiceUnavailable (
620
627
f"Connection to { resolved_address } closed without handshake "
621
628
"response"
622
629
)
623
630
if data_size != 4 :
624
631
# Some garbled data has been received
625
632
log .debug ("[#%04X] S: @*#!" , local_port )
626
- cls .close_socket (s )
633
+ cls ._kill_raw_socket (s )
627
634
raise BoltProtocolError (
628
635
"Expected four byte Bolt handshake response from "
629
636
f"{ resolved_address !r} , received { response !r} instead; "
@@ -632,7 +639,7 @@ def _handshake(cls, s, resolved_address, deadline):
632
639
)
633
640
elif response == b"HTTP" :
634
641
log .debug ("[#%04X] S: <CLOSE>" , local_port )
635
- cls .close_socket (s )
642
+ cls ._kill_raw_socket (s )
636
643
raise ServiceUnavailable (
637
644
f"Cannot to connect to Bolt service on { resolved_address !r} "
638
645
"(looks like HTTP)"
@@ -646,6 +653,10 @@ def _handshake(cls, s, resolved_address, deadline):
646
653
def close_socket (cls , socket_ ):
647
654
if isinstance (socket_ , BoltSocket ):
648
655
socket_ = socket_ ._socket
656
+ cls ._kill_raw_socket (socket_ )
657
+
658
+ @classmethod
659
+ def _kill_raw_socket (cls , socket_ ):
649
660
try :
650
661
socket_ .shutdown (SHUT_RDWR )
651
662
except OSError :
0 commit comments