Skip to content

Commit 3c4a2b0

Browse files
BindToInterfaceFunc: allow block()/AutoDetectInterfaceFunc() to return error
to avoid Tun traffic loopback, AutoDetectInterfaceFunc() should return error when no valid interface is found
1 parent bc044ee commit 3c4a2b0

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

common/control/bind.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,23 @@ func BindToInterface(finder InterfaceFinder, interfaceName string, interfaceInde
1515
}
1616
}
1717

18-
func BindToInterfaceFunc(finder InterfaceFinder, block func(network string, address string) (interfaceName string, interfaceIndex int)) Func {
18+
func BindToInterfaceFunc(finder InterfaceFinder, block func(network string, address string) (interfaceName string, interfaceIndex int, err error)) Func {
1919
return func(network, address string, conn syscall.RawConn) error {
20-
interfaceName, interfaceIndex := block(network, address)
20+
interfaceName, interfaceIndex, err := block(network, address)
21+
if err != nil {
22+
return err
23+
}
2124
return BindToInterface0(finder, conn, network, address, interfaceName, interfaceIndex)
2225
}
2326
}
2427

2528
const useInterfaceName = runtime.GOOS == "linux" || runtime.GOOS == "android"
2629

2730
func BindToInterface0(finder InterfaceFinder, conn syscall.RawConn, network string, address string, interfaceName string, interfaceIndex int) error {
28-
if addr := M.ParseSocksaddr(address).Addr; addr.IsValid() && N.IsVirtual(addr) {
31+
if interfaceName == "" && interfaceIndex == -1 {
2932
return nil
3033
}
31-
if interfaceName == "" && interfaceIndex == -1 {
34+
if addr := M.ParseSocksaddr(address).Addr; addr.IsValid() && N.IsVirtual(addr) {
3235
return nil
3336
}
3437
if interfaceName != "" && useInterfaceName || interfaceIndex != -1 && !useInterfaceName {

0 commit comments

Comments
 (0)