@@ -976,9 +976,9 @@ def test(HandlerClass=BaseHTTPRequestHandler,
976976 ServerClass .address_family , addr = _get_best_family (bind , port )
977977 HandlerClass .protocol_version = protocol
978978
979- if tls_cert :
980- server = ThreadingHTTPSServer (addr , HandlerClass , certfile = tls_cert ,
981- keyfile = tls_key , password = tls_password )
979+ if issubclass ( ServerClass , HTTPSServer ) :
980+ server = ServerClass (addr , HandlerClass , certfile = tls_cert ,
981+ keyfile = tls_key , password = tls_password )
982982 else :
983983 server = ServerClass (addr , HandlerClass )
984984
@@ -1051,9 +1051,22 @@ def finish_request(self, request, client_address):
10511051 self .RequestHandlerClass (request , client_address , self ,
10521052 directory = args .directory )
10531053
1054+ class HTTPSDualStackServer (ThreadingHTTPSServer ):
1055+ def server_bind (self ):
1056+ with contextlib .suppress (Exception ):
1057+ self .socket .setsockopt (
1058+ socket .IPPROTO_IPV6 , socket .IPV6_V6ONLY , 0 )
1059+ return super ().server_bind ()
1060+
1061+ def finish_request (self , request , client_address ):
1062+ self .RequestHandlerClass (request , client_address , self ,
1063+ directory = args .directory )
1064+
1065+ ServerClass = HTTPSDualStackServer if args .tls_cert else DualStackServer
1066+
10541067 test (
10551068 HandlerClass = SimpleHTTPRequestHandler ,
1056- ServerClass = DualStackServer ,
1069+ ServerClass = ServerClass ,
10571070 port = args .port ,
10581071 bind = args .bind ,
10591072 protocol = args .protocol ,
0 commit comments