Page MenuHomeFreeBSD

Bug 204438 - setsockopt() handling of kern.ipc.maxsockbuf limit
Needs ReviewPublic

Authored by on Nov 11 2015, 10:23 PM.


Group Reviewers
Contributor Reviews (base)

changing the way that the setsockopt() function handles the max socket buffer setting.

Currently, it's a bit unintuitive that socket send and receive buffers (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:

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:
and here:

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):

FWIW, the linux kernel takes it a step further by never failing if setting the buffer over the maximum. It just takes whatever value it's given and sets it to min(given_value, max_value). see here: Not saying this is a good option, just pointing out that there is a precedent for doing something like this.

Diff Detail

Lint Skipped
Unit Tests Skipped

Event Timeline retitled this revision from to Bug 204438 - setsockopt() handling of kern.ipc.maxsockbuf limit. updated this object. edited the test plan for this revision. (Show Details) set the repository for this revision to rS FreeBSD src repository. removed rS FreeBSD src repository as the repository for this revision.

spaces to tabs

mmokhi added a subscriber: mmokhi.Feb 4 2016, 5:42 PM