@@ -670,6 +670,47 @@ def test_create_connection_local_addr(self):
670
670
self .assertEqual (port , expected )
671
671
tr .close ()
672
672
673
+ def test_create_connection_local_addr_skip_different_family (self ):
674
+ # See https://github.com/python/cpython/issues/86508
675
+ port1 = socket_helper .find_unused_port ()
676
+ port2 = socket_helper .find_unused_port ()
677
+ getaddrinfo_orig = self .loop .getaddrinfo
678
+
679
+ async def getaddrinfo (host , port , * args , ** kwargs ):
680
+ if port == port2 :
681
+ return [(socket .AF_INET6 , socket .SOCK_STREAM , 0 , '' , ('::1' , 0 , 0 , 0 )),
682
+ (socket .AF_INET , socket .SOCK_STREAM , 0 , '' , ('127.0.0.1' , 0 ))]
683
+ return await getaddrinfo_orig (host , port , * args , ** kwargs )
684
+
685
+ self .loop .getaddrinfo = getaddrinfo
686
+
687
+ f = self .loop .create_connection (
688
+ lambda : MyProto (loop = self .loop ),
689
+ 'localhost' , port1 , local_addr = ('localhost' , port2 ))
690
+
691
+ with self .assertRaises (OSError ):
692
+ self .loop .run_until_complete (f )
693
+
694
+ def test_create_connection_local_addr_nomatch_family (self ):
695
+ # See https://github.com/python/cpython/issues/86508
696
+ port1 = socket_helper .find_unused_port ()
697
+ port2 = socket_helper .find_unused_port ()
698
+ getaddrinfo_orig = self .loop .getaddrinfo
699
+
700
+ async def getaddrinfo (host , port , * args , ** kwargs ):
701
+ if port == port2 :
702
+ return [(socket .AF_INET6 , socket .SOCK_STREAM , 0 , '' , ('::1' , 0 , 0 , 0 ))]
703
+ return await getaddrinfo_orig (host , port , * args , ** kwargs )
704
+
705
+ self .loop .getaddrinfo = getaddrinfo
706
+
707
+ f = self .loop .create_connection (
708
+ lambda : MyProto (loop = self .loop ),
709
+ 'localhost' , port1 , local_addr = ('localhost' , port2 ))
710
+
711
+ with self .assertRaises (OSError ):
712
+ self .loop .run_until_complete (f )
713
+
673
714
def test_create_connection_local_addr_in_use (self ):
674
715
with test_utils .run_test_server () as httpd :
675
716
f = self .loop .create_connection (
0 commit comments