mosdns/plugin/server/server_utils/socket_utils_linux.go
dengxiongjian cd761e8145
Some checks are pending
Test mosdns / build (push) Waiting to run
新增Mikrotik API 插入解析ip
2025-07-31 11:28:55 +08:00

47 lines
890 B
Go

//go:build linux
package server_utils
import (
"syscall"
"golang.org/x/sys/unix"
)
func ListenerControl(opt ListenerSocketOpts) ControlFunc {
return func(network, address string, c syscall.RawConn) error {
var (
errControl error
errSyscall error
)
errControl = c.Control(func(fd uintptr) {
if opt.SO_REUSEPORT {
errSyscall = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_REUSEPORT, 1)
if errSyscall != nil {
return
}
}
if opt.SO_RCVBUF > 0 {
errSyscall = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_RCVBUF, opt.SO_RCVBUF)
if errSyscall != nil {
return
}
}
if opt.SO_SNDBUF > 0 {
errSyscall = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_SNDBUF, opt.SO_SNDBUF)
if errSyscall != nil {
return
}
}
})
if errControl != nil {
return errControl
}
return errSyscall
}
}