2011-09-06 6 views
1

En supposant que dans UDP, je sache que les paquets que je reçois sont de 200 octets chacun.Question sur la mise en mémoire tampon UDP lors de la réception de paquets

En C Programmation socket:

n = recvfrom(sockfd,mesg,1000,0,(struct sockaddr *)&cliaddr,&len); 

si je définis le buffersize 1000. Est-ce que cela signifie que je peux reçu 5 paquets à chaque fois? Ou je recevrai seulement 1 paquet et les 800 octets restants dans mon tampon sont inutilisés?

tks!

Répondre

2

Si vous savez que vos paquets ne dépasseront JAMAIS 200 octets, il n'est pas nécessaire de déclarer votre tampon plus grand que 200 octets.

Chaque recvfrom() recevra AT MOST un paquet. Les paquets restants sont tamponnés par la pile. Il n'y a vraiment aucune "pénalité de performance" de lire plusieurs paquets dans une boucle "while()".

+0

C'est juste mais il pourrait être agréable d'ajouter des références ... –

+0

Merci a répondu exactement à ma question. En ce qui concerne la pile, est-ce géré au niveau du noyau ou de la carte réseau? – Wrythe

+0

"La pile réseau" est la compétence de l'OS. – paulsm4

1

Sur un socket UDP, recvfrom() ne retournera des données que d'un seul paquet à la fois.

Questions connexes