Vous rencontrez le TIME_WAIT
état des prises connectées. Même si vous avez fermé votre socket, cela a encore des conséquences persistantes pendant quelques minutes. Les raisons de cela, ainsi qu'un indicateur de socket que vous pouvez définir pour désactiver le comportement (SO_REUSEADDR), sont expliqués dans la FAQ du socket du guide UNIX.
En bref,
server = socket.socket()
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(...)
...
Essayez d'ajouter import sys et de terminer votre application avec sys.exit(). Le socket reste réservé jusqu'à ce que le système soit convaincu que l'application est fermée. Vous pouvez être explicite à ce sujet avec sys.exit()
[modifier] Ah d'accord. Je suis moi-même assez novice en matière de sockets. Donc vous dites que cette séquence n'est pas sûre ? Je ne peux pas imaginer une autre façon de le faire. Vous devez fermer votre application à un moment donné, avec une certaine technique, non ? Comment est-ce correctement fait alors ?
server.shutdown(socket.SHUT_RDWR)
server.close()
sys.exit()