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