Quelle est la taille de données maximale à laquelle on devrait s'attendre dans une opération de réception? Les données qui doivent être envoyées sont très volumineuses, mais à un moment donné, il y aura une fragmentation des paquets, je suppose?Taille de la mémoire tampon de réception pour les sockets tcp/ip
Répondre
Il est somethng comme la taille de paquet maximale du réseau:
cela indique la taille maximale de la mémoire tampon de niveau bas (3 couches ISO/OSI IP) pendant le transfert de données sur le réseau (pas de bouclage). Qui est généralement 1492 dans les réseaux Ethernet.
Il est donc important d'optimiser le transfert de données à la taille de ce montant.
(il y a aussi appelés ainsi Jumbo frames qui brise cette règle, mais il doit y avoir un logiciel/matériel qui accepte que)
Cependant recv simple() sur socket, peut revenir plus d'octets que MTU. Vous devez donc transférer le premier paquet avec la taille des données restantes.
size = recv(512) // size should came in one shot
while(count(data) == size) // the rest of actual data can came sliced, so You should receive until size
data[offset] = recv(size)
- Vous pouvez toujours limiter la taille du recv tampon() remplirait (paramètre)
- Votre conception de l'application ne devrait pas être sensible à la quantité d'octets recv() est disposé à fournir dans un appel.
Cela a peu à voir avec MTU. Dans certaines conceptions de pile TCP, un appel à recv() ne renverrait pas plus d'un datagramme de protocole de paquet sous-jacent. Dans d'autres, il peut être aussi grand que le tampon de réception du socket.
"* la taille devrait venir en un coup *" Umm ... pourquoi ?! –