2010-01-27 6 views

Répondre

1

Il est somethng comme la taille de paquet maximale du réseau:

MTU

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) 
+0

"* la taille devrait venir en un coup *" Umm ... pourquoi ?! –

6
  1. Vous pouvez toujours limiter la taille du recv tampon() remplirait (paramètre)
  2. 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.