Citation :
recv recoit parfois des messages d'une taille de 1448 Octets ((j= recv(i, buf, sizeof(buf), 0)) = 1448)(dépassement de la Max SDU qui est de 1500 dans le cas d'ethernet
|
- TCP ne garantit pas la séparation des messages. Seul UDP le fait: raisonner sur une zone data max de 1500 octets est faux. Tu n'en sais rien, TCP peut envoyer deux trames ethernet de 1000 et 500 plutot qu'une seule de 1500, suivant l'état du flux et la congestion. Vois TCP comme une pipe(), qui balance un flux (alors que UDP envoie des messages, et non un flux ordonné et garanti).
- rien de choquant à ce que recv retourne 1448 octets pour TCP, suivant ce qui est mis en cache dans le noyau. Si tu n'as pas lu suffisamment rapidement tes premiers 1000 octets et que les deuxièmes arrivent, tu auras 2000 octets à lire en tout dans le buffer, jusqu'a ce qu'il y ait congestion (et là, le noyau arrêtera de retourner les ACK et droppera manu militari les paquets).
- Si tu veux garantir que pour tes deux bouts, tu puisses garder la séparation des messages, fais toi une fonction nread(), qui lira 1000 octets, et pas plus, pas moins (tu lis 1000, tu retranches la quantité lue, et tu relis, jusqu'a ce que le total fasse 1000).
Message édité par Gf4x3443 le 10-03-2008 à 17:40:40