python TCPServer address already in use but I close the server and I use `allow_reuse_address`

bind, port, python, tcp

Solution

Thanks to the other answers, I figured it out. `allow_reuse_address` should be on the class, not on the instance:

SocketServer.TCPServer.allow_reuse_address = True
httpd = SocketServer.TCPServer(("", PORT), MyRequestHandler)

I'm still not sure why closing the socket didn't free it up for the next run of the server, though.

Problem

Here is my code to run the server: ``` class MyRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): #.... PORT = 8089 httpd = SocketServer.TCPServer(("", PORT), MyRequestHandler) httpd.allow_reuse_address = True print "Serving forever at port", PORT try: httpd.serve_forever() except: print "Closing the server." httpd.server_close() raise ``` Yet this is what happens: ``` ^CClosing the server. Traceback (most recent call last): File "server.py", line 118, in <module> self.send_error(400, "Unimplemented GET command: %s" % (self.path,)) File "/home/claudiu/local/lib/python2.6/SocketServer.py", line 224, in serve_forever r, w, e = select.select([self], [], [], poll_interval) KeyboardInterrupt (.virtualenv)claudiu@xxx:~/xxx$ python server.py Traceback (most recent call last): File "server.py", line 122, in <module> httpd = SocketServer.TCPServer(("", PORT), MyRequestHandler) File "/home/claudiu/local/lib/python2.6/SocketServer.py", line 402, in __init__ self.server_bind() File "/home/claudiu/local/lib/python2.6/SocketServer.py", line 413, in server_bind self.socket.bind(self.server_address) File "<string>", line 1, in bind socket.error: [Errno 98] Address already in use ``` Why? I close the server and set `allow_reuse_address` to True... Using python 2.6.8.

Original source