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

  FORUM HardWare.fr
  Programmation
  C

  Socket, recv, send et select qui ne marche pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Socket, recv, send et select qui ne marche pas

n°1397050
hugo25
Posté le 29-06-2006 à 10:52:07  profilanswer
 

Je réalise une fonction (sous linux) pour améliorer la fonction recv, notamment en gérant les paquet coupé en ethernet et un timeout :

Code :
  1. int recvPaquet(int sock, char *paquet, int longueur)
  2. {
  3.   int nbRecu = 0, nbRecu2 = 1;
  4.   int retval;
  5.   fd_set readfds;
  6.   struct timeval timeout;
  7.   FD_ZERO(&readfds);
  8.   FD_SET(sock, &readfds);
  9.   timeout.tv_sec = TIMEOUT;
  10.   timeout.tv_sec = 1;
  11.   timeout.tv_usec = 0;
  12.   retval = select(sock+1, &readfds, NULL, NULL, &timeout);
  13.   if (retval) {
  14.     nbRecu = recv(sock, paquet, longueur, 0);
  15.     // On gère le cas ou tous les caracteres voulu ne sont pas arrivées
  16.     nbRecu2= nbRecu;
  17.     while ((nbRecu > 0) && (nbRecu != longueur) && (nbRecu2 > 0)) {
  18.       paquet += nbRecu2;
  19.       nbRecu2 = recv(sock, paquet, longueur - nbRecu, 0);
  20.       if (nbRecu2 >= 0) {
  21. nbRecu += nbRecu2;
  22.       }
  23.       else {
  24. nbRecu = nbRecu2;
  25.       }
  26.     }
  27.     return nbRecu;
  28.   }
  29.   else {
  30.     printf("recvPaquet %d\n",retval);
  31.     return -1;
  32.   }
  33. }


 
J'ai fait la même chose pour la fonction send
 

Code :
  1. int sendPaquet(int sock, char *paquet, int longueurPaquet)
  2. {
  3.   int nbRecu = 0;
  4.   int retval;
  5.   fd_set readfds;
  6.   struct timeval timeout;
  7.   FD_ZERO(&readfds);
  8.   FD_SET(sock, &readfds);
  9.   timeout.tv_sec = TIMEOUT;
  10.   timeout.tv_sec = 10;
  11.   timeout.tv_usec = 0;
  12.   retval = select(sock+1, &readfds, NULL, NULL, &timeout);
  13.   if (retval) {
  14.     nbRecu = send(sock, paquet, longueurPaquet, 0);
  15.     printf("sendPaquet lg=%d send=%d\n",longueurPaquet,nbRecu);
  16.     return nbRecu;
  17.   }
  18.   else {
  19.     printf("sendPaquet ERREUR %d\n",retval);
  20.     return -1;
  21.   }
  22. }


 
La fonction recvPaquet marche bien. Les octets sont bien envoyés avec le fonction sendPaquet, mais immédiatement après le serveur coupe la communication. Je ne peux plus envoyer ou recevoir de données au serveur.  
Je voudrais verifier que la communication avec le serveur n'a pas été coupé avant d'envoyer. Ceci afin de rendre le send non bloquant.
Est-ce comme celà que je dois proceder ?


Message édité par hugo25 le 29-06-2006 à 11:07:10
mood
Publicité
Posté le 29-06-2006 à 10:52:07  profilanswer
 


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

  Socket, recv, send et select qui ne marche pas

 

Sujets relatifs
C# Socket LocalEndPoint : spécifier un port d'envoi (coté client)Problème envoie image + redimenssionnement : marche pas
Socket et SerialisationRemplir inputs via une liste deroulante(select)
test de selection sur un select multiple[C] socket sur une plage d'adresse IP
[SQLServer 2000] Select sur plusieurs BASES du même serveur[AJAX] Deux select liés entre eux
a: visited -> marche pas sous FF ![Résolu] [MySQL] SELECT sur plusieurs tables
Plus de sujets relatifs à : Socket, recv, send et select qui ne marche pas


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