Liu Song’s Projects


~/Projects/sing

git clone https://code.lsong.org/sing

Commit

Commit
834794b006ea89ceed9f157f1843a840511dfa47
Author
世界 <[email protected]>
Date
2022-09-16 15:11:48 +0800 +0800
Diffstat
 common/control/bind.go | 6 ++++++

Skip bind for local addr


diff --git a/common/control/bind.go b/common/control/bind.go
index e41bd39d40c75094c6b7f4f5a7f71d4131d7b1f0..62a3f8bb5250aadfb50e50f6128d9b8f3dfed159 100644
--- a/common/control/bind.go
+++ b/common/control/bind.go
@@ -4,6 +4,9 @@ import (
 	"os"
 	"runtime"
 	"syscall"
+
+	M "github.com/sagernet/sing/common/metadata"
+	N "github.com/sagernet/sing/common/network"
 )
 
 func BindToInterface(finder InterfaceFinder, interfaceName string, interfaceIndex int) Func {
@@ -22,6 +25,9 @@
 const useInterfaceName = runtime.GOOS == "linux" || runtime.GOOS == "android"
 
 func BindToInterface0(finder InterfaceFinder, conn syscall.RawConn, network string, address string, interfaceName string, interfaceIndex int) error {
+	if addr := M.ParseSocksaddr(address).Addr; addr.IsValid() && !N.IsPublicAddr(addr) {
+		return nil
+	}
 	if interfaceName == "" && interfaceIndex == -1 {
 		return nil
 	}