getsockopt SO_RECVBUF after doing a set shows double the value in linux?

2k views Asked by At

When calling setsockopt with SO_RECVBUF, then turning around and calling getsockopt with SO_RECVBUF, it appears to be telling me that it sets the buffer size to twice what I requested it to be set to. Anybody know why that may be?

code in question:

https://gist.github.com/rdp/8443238

output:

setting it as 2222
[udp @ 0x1a72ec0] end receive buffer size reported is 4444

Only in linux, on other OS's seem to report it as the value I set it to. Thank you.

2

There are 2 answers

0
Khaled On BEST ANSWER

Excerpt from Linux man page for socket

SO_SNDBUF

Sets or gets the maximum socket send buffer in bytes. The kernel doubles this value (to allow space for bookkeeping overhead) when it is set using setsockopt(2), and this doubled value is returned by getsockopt(2). The default value is set by the /proc/sys/net/core/wmem_default file and the maximum allowed value is set by the /proc/sys/net/core/wmem_max file. The minimum (doubled) value for this option is 2048.

So, kernel doubles the value you set for it's internal purpose.

3
user207421 On

The platform can adjust the value you supply up or down. See the man page. You were below the platform minimum.

2222 is far too low. It should be more like 32k.