From: Douglas Silva Subject: Re: net/syncthing: failed to increase receive buffer size (quic-go) To: Stuart Henderson Cc: Edd Barrett , "ports@openbsd.org" , "edd@openbsd.org" , Klemens Nanni Date: Mon, 16 Feb 2026 17:57:09 +0000 The quic-go maintainer said that 2 MB is not enough. [1] Is there any chance we can change the OpenBSD kernel to allow larger buffer sizes? Otherwise, I think I'll replace those instructions with a note explaining that QUIC will not work. [1] https://github.com/quic-go/quic-go/issues/3476#issuecomment-3831234358 On Sunday, February 1st, 2026 at 12:23, Douglas Silva wrote: > Hi, I've applied the suggested changes. Diff's below. > > > can the linux code be ported across? (we don't have > > SO_RCVBUFFORCE which ignore the max limit, but > > SO_RCVBUF will at least allow up to 2MB). if so, > > doing that (and changing the amount it's trying to > > raise to cap it to 2MB on OpenBSD, or at least > > retry capped to 2MB if it fails) is a better > > approach than telling the user to unilaterally > > raise the socket buffer for all programs via sysctl. > > I've also sent that suggestion to quic-go. I wish I > could make a PR, but I don't feel confident with Go. > > [1] https://github.com/quic-go/quic-go/issues/3476#issuecomment-3831146698 > > > Index: pkg/README > =================================================================== > RCS file: /cvs/ports/net/syncthing/pkg/README,v > diff -u -p -u -p -r1.9 README > --- pkg/README 1 Jan 2026 22:24:37 -0000 1.9 > +++ pkg/README 1 Feb 2026 15:13:22 -0000 > @@ -22,8 +22,8 @@ Starting via RC script > Syncthing can be started via the included RC script, thus running > Syncthing as a system service. This is fine for single user > configurations. Under this mode of operation, Syncthing runs as the > -_syncthing user, and the default location for folders is > -${LOCALSTATEDIR}/syncthing. > +_syncthing user (or whatever `syncthing_user` is set to in RC), and > +the default location for folders is ${LOCALSTATEDIR}/syncthing. > > Starting Manually > ----------------- > @@ -45,6 +45,17 @@ This will result in a new tmux(1) sessio > boot. The user can later use `tmux attach` to view and control their > Syncthing process. > > +Logging > +======= > + > +By default, logs are not saved anywhere; but you can read the logs > +for the current session on the web GUI. > + > +To log to a file, set these flags: > + > + # rcctl set syncthing flags --log-file /var/log/syncthing/syncthing.log \ > + --log-max-old-files 5 --log-max-size 2000000 > + > File Descriptor Limits > ====================== > > @@ -87,3 +98,22 @@ Another option is to turn off the file w > This will result in much reduced file descriptor usage at the cost of a > (configurable) latency. See "watch for changes" and "full rescan interval" in > the "advanced" tab in a folder's settings (on the web UI). > + > +UDP Buffer Size > +=============== > + > +Syncthing uses quic-go for QUIC transport. On other platforms, it is > +able to increase the UDP buffer size automatically on startup; but it does > +not have an implementation for OpenBSD, so you get this warning instead: > + > + 2026-01-24 12:33:01 INF failed to increase receive buffer size > + (wanted: 7168 kiB, got 0 kiB). See > + https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details. > + > +This can be manually raised system-wide by setting a sysctl. Note that the > +maximum size is 2097152 (~2 MB), which is well below what quic-go expects. > +Hopefully it should be enough for it to minimally function. > + > + # sysctl net.inet.udp.recvspace=2097152 > + > +This can be set at boot in sysctl.conf(5). > > > > > > > > > On Monday, January 26th, 2026 at 12:34, Stuart Henderson wrote: > > > > > > > > > > > On 2026/01/26 13:24, Douglas Silva wrote: > > > > > +By default, logs are not saved anywhere; but you can read the logs > > > +for the current session on the web GUI. > > > + > > > +To log to a file, use `syncthing_flags`. Example: > > > + > > > + syncthing_flags="--log-file /var/log/syncthing/syncthing.log --log-max-old-files 5 --log-max-size 2000000" > > > > > > the recommended interface is 'rcctl set' for this, also wrap the line > > e.g. > > > > rcctl set syncthing flags --log-file /var/log/syncthing/syncthing.log \ > > --log-max-old-files 5 --log-max-size 2000000 > > > > > +UDP Buffer Size > > > +=============== > > > > > > can the linux code be ported across? (we don't have SO_RCVBUFFORCE which > > ignore the max limit, but SO_RCVBUF will at least allow up to 2MB). > > if so, doing that (and changing the amount it's trying to raise to > > cap it to 2MB on OpenBSD, or at least retry capped to 2MB if it fails) > > is a better approach than telling the user to unilaterally raise the > > socket buffer for all programs via sysctl. > > > > there's certainly no point warning above 2MB, the OS won't accept it, > > so there's nothing the user can do. > > > > if the code can't be changed, ... > > > > > +quic-go requests about 8 MB of UDP buffer space. On some platforms, it is able to increase the limit automatically on startup. On OpenBSD this fails with the following warning: > > > + > > > + 2026-01-24 12:33:01 INF failed to increase receive buffer size (wanted: 7168 kiB, got 0 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details. > > > + > > > +We can manually increase it by changing `net.inet.udp.recvspace`. Unfortunately, this limit can only be raised to a maximum of 2097152 (approx. 2 MB). For context, see the discussion at https://github.com/quic-go/quic-go/issues/3476. > > > + > > > + # sysctl net.inet.udp.recvspace=2097152 > > > + > > > +Add that to sysctl.conf(5) to permanently set it. > > > > > > text needs word-wrapping. > > > > it doesn't attempt to change the limit at all on OpenBSD, there is > > simply no code for it, so saying that it has "failed" doesn't quite > > sit right... > > > > --- > > syncthing uses quic-go for QUIC transport. This wants to increase UDP > > socket buffers, however it does not has an OpenBSD implementation to > > actually do this, and otherwise logs a warning, e.g.: > > > > INF failed to increase receive buffer size (wanted: 7168 kiB, got 0 kiB). > > See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details. > > > > This can be manually raised for the entire system by setting a sysctl. > > The maximum available is 2097152 (2MB). > > > > # sysctl net.inet.udp.recvspace=2097152 > > > > This can be set at boot in sysctl.conf(5). > > --- > > > > > > > On Sunday, January 25th, 2026 at 13:00, Douglas Silva doug.hs@proton.me wrote: > > > > > > > Hi, > > > > > > > > When you start Syncthing, one of the first log entries is this warning: > > > > > > > > 2026-01-24 12:33:01 INF failed to increase receive buffer size (wanted: 7168 kiB, got 0 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details. > > > > > > > > The linked wiki page explains that quic-go tries to automatically increase the buffer size on some platforms (not BSDs), and it has instructions for manually doing it on others; but the section on BSDs doesn't apply to OpenBSD. There is an open issue [1] about it. > > > > > > > > Someone there has figured out that the sysctl variable to change here is "net.inet.udp.recvspace", but it can only be increased to about 2 MB (2097152) — well below the target 7.5 MB (8441037). I have no idea whether quic-go is able to work properly with this. Either way, the warning persists. > > > > > > > > So, my idea is to: > > > > > > > > 1. Modify our package README with instructions to increase the buffer size to maximum. > > > > 2. Silence the warning by setting the variable "QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING" [2] [3] > > > > > > > > What do you think? > > > > > > > > [1] https://github.com/quic-go/quic-go/issues/3476 > > > > [2] https://github.com/quic-go/quic-go/blob/4a8af22606c2d237da39212a734b80026a9a0bb0/sys_conn.go#L59 > > > > [3] https://github.com/quic-go/quic-go/issues/3801#issuecomment-1882365505 > > > > > > On 2026/01/26 14:25, Edd Barrett wrote: > > > > > Hi, > > > > > > On Mon, Jan 26, 2026 at 01:24:45PM +0000, Douglas Silva wrote: > > > > > > > Below are my proposed additions to the README file, assuming we don't want to silence the warning. > > > > > > > > I've added a short section on logging too. > > > > > > Looks good, but please wrap long lines at column 80 (as mentioned in > > > README.template). > > > > > > Also, from memory QUIC is optional, and syncthing will work without it. Is it > > > worth mentioning this? > > > > > > -- > > > Best Regards > > > Edd Barrett > > > > > > https://www.theunixzoo.co.uk