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

  FORUM HardWare.fr
  Programmation
  C

  Problème de buffer avec recv

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de buffer avec recv

n°1335120
Dinan
Posté le 29-03-2006 à 22:36:25  profilanswer
 

Bonjour,
 
Dans mon code j'ai :
 

Code :
  1. if ((err = recv(poll_list[i].fd, pSock, MAX_IO+1, 0)) < 1) {
  2.       if (poll_list[i].fd != s_listen) {
  3.        poll_list[i].fd = -1;
  4.        printf("Disconnected (%i)...\n", err);
  5.       }
  6.      } else {
  7.       // traitement de pSock
  8.       printf("recu de %i\n", poll_list[i].fd);
  9.       //pSock = NULL;
  10.      }
  11.     }


 
Comment est ce que je peut effacer pSock pour que dans ma boucle, son ancienne valeur ne revienne pas ?, pSock est défini ainsi : char *pSock = (char*)malloc(1+sizeof(char)*MAX_IO);
 
Le probleme quand je fait pSock = NULL, c'est que recv me retourne -1 a la prochaine boucle.
J'aimerais eviter de free et malloc a chaque boucle.
 
Merci :)

mood
Publicité
Posté le 29-03-2006 à 22:36:25  profilanswer
 

n°1335135
Emmanuel D​elahaye
C is a sharp tool
Posté le 29-03-2006 à 22:49:55  profilanswer
 

Dinan a écrit :

Code :
  1. if ((err = recv(poll_list[i].fd, pSock, MAX_IO+1, 0)) < 1) {


Comment est ce que je peut effacer pSock pour que dans ma boucle, son ancienne valeur ne revienne pas ?, pSock est défini ainsi :

Code :
  1. char *pSock = (char*)malloc(1+sizeof(char)*MAX_IO);



Il n'y a rien à effacer. Ce qui compte, c'est de tester le valeur retournée par recv(). C'est le nombre de bytes valides si il est > 0. On sait donc exactement où mettre le 0 si c'est une chaine.
 
Pour éviter le débordement, on passe une taille inférieure de 1 à recv().  Usage courant :  

Code :
  1. char data[128];
  2. int err = recv (fd, data, sizeof data - 1, 0);
  3. if (err >= 0)
  4. {
  5.    size_t n = err;
  6.    if (n != 0)
  7.    {
  8.       data[n] = 0;
  9.       printf ("received : '%s'", data);
  10.       fflush (stdout);
  11.    }
  12. }
  13. else
  14. {
  15.    /* erreur */
  16. }


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1335142
Dinan
Posté le 29-03-2006 à 22:57:56  profilanswer
 

Ha oui j'avait pas pensé à ca, merci ;)


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

  Problème de buffer avec recv

 

Sujets relatifs
Probleme de mise en page[SGBD/SQL] Oracle : PL/SQL, problème tout con
Probleme DIV scrollable dans un TableauProblème avec un onblur...
[résolu] Problème bouton / javascriptProblème de ponctuation ds un fichier texte dynamique ds flash
Problème Validation cssProbleme de cryptage de mot de passe
Probleme pour Modifier mon formulaire 
Plus de sujets relatifs à : Problème de buffer avec recv


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)