diff --git a/component/dialer/bind_darwin.go b/component/dialer/bind_darwin.go index b3ae9d8..bf51b30 100644 --- a/component/dialer/bind_darwin.go +++ b/component/dialer/bind_darwin.go @@ -27,14 +27,21 @@ func bindControl(ifaceIdx int, chain controlFn) controlFn { } } - return c.Control(func(fd uintptr) { + var innerErr error + err = c.Control(func(fd uintptr) { switch network { case "tcp4", "udp4": - unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_BOUND_IF, ifaceIdx) + innerErr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_BOUND_IF, ifaceIdx) case "tcp6", "udp6": - unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, ifaceIdx) + innerErr = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_BOUND_IF, ifaceIdx) } }) + + if innerErr != nil { + err = innerErr + } + + return } } diff --git a/component/dialer/bind_linux.go b/component/dialer/bind_linux.go index ae772a7..97d37cf 100644 --- a/component/dialer/bind_linux.go +++ b/component/dialer/bind_linux.go @@ -25,9 +25,16 @@ func bindControl(ifaceName string, chain controlFn) controlFn { } } - return c.Control(func(fd uintptr) { - unix.BindToDevice(int(fd), ifaceName) + var innerErr error + err = c.Control(func(fd uintptr) { + innerErr = unix.BindToDevice(int(fd), ifaceName) }) + + if innerErr != nil { + err = innerErr + } + + return } }