Sockets - Broadcast UDP

Résolu
Toadstool Messages postés 16 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 31 mars 2007 - 9 nov. 2004 à 23:06
Toadstool Messages postés 16 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 31 mars 2007 - 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 ***
A voir également:

2 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2004 à 02:31
Salut,
As tu essayé setsockopt(...) avec l'option SO_BROADCAST ?
3
Toadstool Messages postés 16 Date d'inscription samedi 4 septembre 2004 Statut Membre Dernière intervention 31 mars 2007
10 nov. 2004 à 12:30
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 ***
3
Rejoignez-nous