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

标签 python sockets httpserver

我有以下代码,用于在端口 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返回时,监听套接字仍将打开。我已经通过输入 os.system("netstat -ln | grep 8000") 验证了这一点在 stop_server 末尾并且经常显示套接字仍在监听。

有没有办法只从 stop_server 返回一旦套接字关闭?

最佳答案

看起来这个问题是通过按照 @ρss 建议添加 server.server_close() 来解决的:

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

关于python - HTTPServer.shutdown 返回但套接字仍然打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23363401/

相关文章:

python - 创建列,指示基于其他列的特定值的历史存在性

python - 将文件列表读入数据帧列表

java - 如何管理netty中发送数据的客户端列表

c - 为什么 Else if 当我有 "ADD_FILE "不工作?

python-3.x - Pythonw、pyw 和 arg,/B 不会使 python 的 http-server 在后台运行

python - Plotly:用单一颜色的填充和线条绘制面积图

Python 在真实条件下退出所有正在运行的线程

Python - SSL - 错误的版本号

android - 如何使用 FileInputStream 设置文件名?

testing - 通用(非特定于服务器的)HTTP 服务器测试套件?