diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index 73754c6..2550290 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -326,28 +326,29 @@
                 SocketServer.TCPServer((HOST, -1),
                                        SocketServer.StreamRequestHandler)
 
+
+class MiscTestCase(unittest.TestCase):
+
     def test_shutdown_request_called_if_verify_request_false(self):
         # Issue #26309: BaseServer should call shutdown_request even if
         # verify_request is False
-        result = {"shutdown_called": False}
 
         class MyServer(SocketServer.TCPServer):
             def verify_request(self, request, client_address):
                 return False
 
+            shutdown_called = 0
             def shutdown_request(self, request):
-                result["shutdown_called"] = True
+                self.shutdown_called += 1
                 SocketServer.TCPServer.shutdown_request(self, request)
 
-        def connect_to_server(proto, addr):
-            s = socket.socket(proto, socket.SOCK_STREAM)
-            s.connect(addr)
-            s.close()
-
-        self.run_server(MyServer,
-                        SocketServer.StreamRequestHandler,
-                        connect_to_server)
-        self.assertEqual(result["shutdown_called"], True)
+        server = MyServer((HOST, 0), SocketServer.StreamRequestHandler)
+        s = socket.socket(server.address_family, socket.SOCK_STREAM)
+        s.connect(server.server_address)
+        s.close()
+        server.handle_request()
+        self.assertEqual(server.shutdown_called, 1)
+        server.server_close()
 
 
 def test_main():
