Set the socket buffers through the force options alone instead of falling back to the capped ones

This commit is contained in:
flamingcow
2026-08-04 22:01:10 -07:00
parent 4c7062d600
commit dd94f4cab5
+5 -9
View File
@@ -15,13 +15,9 @@ type mmsghdr struct {
func htons(v uint16) uint16 { return v<<8 | v>>8 }
func setBufForce(fd, forceOpt, opt, size int) error {
if err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, forceOpt, size); err == nil {
return nil
}
return unix.SetsockoptInt(fd, unix.SOL_SOCKET, opt, size)
}
// Set through the FORCE options alone: the plain ones are clamped to wmem_max
// and rmem_max, so falling back to them would quietly leave a fraction of this
// and go on measuring as though it had not.
const (
sndbufBytes = 8 << 20
rcvbufBytes = 64 << 20
@@ -40,7 +36,7 @@ func openTxSocket(ifindex int) (int, error) {
unix.Close(fd)
return -1, fmt.Errorf("qdisc bypass: %w", err)
}
if err := setBufForce(fd, unix.SO_SNDBUFFORCE, unix.SO_SNDBUF, sndbufBytes); err != nil {
if err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_SNDBUFFORCE, sndbufBytes); err != nil {
unix.Close(fd)
return -1, fmt.Errorf("sndbuf: %w", err)
}
@@ -53,7 +49,7 @@ func openRxSocket(ifindex int, etherType uint16) (int, error) {
if err != nil {
return -1, fmt.Errorf("socket: %w", err)
}
if err := setBufForce(fd, unix.SO_RCVBUFFORCE, unix.SO_RCVBUF, rcvbufBytes); err != nil {
if err := unix.SetsockoptInt(fd, unix.SOL_SOCKET, unix.SO_RCVBUFFORCE, rcvbufBytes); err != nil {
unix.Close(fd)
return -1, fmt.Errorf("rcvbuf: %w", err)
}