From dd8d7dd0d4b61fa9361d05c2b282327b24ff8b60 Mon Sep 17 00:00:00 2001 From: boboan Date: Wed, 11 Jul 2018 17:45:35 +0800 Subject: [PATCH 1/2] net.LookupIP may cause deadlock in windows https://github.com/golang/go/issues/24178 --- services/http/http.go | 2 +- services/socks/socks.go | 2 +- utils/functions.go | 29 ++++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/services/http/http.go b/services/http/http.go index a1a14aa..73dd4b5 100644 --- a/services/http/http.go +++ b/services/http/http.go @@ -492,7 +492,7 @@ func (s *HTTP) IsDeadLoop(inLocalAddr string, host string) bool { if *s.cfg.DNSAddress != "" { outIPs = []net.IP{net.ParseIP(s.Resolve(outDomain))} } else { - outIPs, err = net.LookupIP(outDomain) + outIPs, err = utils.MyLookupIP(outDomain) } if err == nil { for _, ip := range outIPs { diff --git a/services/socks/socks.go b/services/socks/socks.go index 5020c50..901e001 100644 --- a/services/socks/socks.go +++ b/services/socks/socks.go @@ -598,7 +598,7 @@ func (s *Socks) IsDeadLoop(inLocalAddr string, host string) bool { if *s.cfg.DNSAddress != "" { outIPs = []net.IP{net.ParseIP(s.Resolve(outDomain))} } else { - outIPs, err = net.LookupIP(outDomain) + outIPs, err = utils.MyLookupIP(outDomain) } if err == nil { for _, ip := range outIPs { diff --git a/utils/functions.go b/utils/functions.go index 4d20b7c..ecb8afe 100755 --- a/utils/functions.go +++ b/utils/functions.go @@ -29,6 +29,8 @@ import ( "github.com/snail007/goproxy/utils/id" kcp "github.com/xtaci/kcp-go" + + "context" ) func IoBind(dst io.ReadWriteCloser, src io.ReadWriteCloser, fn func(err interface{}), log *logger.Logger) { @@ -497,7 +499,7 @@ func IsIternalIP(domainOrIP string, always bool) bool { } if isDomain { - outIPs, err = net.LookupIP(domainOrIP) + outIPs, err = MyLookupIP(domainOrIP) } else { outIPs = []net.IP{net.ParseIP(domainOrIP)} } @@ -632,3 +634,28 @@ func InsertProxyHeaders(head []byte, headers string) []byte { // } // return // } + + +/* +net.LookupIP may cause deadlock in windows +https://github.com/golang/go/issues/24178 + +*/ + +func MyLookupIP(host string) ([]net.IP, error) { + + ctx ,cancel := context.WithTimeout(context.Background(),time.Second *time.Duration(3)) + defer func() { + cancel() + //ctx.Done() + }() + addrs, err := net.DefaultResolver.LookupIPAddr(ctx, host) + if err != nil { + return nil, err + } + ips := make([]net.IP, len(addrs)) + for i, ia := range addrs { + ips[i] = ia.IP + } + return ips, nil +} From 8dce99fec6a7de14c681bb43cecc9be058e30977 Mon Sep 17 00:00:00 2001 From: arraykeys Date: Wed, 11 Jul 2018 21:35:02 +0800 Subject: [PATCH 2/2] a --- sdk/android-ios/release_android.sh | 2 +- sdk/android-ios/release_ios.sh | 2 +- sdk/android-ios/sdk.go | 2 +- sdk/windows-linux/release_linux.sh | 2 +- sdk/windows-linux/release_mac.sh | 2 +- sdk/windows-linux/release_windows.sh | 10 +++++----- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sdk/android-ios/release_android.sh b/sdk/android-ios/release_android.sh index d591df8..7d12525 100755 --- a/sdk/android-ios/release_android.sh +++ b/sdk/android-ios/release_android.sh @@ -1,5 +1,5 @@ #/bin/bash -VER="v5.0" +VER="v5.2" rm -rf sdk-android-*.tar.gz rm -rf android mkdir android diff --git a/sdk/android-ios/release_ios.sh b/sdk/android-ios/release_ios.sh index d7b6e00..96a50af 100755 --- a/sdk/android-ios/release_ios.sh +++ b/sdk/android-ios/release_ios.sh @@ -1,5 +1,5 @@ #/bin/bash -VER="v5.0" +VER="v5.2" rm -rf sdk-ios-*.tar.gz rm -rf ios mkdir ios diff --git a/sdk/android-ios/sdk.go b/sdk/android-ios/sdk.go index db1882a..fd5c898 100644 --- a/sdk/android-ios/sdk.go +++ b/sdk/android-ios/sdk.go @@ -23,7 +23,7 @@ import ( kingpin "gopkg.in/alecthomas/kingpin.v2" ) -const SDK_VERSION = "5.0" +const SDK_VERSION = "5.2" var ( app *kingpin.Application diff --git a/sdk/windows-linux/release_linux.sh b/sdk/windows-linux/release_linux.sh index de15e3d..a6653d8 100755 --- a/sdk/windows-linux/release_linux.sh +++ b/sdk/windows-linux/release_linux.sh @@ -1,5 +1,5 @@ #/bin/bash -VER="v5.0" +VER="v5.2" rm -rf sdk-linux-*.tar.gz rm -rf README.md libproxy-sdk.so libproxy-sdk.h libproxy-sdk.a diff --git a/sdk/windows-linux/release_mac.sh b/sdk/windows-linux/release_mac.sh index afa9a02..a872e3c 100755 --- a/sdk/windows-linux/release_mac.sh +++ b/sdk/windows-linux/release_mac.sh @@ -1,5 +1,5 @@ #/bin/bash -VER="v5.0" +VER="v5.2" rm -rf *.tar.gz rm -rf README.md libproxy-sdk.dylib libproxy-sdk.h diff --git a/sdk/windows-linux/release_windows.sh b/sdk/windows-linux/release_windows.sh index 7a3b06d..176f832 100755 --- a/sdk/windows-linux/release_windows.sh +++ b/sdk/windows-linux/release_windows.sh @@ -1,8 +1,8 @@ #/bin/bash -VER="v5.0" +VER="v5.2" -sudo rm /usr/local/go -sudo ln -s /usr/local/go1.10.1 /usr/local/go +#sudo rm /usr/local/go +#sudo ln -s /usr/local/go1.10.1 /usr/local/go rm -rf sdk-windows-*.tar.gz rm -rf README.md proxy-sdk.h proxy-sdk.dll @@ -22,7 +22,7 @@ cp ../README.md . tar zcf sdk-windows-32bit-${VER}.tar.gz README.md proxy-sdk.dll proxy-sdk.h ieshims.dll rm -rf README.md proxy-sdk.h proxy-sdk.dll -sudo rm /usr/local/go -sudo ln -s /usr/local/go1.8.5 /usr/local/go +#sudo rm /usr/local/go +#sudo ln -s /usr/local/go1.8.5 /usr/local/go echo "done."