L'effet du réglage SO_SNDBUF
l'option est différente pour TCP et UDP.
- Pour UDP, cela définit la limite de la taille du datagramme , c'est-à-dire que tout ce qui est plus grand sera jeté.
- Pour TCP, cela définit simplement la taille du tampon dans le noyau pour un socket donné (avec quelques arrondis à la limite de la page et avec une limite supérieure).
Puisqu'il semble que vous parliez de TCP, l'effet que vous observez s'explique par le fait que le socket est en mode bloquant , donc send(2)
bloque jusqu'à ce que le noyau puisse accepter toutes vos données, et/ou que la pile réseau retire de manière asynchrone les données et les pousse vers la carte réseau, libérant ainsi de l'espace dans la mémoire tampon.
De plus, TCP est un protocole de flux , il ne conserve aucune structure de "message". Un send(2)
peut correspondre à plusieurs recv(2)
s de l'autre côté, et dans l'autre sens. Traitez-le comme un flux d'octets.
SO_SNDBUF
configure le tampon que l'implémentation de socket utilise en interne. Si votre socket n'est pas bloquant, vous ne pouvez envoyer que jusqu'à la taille configurée, si votre socket est bloquant, il n'y a aucune limitation pour votre appel.