Stai vivendo il TIME_WAIT
stato delle prese collegate. Anche se hai chiuso la presa, ha ancora conseguenze persistenti per un paio di minuti. Le ragioni di ciò, così come un flag di socket che puoi impostare per disabilitare il comportamento (SO_REUSEADDR), sono spiegate nelle FAQ sui socket della guida UNIX.
In breve,
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(...)
...
Prova ad aggiungere import sys e a terminare la tua app con sys.exit(). Il socket rimane riservato fino a quando il sistema non è soddisfatto che l'applicazione sia chiusa. Puoi essere esplicito al riguardo con sys.exit()
[modifica]Oh, ok. Sono abbastanza nuovo per le prese me stesso. Quindi stai dicendo che questa sequenza non è sicura? Non riesco a immaginare nessun altro modo per farlo. Devi chiudere la tua app ad un certo punto, con qualche tecnica, giusto? Come si fa allora correttamente?
server.shutdown(socket.SHUT_RDWR)
server.close()
sys.exit()