URL: https://linuxfr.org/forums/programmation-c--2/posts/sockets Title: Sockets... Authors: JaguarWan Date: 2004年12月28日T03:44:10+01:00 Tags: Score: 0 Bonjour à tous, J'ai fait une fonction qui gère des entrées formattées sur un socket UDP à la scanf, qui ne marche plus :( En fait, il y a une fonction qui gère l'interpretation du formattage, et qui appelle au fur et a mesure la fonction buggée pour lire ce dont elle a besoin. Je me suis aperçu que ça ne marchait jusqu'il y a peu que parce que j'envoyais mes structures champ par champ et non pas entièrement linéarisées (vieux bug qui s'était fait discret, le bougre). Depuis, je me bat avec recvfrom qui apparamment passe à la requête suivante dès que je l'appelle. Exemple : J'envoie une structure contenant un long (4 octets), un short, un long, et une chaine de 25 chars. Je swappe et je linéarise, et ça me fait 36 chars à envoyer d'un coup, alors qu'avec mon algo précédent j'aurais eu 4 requètes séparées. Problème : De l'autre coté, je récupère mon long en faisant un recvfrom (un vrai, avec flag 0) sur 4 octets, puis mon short avec 2 octets, et encore 4 octets pour le dernier long. Déjà, premier bug, à chaque fois je récupère les n premiers octets d'une nouvelle requête complète :( Ensuite, pour la chaîne, c'est encore plus amusant car je ne connais pas la longueur à l'avance. Je lis donc avec le flag MSG_SEEK pour ne pas enlever les données du buffer jusqu'à ce que je rencontre un NULL ou que recvfrom plante. Mais comme je suis mal positionné, je ne récupère jamais ma chaîne... :'( Solutions envisagées : * Un buffer et un indice conservés par la fonction appelante et passés par adresse ? (pas de static, mon programme est theadé) * Aller me coucher car il est bien tard (3:39 argh !) Là je ne sais plus trop quoi faire, alors que me suggérez vous ?