Bonjour,
Voici ma situation actuelle. Je dois réaliser des ping vers différentes machines dont le nombre peut varier. Pour cela je crée autant de thread qu'il y a de machines à pinger.
Je souhaite ensuite réaliser moi même le ping plutôt que de passer par une commande system(). J'ai donc implémenter mon programme de cette façon :
Créer les thread
Créer les Winsock
Créer un timer par thread à 5 secondes
Réaliser mon BOOL = Ping() à chaque fin de timer
Dans la fonction Ping()
- Créer une Raw socket
- SendICMPRequest()
- BOOL = WaitForICMPReply()
- Si TRUE Alors RecvICMPReply()
- Fermer la socket
- Retourner le résultat.
Mon problème survient dans le WaitForEchoReply(). J'ai une fonction select() juste sur une socket (celle du thread qui tourne en fait) pour vérifier si on a un timeout (à 1 seconde) et un FD_ISSET si on a reçu quelque chose sur la socket.
Et la je me retrouve avec des cas bizarres. J'ai des réceptions de messages de machines absentes et inversement. C'est comme si lorsqu'une machine est présente alors cela fait sauter le timeout d'une machine absente par exemple.
Alors je me demande : est-ce que un select() fonctionne avec des thread ? Sinon je suis totalement perdu, mes socket sont bien différentes et pourtant mes réceptions ou timeout sont totalement mélangé.
J'espère que vous pourrez m'aider.
Merci.
PS : Si je ne suis pas assez clair, j'essayerais de plus détailler mon code.
Partager