HomeFreeBSD

Fix poor performance of ftp(1) due to small SO_SNDBUF and SO_RCVBUF.

Description

Fix poor performance of ftp(1) due to small SO_SNDBUF and SO_RCVBUF.

ftp(1) from vendor/tnftp always tried the following for
every TCP connection:

  1. Get the current buffer length of SO_SNDBUF and SO_RCVBUF by getsockopt(2).
  1. Invoke setsockopt(2) to set them to the same values after checking if they are in a range between 8 KiB to 8 MiB.

This behavior broke dynamic buffer sizing enabled by
default (net.inet.tcp.{recv,send}buf_auto sysctls) and
led to a very poor transfer rate. The fetch(1) utility
does not have this problem.

This change prevents SO_SNDBUF and SO_RCVBUF from configuring
when the buffer auto-sizing is enabled unless the buffer sizes are
explicitly specified.

PR: 240827
Spotted by: Yuichiro NAITO
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D23732