HTTPServer.shutdown 返回但套接字仍然打开

2 投票
1 回答
1321 浏览
提问于 2025-04-18 04:44

我有一段代码,用来在8000端口上运行一个本地的HTTP服务器:

# Omitted imports and irrelevant things for brevity.

class ThreadedHTTPServer(SocketServer.ThreadingMixIn, HTTPServer):
    pass

class MyClass(object):

    server = None

    def start_server(self):
        handler = MyPageHandler
        self.server = ThreadedHTTPServer(('', 8000), handler)

        server_thread = threading.Thread(target=self.server.serve_forever)
        server_thread.daemon = False
        server_thread.start()

    def stop_server(self):
        self.server.shutdown()

不过,有时候当stop_server这个函数执行完后,监听的连接还在打开。我通过在stop_server的最后加上os.system("netstat -ln | grep 8000")来验证这一点,结果经常显示这个连接仍然在监听。

有没有办法让stop_server这个函数在连接关闭后再返回呢?

1 个回答

5

看起来这个问题是通过添加 server.server_close() 来解决的,就像 @ρss 提到的那样:

def stop_server(self):
    self.server.shutdown()
    self.server.server_close()

撰写回答