Bonsoir,
je ne vois pas très bien comment les try/except t'ont permis de comprendre que le programme tournait encore; tout ce qu'il font dans ton code c'est avaler l'exception et afficher un message d'erreur qui n'a peut-être rien à voir avec la raison pour laquelle l'exception a été levée.
Il se peut tout à fait que le socket soit indisponible même si le programme s'est arrêté. Même si le socket TCP a été fermé proprement, il se peut qu'il reste dans l'état TIME_WAIT pendant quelques temps (cela peut durer plusieurs minutes). C'est un problème courant. Pour contourner cela, tu peux définir l'option REUSEADDR sur le socket, qui permet de réutiliser un socket en TIME_WAIT.
Cela devrait être (non testé):
listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
(juste avant le bind)
Aussi, je ne comprends pas pourquoi le client et le serveur ouvrent tous les deux un socket en écoute. Typiquement, seul le serveur fait le bind/listen/accept; le client fait directement un connect.
Partager