URL: https://linuxfr.org/forums/programmation-c--2/posts/les-sockets-et-la-taille-en-reception Title: Les Sockets, et la taille en reception Authors: Snarky Date: 2007年12月03日T21:28:48+01:00 Tags: tcp-me Score: 0 Bonjour à tous, Voici des années que je planche sur un gros problème avec les sockets en C, et je me décide enfin a poser la question parce que je ne trouve jamais rien de satisfaisant. Comment récupérer de façon fiable une trame réseau ? Mon problème est que je n'ai jamais réussi à être certain de la quantité de donné à lire pour obtenir complètement UNE trame. Soit j'en lis trop, soit pas assez. Je pensais avoir résolu le problème avec un `ioctl(m_socket, FIONREAD, &toread)`, qui me donner la bonne taille dans la plupart des cas, mais je viens de m'apercevoir que si la trame est grosse (> 40000 octets) j'ai fréquement une taille plus petite. Je me doute que c'est normal, car ça me renvoie la taille de ce qui est contenu dans le buffer, et que dans certain cas, tout n'est pas encore arrivé quand j'utilise cette fonction. Mais je ne peux pas lire avec un while, car quand les trames s'enchainent, des fois, j'ai le début de la trame suivante à la fin de ma trame. Mais dans ce cas, COMMENT savoir quand je dois arrêter de lire ma socket ? Y'a t-il une fonction miracle qui m'envoie un équivalent d'un EOF quand je suis au bout de ma trame, où autre chose dans ce genre ? Pour tout dire, dans un protocole fait maison, j'avais même ajouter dans les 4 premiers octets le nombre d'octets qui suivait pour savoir quoi lire. Mais ici, je fait un mini serveur HTTP, et donc, je ne peux évidement pas toucher aux trames issues des navigateurs. Donc, comment faire quand j'ai un grosse requête (oui, oui, j'arrive a en faire des grosses, avec les textarea). Je vous remercie beaucoup si vous pouviez me soulager de ce problème que je n'ai jamais réussi a résoudre. Snarky