Specifying UDP receive buffer size at runtime in Linux

Active3 hr before
Viewed126 times

6 Answers


In Linux, one can specify the system's default receive buffer size for network packets, say UDP, using the following commands:, Stack Overflow for Teams Where developers & technologists share private knowledge with coworkers ,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?, Jobs Programming & related technical career opportunities

You can increase the value from the default, but you can't increase it beyond the maximum value. Use setsockopt to change the SO_RCVBUF option:

int n = 1024 * 1024;
if (setsockopt(socket, SOL_SOCKET, SO_RCVBUF, & n, sizeof(n)) == -1) {
   // deal with failure, or ignore if you can live with the default size

This sets the max OS receive buffer size for all types of connections.,I've tried to increase the receive buffer maximum size in /etc/sysctl.conf:, Why do we ignore the second-order terms in the following expansion? ,Making statements based on opinion; back them up with references or personal experience.


sysctl - w net.core.rmem_max = 8388608

If your server does not seem to be able to receive UDP traffic as fast as it can receive TCP traffic, it could be because Linux, by default, does not set the network stack buffers as large as they need to be to support high UDP transfer rates. One way to alleviate this problem is to allow more memory to be used by the IP stack to store incoming data. For instance, use the commands:

sysctl - w net.core.rmem_max = 262143


sysctl - w net.core.rmem_default = 262143
load more v

One of the most common causes of UDP datagram lost on Linux is an undersized receive buffer on the Linux socket. How to enlarge Linux UDP buffer size?,How to enlarge root partition and filesystem size of cloud Linux VM at runtime without rebooting Linux ,Reference: Improving UDP Performance by Configuring OS UDP Buffer Limits. It also provides methods for changing UDP buffer sizes on Solaris, FreeBSD, Darwin and AIX.,On Linux, you can change the UDP buffer size (e.g. to 26214400) by (as root):

On Linux, you can change the UDP buffer size (e.g. to 26214400) by (as root):

sysctl - w net.core.rmem_max = 26214400
load more v

Example 5-2 Setting the UDP Buffer Size at Runtime,Example 5-1 Setting the UDP Buffer Size in the /etc/sysctl.conf File,On Linux systems, a default UDP buffer size is set for the client, but not for the server. Therefore, on Linux systems, the UDP buffer size might have to be increased. Setting the UDP buffer size involves setting the following kernel parameters:,This example sets the kernel parameters for controlling the UDP buffer size to 524288 at runtime.

To set the parameters in the /etc/sysctl.conf file, add or edit the following lines in the file:

net.core.rmem_max = rmem - max
net.core.wmem_max = wmem - max
net.core.rmem_default = rmem -
net.core.wmem_default = wmem -
load more v

I took the source from the link above and built it. It was built normally, changed the /usr/bin/caddy file and restarted the caddy service., Terms of Service ,See the adapted JSON (which you can get by running caddy adapt --pretty on your Caddyfile):

b. Command:

service caddy start

c. Service/unit/compose file:

Description = Caddy
Documentation = https: //caddyserver.com/docs/
   After = network.target network - online.target
Requires = network - online.target

User = caddy
Group = caddy
ExecStart = /usr/bin / caddy run--environ--config / etc / caddy / Caddyfile
ExecReload = /usr/bin / caddy reload--config / etc / caddy / Caddyfile
TimeoutStopSec = 5 s
LimitNOFILE = 1048576
LimitNPROC = 512
PrivateTmp = true
ProtectSystem = full
AmbientCapabilities = CAP_NET_BIND_SERVICE

WantedBy = multi - user.target

d. My complete Caddyfile or JSON config:

   servers {
      protocol {

zzori.com www.zzori.com {
   header {
      # enable HSTS
      Strict - Transport - Security max - age = 31536000;

      # disable clients from sniffing the media type
      X - Content - Type - Options nosniff

      # clickjacking protection
      X - Frame - Options DENY

      # keep referrer data off of HTTP connections
      Referrer - Policy no - referrer - when - downgrade

   root * /home/zzori / zzori.com
   encode zstd gzip
   php_fastcgi unix //run/php/php8.0-fpm.sock

   log {
      format single_field common_log
      output file /
         var / log / caddy / zzori.com.log {
            roll_size 50 mb
            roll_keep 8
            roll_keep_for 720 h
load more v

The following are subtleties associated with the dnsbuf module:,The following console commands are specific to the dnsbuf module.,The following are limitations of the dnsbuf module:,The SO_SNDBUF value is set to this value for all UDP DNS sockets in the Momentum DNS implementation. Minimum value is 1024. Note that in Linux the value in the kernel is automatically doubled; e.g., when a value of 65536 is configured in the module, the kernel will implement a buffer size of 131072.

dnsbuf {
   sndbuf_size = "65536"
   # Default value is 131072
   rcvbuf_size = "65536"
   # Default value is 131072
   interval = "30"
   # Default value is 60 seconds


while sleep 1;
do(netstat--udp - s | grep error; echo summary |
   /opt/msys / ecelerity / bin / ec_console | grep DNS);

1559857 packet receive errors
DNS A Queries: 924801
DNS AAAA Queries: 0
DNS MX Queries: 907577
Pending DNS Queries: 312

1559857 packet receive errors
DNS A Queries: 924803
DNS AAAA Queries: 0
DNS MX Queries: 907849
Pending DNS Queries: 43

1560125 packet receive errors
DNS A Queries: 924803
DNS AAAA Queries: 0
DNS MX Queries: 908388
Pending DNS Queries: 311
load more v

Other "specifying-receive" queries related to "Specifying UDP receive buffer size at runtime in Linux"