Files
OmniSocketGo/cmd/internal/transport/udp_device_linux.go
nnbcccscdscdsc be013b701b feat:KCP协议
2026-03-24 21:09:06 +08:00

25 lines
616 B
Go

//go:build linux
package transport
import (
"fmt"
"syscall"
)
// udpBindDeviceControl 返回一个 Control 函数,用于在 Linux 上将 UDP socket 绑定到指定网卡设备。
func udpBindDeviceControl(device string) (func(string, string, syscall.RawConn) error, error) {
return func(_, _ string, rawConn syscall.RawConn) error {
var bindErr error
if err := rawConn.Control(func(fd uintptr) {
bindErr = syscall.BindToDevice(int(fd), device)
}); err != nil {
return err
}
if bindErr != nil {
return fmt.Errorf("transport: bind device %s: %w", device, bindErr)
}
return nil
}, nil
}