github.com/sagernet/sing@v0.2.6/common/control/bind_darwin.go (about) 1 package control 2 3 import ( 4 "syscall" 5 6 "golang.org/x/sys/unix" 7 ) 8 9 func bindToInterface(conn syscall.RawConn, network string, address string, interfaceName string, interfaceIndex int) error { 10 if interfaceIndex == -1 { 11 return nil 12 } 13 return Raw(conn, func(fd uintptr) error { 14 switch network { 15 case "tcp6", "udp6": 16 return unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, interfaceIndex) 17 default: 18 return unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_BOUND_IF, interfaceIndex) 19 } 20 }) 21 }