Effet de SO_SNDBUF

Je suis incapable de permettre de comprendre comment et pourquoi le code suivant des segments de travail :

    /* Now lets try to set the send buffer size to 5000 bytes */
    size = 5000;
    err = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF,  &size, sizeof(int));
    if (err != 0) {
        printf("Unable to set send buffer size, continuing with default size\n");
    }

Si nous vérifions la valeur de la mémoire tampon d'envoi, il est en effet correctement fixé à 5 000*2 = 10000.
Cependant, si nous essayons de nous envoyer de plus que la taille du tampon d'envoi, c'est tout. Par exemple:

    n = send(sockfd, buf, 30000, 0);

    /* Lets check how much us actually sent */
    printf("No. of bytes sent is %d\n", n);

Ce imprime 30000.

Comment exactement fait ce travail? N'avais pas le fait que la taille du tampon d'envoi a été limitée à 10000 ont aucun effet? Si elle l'a fait, ce qui s'est exactement passé? Une sorte de fragmentation?

Mise à JOUR: Ce qui se passe si le socket est en mode sans blocage? J'ai essayé le suivant:

  1. Changement de taille de la mémoire tampon à 10000 (5000*2) les causes de 16384 octets à envoyer
  2. Changement de taille de la mémoire tampon à 20000 (10000*2) causes 30000 octets à envoyer

Encore une fois, pourquoi?

OriginalL'auteur Arun | 2011-11-13