Files
ddns-go/util/socket_bind_linux.go
Jason 734e67eb83 fix: enforce HttpInterface for IP fetch and Linux socket binding (#1661)
* fix: enforce HttpInterface for IP fetch and Linux socket binding

* fix: select interface IP by family for bound no-proxy client
2026-04-04 09:51:18 +08:00

29 lines
724 B
Go

//go:build linux
package util
import (
"net"
"syscall"
"golang.org/x/sys/unix"
)
func setLinuxBindToDevice(boundDialer *net.Dialer, ifaceName string) {
boundDialer.Control = func(network, address string, c syscall.RawConn) error {
var socketErr error
err := c.Control(func(fd uintptr) {
socketErr = unix.SetsockoptString(int(fd), unix.SOL_SOCKET, unix.SO_BINDTODEVICE, ifaceName)
})
if err != nil {
Log("设置 SO_BINDTODEVICE 失败, 回退为仅 LocalAddr 绑定. 网卡: %s, 错误: %v", ifaceName, err)
return nil
}
if socketErr != nil {
Log("设置 SO_BINDTODEVICE 失败, 回退为仅 LocalAddr 绑定. 网卡: %s, 错误: %v", ifaceName, socketErr)
return nil
}
return nil
}
}