Question

I have the following code that I use to run a local HTTP server on port 8000:

# 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()

However occasionally when stop_server returns, the listening socket will still be opening. I have verified this by putting os.system("netstat -ln | grep 8000") at the end of stop_server and it often shows that the socket is still listening.

Is there a way to only return from stop_server once the socket has been closed?

Was it helpful?

Solution

It looks like this was solved by adding server.server_close() as @ρss suggested:

def stop_server(self):
    self.server.shutdown()
    self.server.server_close()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top