11package control
22
33import (
4- "os"
5- "runtime"
64 "syscall"
75
6+ E "github.com/sagernet/sing/common/exceptions"
87 M "github.com/sagernet/sing/common/metadata"
98 N "github.com/sagernet/sing/common/network"
109)
@@ -25,38 +24,12 @@ func BindToInterfaceFunc(finder InterfaceFinder, block func(network string, addr
2524 }
2625}
2726
28- const useInterfaceName = runtime .GOOS == "linux" || runtime .GOOS == "android"
29-
3027func BindToInterface0 (finder InterfaceFinder , conn syscall.RawConn , network string , address string , interfaceName string , interfaceIndex int ) error {
3128 if interfaceName == "" && interfaceIndex == - 1 {
32- return nil
29+ return E . New ( "interface not found: " , interfaceName )
3330 }
3431 if addr := M .ParseSocksaddr (address ).Addr ; addr .IsValid () && N .IsVirtual (addr ) {
3532 return nil
3633 }
37- if interfaceName != "" && useInterfaceName || interfaceIndex != - 1 && ! useInterfaceName {
38- return bindToInterface (conn , network , address , interfaceName , interfaceIndex )
39- }
40- if finder == nil {
41- return os .ErrInvalid
42- }
43- var err error
44- if useInterfaceName {
45- interfaceName , err = finder .InterfaceNameByIndex (interfaceIndex )
46- } else {
47- interfaceIndex , err = finder .InterfaceIndexByName (interfaceName )
48- }
49- if err != nil {
50- return err
51- }
52- if useInterfaceName {
53- if interfaceName == "" {
54- return nil
55- }
56- } else {
57- if interfaceIndex == - 1 {
58- return nil
59- }
60- }
61- return bindToInterface (conn , network , address , interfaceName , interfaceIndex )
34+ return bindToInterface (conn , network , address , finder , interfaceName , interfaceIndex )
6235}
0 commit comments