Cuando llamo a setsockopt con SO_RECVBUF, luego me doy la vuelta y llamo a getsockopt con SO_RECVBUF, parece decirme que establece el tamaño del búfer al doble de lo que solicité. Alguien sabe porque puede ser?
código en cuestión:
https://gist.github.com/rdp/8443238
producción:
setting it as 2222 [udp @ 0x1a72ec0] end receive buffer size reported is 4444Solo en Linux, en otros sistemas operativos parece informarlo como el valor que configuré. Gracias.
Extracto de la página man de Linux para socket
SO_SNDBUF
Establece u obtiene el búfer de envío de socket máximo en bytes. El kernel duplica este valor (para dejar espacio para los gastos generales de contabilidad) cuando se establece mediante setsockopt(2), y getsockopt(2) devuelve este valor duplicado. El valor predeterminado lo establece el archivo /proc/sys/net/core/wmem_default y el valor máximo permitido lo establece el archivo /proc/sys/net/core/wmem_max. El valor mínimo (doblado) para esta opción es 2048.
Entonces, kernel duplica el valor que establece para su propósito interno.
La plataforma puede ajustar el valor que proporciona hacia arriba o hacia abajo. Consulte la página del manual. Estabas por debajo del mínimo de la plataforma.
2222 es demasiado bajo. Debería ser más como 32k.