Permettez-moi d'expliquer un peu l'application que je suis en train de créer.
Je crée un serveur UDP central (doit être UDP) pour plusieurs clients simultanés qui "communiquent" également entre eux. Je vérifie un dictionnaire des adresses clients connues et crée un thread de gestion de client si je ne connais pas le client. Sinon, le thread reçoit les données et fait son travail. Le nouveau thread reçoit une référence du socket et l'adresse de l'appelant, ainsi ils utilisent socket.sendTo avec cette adresse et les données.
Le problème survient lorsqu'un client ferme son client (Alt+F4) et que quelqu'un lui parle, car le socket lance une erreur 10054, "Réinitialisation de la connexion du socket". Pas attendu en UDP, je pense. La méthode de "communication" sur les threads client est également entre balises try & except mais néanmoins, c'est le serveur UDP "recvfrom" qui déclenche l'exception.
Je suis en train d'utiliser Python 2.5 (j'en ai besoin pour le code) et ces options de socket :
hôte = "0.0.0.0"
port = 10000
UDPSock = socket(AF_INET,SOCK_DGRAM)
UDPSock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
UDPSock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
UDPSock.bind((hôte,port))
Y a-t-il des options qui me permettent de faire ce que je veux ou une bibliothèque qui résout ces problèmes ?.
Ou si je me trompe... existe-t-il un moyen de faire/imiter le même comportement qu'un socket TCP threadé (créer un nouveau thread de gestion client sur accept) mais avec UDP ?
Merci de m'avoir lu ;)