Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Nov 2015 16:32:46 -0700
From:      Cameron Sparr <cameronsparr@gmail.com>
To:        freebsd-arch@freebsd.org
Subject:   setsockopt() and kern.ipc.maxsockbuf
Message-ID:  <CAJsN804W3JrQQf1OvrpSdvxgGCiGY%2BcV5L=toCLT56uxwempuQ@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
Hello,

I'm not sure if this is the correct place to do it, but I'd like to put out
a proposal for changing the way that the setsockopt() function handles the
max socket buffer setting.

Currently, it's a bit unintuitive that SO_RCVBUF & SO_SNDBUF can not
actually be set to the kern.ipc.maxsockbuf value, even though it is
described as being possible in the man page:
https://www.freebsd.org/cgi/man.cgi?query=setsockopt&sektion=2

This is because setsockopt() will error out if the value passed is over the
_adjusted_ maximum, which on my system (amd64) turns out to be something
like kern.ipc.maxsockbuf * 0.889 (kern.ipc.maxsockbuf * (1 << 11) / (256 +
(1 << 11)) = kern.ipc.maxsockbuf * (2048) / (2304)).

see here:
https://github.com/freebsd/freebsd/blob/master/sys/kern/uipc_sockbuf.c#L420
and here:
https://github.com/freebsd/freebsd/blob/master/sys/kern/uipc_sockbuf.c#L63-L64

I believe that the behavior could be made more intuitive by checking if the
value passed is under the _actual_ max before erroring out, and if it is
under the actual max, then set it to the adjusted max and continue the
function, this would be a simple change and would look something like this
(apologies for the whitespace diffs):

https://github.com/sparrc/freebsd/commit/157f90c55d1d54d33f41c6f7517de1a9c5f5e229

Also, I'm a newb to the freebsd mailing lists, so please let me know if
this sort of request should go elsewhere.

Thanks all,
Cameron



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJsN804W3JrQQf1OvrpSdvxgGCiGY%2BcV5L=toCLT56uxwempuQ>