Feature: use native syscall to bind interface on Linux and macOS

This commit is contained in:
Dreamacro
2020-10-22 00:11:49 +08:00
parent 2321e9139d
commit 50b3d497f6
6 changed files with 205 additions and 135 deletions

View File

@ -0,0 +1,26 @@
package dialer
import (
"net"
"syscall"
)
func bindIfaceToDialer(dialer *net.Dialer, ifaceName string) error {
dialer.Control = func(network, address string, c syscall.RawConn) error {
return c.Control(func(fd uintptr) {
syscall.BindToDevice(int(fd), ifaceName)
})
}
return nil
}
func bindIfaceToListenConfig(lc *net.ListenConfig, ifaceName string) error {
lc.Control = func(network, address string, c syscall.RawConn) error {
return c.Control(func(fd uintptr) {
syscall.BindToDevice(int(fd), ifaceName)
})
}
return nil
}