El efecto de configurar SO_SNDBUF
la opción es diferente para TCP y UDP.
- Para UDP, esto establece el límite en el tamaño del datagrama , es decir, cualquier cosa más grande será descartada.
- Para TCP, esto solo establece el tamaño del búfer en el kernel para un socket determinado (con cierto redondeo al límite de la página y con un límite superior).
Dado que parece que está hablando de TCP, el efecto que está observando se explica porque el socket está en modo de bloqueo , entonces send(2)
bloques hasta que el núcleo pueda aceptar todos sus datos, y/o la red apila los datos de forma asíncrona y los empuja a la tarjeta de red, liberando así espacio en el búfer.
Además, TCP es un protocolo de flujo , no conserva ninguna estructura de "mensaje". Uno send(2)
puede corresponder a múltiples recv(2)
s en el otro lado, y al revés. Trátelo como flujo de bytes.
SO_SNDBUF
configura el búfer que la implementación del socket usa internamente. Si su socket no bloquea, solo puede enviar hasta el tamaño configurado, si su socket bloquea, no hay limitación para su llamada.