comment savoir si un port UDP et ouvert sur une machine ? [C/C++] - C++ - Programmation
Marsh Posté le 23-04-2003 à 18:39:06
bah en fait, c l'un des interets de l'UDP: qu'il y ait quelqu'un ou pas à l'autre bout, l'emeteur n'est pas affecté (ne recoit pas d'erreur)
pour savoir si le destinataire recoit qq chose, il doit te renvoyer explicitement une info pour te le dire.
Marsh Posté le 23-04-2003 à 19:55:31
ouaip ben c 'est bien ce ki é con
car pour recevoir un message c la commande recvfrom et elle reste bloké tant k'il n'y a pas de message !
car moi enfaite g une liste d'ip et je doit regarder tte les 20 seconde s'il le port 1002 en UDP et ouvert, pour sela je leur send ping et les ip en question doivent me repondre pong, mais si il y a une ip ou le port 1002 est pas ouvert je pong je pe tjr l'attendre est donc paff mon programme est bloké !
Marsh Posté le 24-04-2003 à 00:31:34
tu peux t'en sortir grace à la fonction select() qui accepte un timeout. pour en savoir plus, ya un ancien post concernant le tcp/ip non-bloquant (valable aussi pour l'udp)
"TCP-IP Pb recv bloquant et terminaison de processus" initié par xilebo
Marsh Posté le 24-04-2003 à 09:49:19
dsl mais j'ai absolument rien capter au post de xilebo !
je cherche un truc simple moi
Code :
|
avec ce source la comment je fais pour inséré un timeout au recvfrom ?
merci !
Marsh Posté le 25-04-2003 à 00:55:42
Code :
|
(j'ai rien testé)
Marsh Posté le 25-04-2003 à 12:48:14
CtHuLhU50 a écrit : |
Utilise un thread auxiliaire
Marsh Posté le 27-04-2003 à 14:42:41
Tu utilises la fonction CreateThread ( tu sais ce que c'est un thread au fait? ) dont le mode d'emploi est détaillé dans la msdn
Marsh Posté le 30-04-2003 à 11:49:00
http://www.manualy.sk/sock-faq/unix-socket-faq-6.html
pour faire une socket non bloquante
c'est pour unix mais la fonction marche pareil que sous windows
Marsh Posté le 23-04-2003 à 17:26:29
Salut a tous,
voila j'aurais voulu savoir s'il est possbile de savoir si un port UDP est ouvert sur une machine.Car en UDP il n'y a pas de connection ...
s=sendto(c, buf, sizeof(buf), 0, (LPSOCKADDR)&to, sizeof(to));
if(s == 0 || s == SOCKET_ERROR)
printf("erreur" );
ke le port soi ouvert ou non le je n'ai jamais erreur dans la console.
quelqu'un a une idée ?,merci