Está experimentando el TIME_WAIT
estado de los enchufes conectados. Aunque haya cerrado su enchufe, todavía tiene consecuencias persistentes durante un par de minutos. Las razones de esto, así como un indicador de socket que puede establecer para deshabilitar el comportamiento (SO_REUSEADDR), se explican en la guía de preguntas frecuentes sobre sockets de UNIX.
En resumen,
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(...)
...
Intente agregar import sys y finalice su aplicación con sys.exit(). El socket permanece reservado hasta que el sistema está satisfecho de que la aplicación está cerrada. Puede ser explícito al respecto con sys.exit()
[editar] Ah, está bien. Soy bastante nuevo en los enchufes. Entonces, ¿estás diciendo que esta secuencia no es segura? No puedo imaginar otra manera de hacerlo. Tienes que cerrar tu aplicación en algún momento, con alguna técnica, ¿verdad? ¿Cómo se hace correctamente entonces?
server.shutdown(socket.SHUT_RDWR)
server.close()
sys.exit()