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