Pb Fin de transmission recv

Signaler
Messages postés
5
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
5
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
-
Voila, il y a quelque chose que je ne comprends pas :
La fonction recv devient bloquante ds certain cas et pas d'autres ; je m'explique :

Si j'envoie ca :
    char instruc[TAILLE_INSTRUC];
    fgets (instruc, TAILLE_INSTRUC, stdin);   instruc[strlen(instruc)-1] = '\0';
    sendPacket(instruc,sizeof(instruc));

(TAILLE_INSTRUC=256)

La commande récupérée est bien celle que j'ai saisie au clavier,

par contre je mets ca :

    char* instruction = (char*) malloc (256);
    strcpy(instruction,"/quit");
    instruction[255] = '\0';
    cli1->sendInstruction(instruction,256);
Et bien là, recv fait une lecture et se bloque après ! (recv dans un while)

Je pense que je ne formate pas bien ma variable instruction contrairement à fgets !
Je ne pense pas que la suite du code soit important sauf si quelqu'un le souhaite.

Merci d'avance !

2 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
As-tu essayé, dans le code défaillant, de mettre le 0 de fin de chaîne juste après l'instruction, et de n'envoyer que la taille de l'instruction ? Parce que là il peut y avoir n'importe quoi dans la chaîne totale genre "/quit@@@@iytfitfugv..." Faudrait voir la boucle de recv, mais si tu testes si c'est égal à "/quit" pour quitter c'est normal que ça plante.
Messages postés
5
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007

Merci pour ta réponse, en fait j'en ai eu marre de ne pas comprendre ; dans ma boucle while (recv ....) j'ai mi un booléen, si je détecte qu'il y a un '\0' c'est que c'est le dernier paquet de la réception, je sors et je continue mon processus !

Donc plus de problème, c'est pas très beau mais ca me suffit pour mon utilisation, merci en tout cas !