2008-08-25 7 views

Répondre

1

Comme UDP n'est pas orienté connexion, il n'y a aucun moyen d'indiquer que deux paquets appartiennent ensemble. Par conséquent, vous êtes limité par la taille maximale d'un seul paquet IP (65535). Les données que vous pouvez envoyer sont un peu moins nombreuses, car la taille des paquets IP inclut également l'en-tête IP (généralement 20 octets) et l'en-tête UDP (8 octets).

Notez que ce paquet IP peut être fragmenté pour tenir dans des paquets plus petits (par exemple ~ 1500 octets pour Ethernet).

Je ne suis pas au courant d'un système d'exploitation limitant cela davantage.

11

Utilisez getsockopt(). This site a une bonne répartition de l'utilisation et des options que vous pouvez récupérer.

Sous Windows, vous pouvez faire:

 
int optlen = sizeof(int); 
int optval; 
getsockopt(socket, SOL_SOCKET, SO_MAX_MSG_SIZE, (int *)&optval, &optlen); 

Pour Linux, selon la page de manuel UDP, le noyau utilisera la découverte MTU (il va vérifier ce que la taille du paquet UDP maximale est entre ici et la destination , et choisissez cela), ou si la découverte MTU est désactivée, la taille maximale de l'interface MTU sera définie et tout fragment plus important. Si vous envoyez via Ethernet, le MTU typique est de 1500 octets.

5

Sur Mac OS X, il existe différentes valeurs pour l'envoi (SO_SNDBUF) et la réception (SO_RCVBUF). Ce est la taille de la mémoire tampon d'envoi (man getsockopt):

getsockopt (chaussette, SOL_SOCKET, SO_SNDBUF, (int *) & optval, & optlen);

Si vous tentez d'envoyer un message plus volumineux (sur Leopard 9216 octets sur UDP envoyé via le bouclage local), le message "Message too long/EMSGSIZE" sera généré.

Questions connexes