【问题标题】:HTTPServer.shutdown returns but the socket is still openHTTPServer.shutdown 返回但套接字仍然打开
【发布时间】:2014-06-15 07:35:53
【问题描述】:

我有以下代码用于在端口 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 返回?

【问题讨论】:

  • 在 socket.shutdown() 之前尝试一次 socket.close() 看看是否有变化。
  • 这是正确的方法吗?我目前没有直接访问套接字,只是使用HTTPServer 类。
  • 也许这会给你一些提示stackoverflow.com/a/20746459/2382792
  • pss:不,不是同一个问题。
  • 我不确定,但只是尝试在 self.server.shutdown 之前添加这个 self.server.close() 你也可以将导入放在你的代码中并更新你的问题,它有助于工作迅速地。 :)

标签: python sockets httpserver


【解决方案1】:

按照@ρss 的建议添加server.server_close() 似乎解决了这个问题:

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

【讨论】:

    猜你喜欢
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多