motohime | Bonjour.
j'ai un soucis en programmation réseau. j'ai réalisé la connexion client serveur tout se passe bien , cependant pour la suite ... c'est pas encore ça . j'ai ouvert une socket que j'appellerais " Socket1 "en émission réception , lorsque je fait les accept ( ) coté serveur , cela m'ouvre une nouvelle socket que j'appellerais " Socket2 " pour la connexion distante qui tentais de se connecter. Ensuite je fait un select sur "Socket 1" cela me retourne 2 . J'essaye donc de récupérer le message qui est envoyer et que le select a détecter, je fait donc un recvfrom avec la "socket1" mais a ce moment la ça me retourne -1.
j'ai donc fait un perror ( "recvfrom" ); et il me log: NO ERROR....
serais ce possible de m'expliquer où ce trouve mon erreur plz ?
Merci d'avance
voici plus concrétement le code:
Code :
- while ( !bClose )
- {
- ID_IP.clear ( );
- //Verouille le mutex
- WaitForSingleObject ( myMutex, NULL );
- //Recuperation des données des utilisateurs connectés
- TheServer->Get_myID_Ip_User ( ID_IP );
- //Lock le mutex
- ReleaseMutex ( myMutex );
- if ( !ID_IP.empty ( ) )
- {
- //Creation d'un iterateur au debut de la map
- kstl::map < int, CONNEXION* >::iterator It = ID_IP.begin ( );
- fd_set Set_Read;
- fd_set Set_Exept;
- fd_set Set_Write;
- struct timeval tv;
- struct sockaddr_in SenderInfo;
- SenderInfo.sin_family = AF_INET;
- tv.tv_sec = 0;
- tv.tv_usec = 10000;
- //Parcour de la map
- while ( It != ID_IP.end ( ) )
- {
- FD_ZERO ( &Set_Read );
- FD_ZERO ( &Set_Exept );
- FD_ZERO ( &Set_Write );
- FD_SET ( ( *It ).second->Socket, &Set_Read );
- FD_SET ( ( *It ).second->Socket, &Set_Write );
- FD_SET ( ( *It ).second->Socket, &Set_Exept );
- It++;
- }
- int iValue = select ( 0, &Set_Read, &Set_Write, &Set_Exept, &tv );
- if ( iValue )
- {
- kstl::map < int, CONNEXION* >::iterator It = ID_IP.begin ( );
- while ( It != ID_IP.end ( ) )
- {
- if ( FD_ISSET ( ( *It ).second->Socket, &Set_Read ) )
- {
- int test = 1;
- //Sauvegarder la connexion en lecture
- }
- if ( FD_ISSET ( ( *It ).second->Socket, &Set_Write ) )
- {
- int test = 1;
- //Sauvegarder la connexion en ecriture
- }
- if ( FD_ISSET ( ( *It ).second->Socket, &Set_Exept ) )
- {
- int test = 1;
- //Sauvegarder la connexion en erreur
- }
- It ++;
- }
- }
- char tab [1024*10] = {0};
- int lenght = sizeof ( &SenderInfo );
- kstl::map < int, CONNEXION* >::iterator It2 = ID_IP.begin ( );
- int iReceiveLenght = recvfrom ( mySocket, tab, 1024*10, 0, ( struct sockaddr* ) &SenderInfo, &lenght ); // mySocket correspond a la socket ouverte en emission reception sur le serveur ( TCP ) ( "Socket1" dans ma description )
- if ( iReceiveLenght > 0 )
- {
- printf ( "Paquet recu\n" );
- }
- else
- {
- perror( "recvfrom" );
- printf ( "Paquet non recu\n" );
- }
- }
- }
- return 0;
|
|