feat:KCP协议
This commit is contained in:
24
cmd/internal/transport/udp_device_linux.go
Normal file
24
cmd/internal/transport/udp_device_linux.go
Normal file
@@ -0,0 +1,24 @@
|
||||
//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
|
||||
}
|
||||
Reference in New Issue
Block a user