Salut, j'ai le programme suivant pour vérifier la taille du tampon d'envoi pour un socket UDP. Cependant, je la valeur de retour est un peu déroutant pour moi. J'utilise l'application simple suivante:
#include <sys/socket.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int sockfd, sendbuff;
socklen_t optlen;
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd == -1)
printf("Error");
int res = 0;
// Get buffer size
optlen = sizeof(sendbuff);
res = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);
if(res == -1)
printf("Error getsockopt one");
else
printf("send buffer size = %d\n", sendbuff);
// Set buffer size
sendbuff = 98304;
printf("sets the send buffer to %d\n", sendbuff);
res = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, sizeof(sendbuff));
if(res == -1)
printf("Error setsockopt");
// Get buffer size
optlen = sizeof(sendbuff);
res = getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &sendbuff, &optlen);
if(res == -1)
printf("Error getsockopt two");
else
printf("send buffer size = %d\n", sendbuff);
return 0;
}
La sortie sur ma machine est:
taille du tampon d'envoi = 129024
définit le tampon d'envoi sur 98304
taille du tampon d'envoi = 196608
Quelqu'un peut-il clarifier ce que je fais mal ici ou comment interpréter la sortie?
Vous ne faites rien de mal. Linux double la valeur (dans le noyau) lorsque vous le définissez et renvoie la valeur doublée lorsque vous l'interrogez. man 7 socket
dit:
[...] SO_SNDBUF Définit ou obtient le tampon d'envoi de socket maximum en octets. Le ker - Nel double cette valeur (pour laisser de l'espace pour la surcharge comptable) Lorsqu'il est défini à l'aide de setsockopt (), et cette valeur doublée est Renvoyée par getsockopt (). La valeur par défaut est définie par le Wmem_default sysctl et la valeur maximale autorisée est définie par le Wmem_max sysctl. La valeur minimale (doublée) pour cette option est 2048. [...] REMARQUES Linux suppose que la moitié de l'envoi/le tampon de réception est utilisé pour les structures internes du noyau ; ainsi les sysctls sont deux fois ce qui peut être observé sur le fil. [...]