Sockets - Broadcast UDP [Résolu]

Toadstool 17 Messages postés samedi 4 septembre 2004Date d'inscription 31 mars 2007 Dernière intervention - 9 nov. 2004 à 23:06 - Dernière réponse : Toadstool 17 Messages postés samedi 4 septembre 2004Date d'inscription 31 mars 2007 Dernière intervention
- 10 nov. 2004 à 12:30
Je veux broadcaster un paquet UDP pour "pinger" les serveurs half-life présent sur un réseau local (cf. la source bot irc + scan de parties counter-strike en udp). Je fais comme ca :

SOCKET sock;
SOCKADDR_IN sin;
char ping_msg[20];
  
sprintf(ping_msg, "%c%c%c%cping", 255, 255, 255, 255);
  
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_BROADCAST;

(...)

for(int port = 27015; port < 27025; port++)
{
   sin.sin_port = htons(port);
   for(;;)
     if(sendto(sock, ping_msg, strlen(ping_msg), 0, (SOCKADDR*)&sin,     
                    sizeof(sin)) >= 0)
       break;
}


Le problème c est que sendto bloque complètement dès le premier envoi alors que ca marche si a la place de mettre INADDR_BROADCAST je mets un inet_addr("172.16.30.70") par exemple.

Une idée de pourquoi ca marche pas ?

Merci d'avance :)

*** Toadstool ***
Afficher la suite 

2 réponses

Répondre au sujet
cs_aardman 1905 Messages postés mercredi 22 janvier 2003Date d'inscription 17 septembre 2012 Dernière intervention - 10 nov. 2004 à 02:31
+3
Utile
Salut,
As tu essayé setsockopt(...) avec l'option SO_BROADCAST ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_aardman
Toadstool 17 Messages postés samedi 4 septembre 2004Date d'inscription 31 mars 2007 Dernière intervention - 10 nov. 2004 à 12:30
+3
Utile
avec :

SOCKET sock;
SOCKADDR_IN sin;
char ping_msg[20];
  
sprintf(ping_msg, "%c%c%c%cping", 255, 255, 255, 255);

sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_BROADCAST;

sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  
int i = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&i, 1);

....


ca marche super bien merci beaucoup :)

*** Toadstool ***
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Toadstool

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.