s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) any_connection = False while True: try: conn, addr = s.accept() data = conn.recv(1024) any_connection = True # keep looking if not data: continue pid = os.fork() if pid == 0: server_process(data, conn) except KeyboardInterrupt: break if any_connection: print("Closing connection") conn.close()
I pick up the KeyboardInterrupt signal here on an endlessly running TCP server that I wrote in Python. However, although I know that it closes the connection because it prints Closing Connection , when I try to restart the server, I get:
OSError: [Errno 48] Address already in use
I have no idea what is happening, because I know for sure that I am calling conn.close() .
And running killall python3 does not fix it, I keep getting an error if I don't wait a long time or change the port. I also tried grep all python3 processes, but got nothing.
I am running OS X Yosemite.
source share