mirror of
https://github.com/jeessy2/ddns-go.git
synced 2026-10-18 06:20:37 +08:00
734e67eb83
* fix: enforce HttpInterface for IP fetch and Linux socket binding * fix: select interface IP by family for bound no-proxy client
29 lines
724 B
Go
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
|
|
}
|
|
}
|