Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2827 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  UDP winsock2 : Select problem

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

UDP winsock2 : Select problem

n°1331919
xela2000
Posté le 24-03-2006 à 18:26:22  profilanswer
 

Salut,
 
Je dois réaliser un client/server UDP avec attente de message non bloquante.
 
Tout se passait bien jusqu'à l'utilisation de Select().
 
Si je lance, le code suivant, le premier Select retourne 0 pour indiquer que la socket n'a pas recu de paquet.
Le deuxième retourne -1 pour indiquer que la socket a été fermé....
 
Si je ne mets pas de Select(), c'est à dire que le recvfrom est bloquant, et à ce moment là, la socket fonctionne et je peux envoyer et recevoir les messages.
Comme si le select avait fermé volontairement la socket.
 
WSADATA wsa;
WSAStartup(MAKEWORD(2,0),&wsa);
 
SOCKET sockReceive, sockSend;
SOCKADDR_IN sinReceive,sinSend;
 
fd_set m_Sockets;
FD_ZERO(&m_Sockets);

 
sinReceive.sin_family=AF_INET;
sinReceive.sin_addr.s_addr=INADDR_ANY;
sinReceive.sin_port=htons(port);
sinSend.sin_family=AF_INET;
sinSend.sin_addr.s_addr=inet_addr("172.17.96.51" );
sinSend.sin_port=htons(33334);
 
sockReceive=socket(AF_INET,SOCK_DGRAM,0);
sockSend=socket(AF_INET,SOCK_DGRAM,0);
FD_SET(sockReceive, &m_Sockets);
bind(sockReceive,(SOCKADDR*)&sinReceive,sizeof(sinReceive));
 
char buffer[50];
int sinsize=sizeof(33333);
 
timeval waiting = {20,0};
int res;
while(1)
{
res=select(FD_SETSIZE, &m_Sockets, NULL, NULL, &waiting);
if(res>0)
{
memset(buffer,0,sizeof(buffer));
recvfrom(sockReceive,buffer,sizeof(buffer),0,(SOCKADDR*)&sinReceive,&sinsize);
printf("Recu : %s\n",buffer);
sprintf (buffer, "172.17.96.51:33334", buffer);
sendto(sockSend,buffer,sizeof(buffer),0,(SOCKADDR*)&sinSend,sizeof(sinSend));
printf("Envoye : %s\n",buffer);
 
}
if(res<0)
{
printf("Socket error\n" );
}
else if(res==0)
{
printf("Temps attente passé\n" );
}
Sleep(100);
}
}
 
Console d'execution :
Port : 33333
Temps attente passé
Socket error
Socket error
Socket error
Socket error
Socket error
Socket error
....

mood
Publicité
Posté le 24-03-2006 à 18:26:22  profilanswer
 

n°1332009
xela2000
Posté le 24-03-2006 à 22:40:30  profilanswer
 

En fait, il faut réinitialiser le fd_set après chaque select()
FD_ZERO(&m_Sockets);  
FD_SET(sockReceive, &m_Sockets);


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  UDP winsock2 : Select problem

 

Sujets relatifs
Un SELECT à priori difficile<select
Affichage select count()[C] select avec les socket
[ASP.NET] Mon éternel problem de refresh...[Javascript] valeur d'un select sous IE
Liens "Select all - Deselect all" et liste de cases à cocher[VBA-W] Selection.Range.Select !!!???
couleur de texte dans <option></otpion> de <select>problem avec attachMovie
Plus de sujets relatifs à : UDP winsock2 : Select problem


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR