Bonjour à Tou(te)s,
Je développe avec Eclipse et Cygwin sous XP. Un programme serveur fonctionnant parfaitement lorsqu'il est compilé avec CygwinB20 ( très vieille version ) a un comportement étrange quand je le compile avec ma version actuelle ( Cygwin 2.416 ).
Dans ce programme j'utilise le très classique : nfound = select(maxfd + 1, &rmask, NULL, NULL, &timeout); après avoir bien sûr utilisé socket(), bind() et listen().
Tout cela fonctionne parfaitement. Le serveur détecte les clients, leur attribue des sessions, etc ... MAIS ...
A *chaque* appel de la fonction select(), soit toutes les demi-secondes dans mon cas, un couple de ports est ouvert et refermé immédiatement (en Cygwin 2.416 mais pas en CygwinB20). Je vois cela grâce au logiciel "Active Ports" qui trace dynamiquement les ports ouverts. Les numéros de ports défilent en permanence au rythme de 4 par seconde et rebouclent lorsque la limite de l'OS est atteinte.
L'exécution en pas à pas avec gdb sous Eclipse montre clairement que le responsable est bien la fonction select(), du moins en tant que cause racine. Le problème est que, en plus de mon thread principal, cygwin crée deux threads de son crû, que je ne peux pas débugger (aucune info de debug) et qui semblent dédiés aux synchronisations ( WaitForMultipleObjects etc ...). C'est sans doute dans l'un d'eux que cette gestion parasite a lieu.
Bien que mon serveur fonctionne, tout ceci me gène pour plusieurs raisons :
- l'ouverture / fermeture de ports pénalise sans doute plusieurs logiciels ( OS, firewall, etc ... )
- risques (faibles) d'empêcher certaines applications d'ouvrir les ports qu'elles souhaitent (si pas de chance)
- "bruit de fond" permanent sur mon logiciel de surveillance graphique des débits réseau
- saturation possible au fil de temps de certaines piles système ?
- faille de sécurité ?
L'un d'entre vous aurait-il une idée de ce qui se passe ?
Merci.
Amicalement. Pulsar33
Partager