@@ -866,6 +866,50 @@ def test_create_server(self, m_log):
866866 self .assertTrue (self .sock .close .called )
867867 self .assertTrue (m_log .error .called )
868868
869+ def test_create_server_transport_creation_error (self ):
870+ # gh-156365: a protocol_factory() failure closes the accepted socket
871+ # and keeps the server accepting; the listening socket stays open.
872+ pf = mock .Mock (side_effect = RuntimeError )
873+ call_soon = self .loop .call_soon = mock .Mock ()
874+ self .loop .call_exception_handler = mock .Mock ()
875+
876+ self .loop ._start_serving (pf , self .sock )
877+ loop = call_soon .call_args [0 ][0 ]
878+ loop ()
879+ self .proactor .accept .reset_mock ()
880+
881+ conn = mock .Mock ()
882+ fut = mock .Mock ()
883+ fut .result .return_value = (conn , ('127.0.0.1' , 1234 ))
884+ loop (fut )
885+
886+ self .assertTrue (conn .close .called )
887+ self .assertFalse (self .sock .close .called )
888+ self .assertTrue (self .proactor .accept .called )
889+ self .loop .call_exception_handler .assert_called_once ()
890+
891+ def test_create_server_transport_oserror_keeps_listening (self ):
892+ # gh-156365: an OSError from transport creation must not close the
893+ # listening socket (mistaken for an accept failure).
894+ pf = mock .Mock ()
895+ call_soon = self .loop .call_soon = mock .Mock ()
896+ self .loop .call_exception_handler = mock .Mock ()
897+ self .loop ._make_socket_transport = mock .Mock (side_effect = OSError )
898+
899+ self .loop ._start_serving (pf , self .sock )
900+ loop = call_soon .call_args [0 ][0 ]
901+ loop ()
902+ self .proactor .accept .reset_mock ()
903+
904+ conn = mock .Mock ()
905+ fut = mock .Mock ()
906+ fut .result .return_value = (conn , ('127.0.0.1' , 1234 ))
907+ loop (fut )
908+
909+ self .assertTrue (conn .close .called )
910+ self .assertFalse (self .sock .close .called )
911+ self .assertTrue (self .proactor .accept .called )
912+
869913 def test_create_server_cancel (self ):
870914 pf = mock .Mock ()
871915 call_soon = self .loop .call_soon = mock .Mock ()
0 commit comments