@@ -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
2528const useInterfaceName = runtime .GOOS == "linux" || runtime .GOOS == "android"
2629
2730func 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