In Linux, one can specify the system’s default receive buffer size for network packets, say UDP, using the following commands:
sysctl -w net.core.rmem_max=<value>
sysctl -w net.core.rmem_default=<value>
But I wonder, is it possible for an application (say, in c) to override system’s defaults by specifying the receive buffer size per UDP socket in runtime?
You can increase the value from the default, but you can’t increase it beyond the maximum value. Use
setsockoptto change theSO_RCVBUFoption:Note that this is the portable solution; it should work on any POSIX platform for increasing the receive buffer size. Linux has had autotuning for a while now (since 2.6.7, and with reasonable maximum buffer sizes since 2.6.17), which automatically adjusts the receive buffer size based on load. On kernels with autotuning, it is recommended that you not set the receive buffer size using
setsockopt, as that will disable the kernel’s autotuning. Usingsetsockoptto adjust the buffer size may still be necessary on other platforms, however.