Salut,

Voici quelques détails de mon environnement :
Windows XP Pro
VS Express 2010
Qt 4.5.2

Mon projet a pour but de communiquer (depuis un pc) en UDP avec des petits modules électroniques. Le code embarqué dans ces modules ne reprend pas la totalité d'une pile IP/UDP/Ethernet classique, mais en reste assez proche.

L'une des contraintes spécifiques est que le port source de mes paquets émis depuis mon pc doit être explicitement spécifié, et doit pouvoir changer au cours du temps.

J'arrive aujourd'hui à communiquer avec ces modules, mais je bloque encore sur un problème. Je n'arrive pas toujours à ré-attribuer un nouveau port à mon socket (et c'est pour cela que je m'adresse à vous).

Pour effectuer l'attribution de l'adresse et du port, j'utilise la méthode bind() qui fonctionne. Cependant, lorsque j'essaie de refaire un bind sur un socket "déjà bindé", il me met
Code : Sélectionner tout - Visualiser dans une fenêtre à part
QNativeSocketEngine::bind() was not called in QAbstrackSocket::UnconnectedState
J'ai donc ajouté un disconnectFromHost() avant de refaire le bind(), et ça marche dans 90% des cas.

Cependant, le problème persiste parfois :
-si je fais un writeDatagram() puis flush() vers une adresse inexistante (mais valide) puis que j'essaie de changer le port, ça ne marche pas. Le signal error() me renvoit
The address is not available
J'ai donc essayé ( à la place du disconnectFromHost()) d'utiliser les méthodes abort() ou close() mais cela ne fonctionne pas.

J'ai pas mal épluché la doc de QIODevice jusqu à QUdpSocket, sans rien trouver de convaincant. J'ai également essayé de fouiller dans les sources, mais vu qu'il y a pas mal de différences entre système, je suis un peu noyé dans les blocs spécifiques aux versions de Qt / OS.

Merci,

G.