This commit is contained in:
arraykeys@gmail.com
2018-10-31 14:49:37 +08:00
parent f0389cdd5b
commit 9e496f246c
3 changed files with 12 additions and 10 deletions

View File

@ -2,6 +2,7 @@ proxy更新日志
v6.4 v6.4
1.http(s)代理增加了--jumper参数,可以穿透外部代理连接上级. 1.http(s)代理增加了--jumper参数,可以穿透外部代理连接上级.
2.优化了socks5代理UDP功能可能存在的内存占用过多问题. 2.优化了socks5代理UDP功能可能存在的内存占用过多问题.
3.优化了jumper,避免某些情况下不能正确返回错误的问题.
v6.3 v6.3
1.fixed #156 1.fixed #156

View File

@ -1 +1 @@
6.3 6.4

View File

@ -24,8 +24,9 @@ func (s socks5Dialer) Dial(network, addr string) (net.Conn, error) {
} }
func New(proxyURL string, timeout time.Duration) (j Jumper, err error) { func New(proxyURL string, timeout time.Duration) (j Jumper, err error) {
u, err := url.Parse(proxyURL) u, e := url.Parse(proxyURL)
if err != nil { if e != nil {
err = e
return return
} }
j = Jumper{ j = Jumper{
@ -34,7 +35,7 @@ func New(proxyURL string, timeout time.Duration) (j Jumper, err error) {
} }
return return
} }
func (j *Jumper) Dial(address string, timeout time.Duration) (conn net.Conn, err error) { func (j *Jumper) Dial(address string, timeout time.Duration) (net.Conn, error) {
switch j.proxyURL.Scheme { switch j.proxyURL.Scheme {
case "https": case "https":
return j.dialHTTPS(address, timeout) return j.dialHTTPS(address, timeout)
@ -70,10 +71,10 @@ func (j *Jumper) dialHTTPS(address string, timeout time.Duration) (conn net.Conn
} }
reply := make([]byte, 1024) reply := make([]byte, 1024)
conn.SetDeadline(time.Now().Add(timeout)) conn.SetDeadline(time.Now().Add(timeout))
n, err := conn.Read(reply) n, e := conn.Read(reply)
conn.SetDeadline(time.Time{}) conn.SetDeadline(time.Time{})
if err != nil { if e != nil {
err = fmt.Errorf("error read reply from proxy: %s", err) err = fmt.Errorf("error read reply from proxy: %s", e)
conn.Close() conn.Close()
conn = nil conn = nil
return return
@ -94,9 +95,9 @@ func (j *Jumper) dialSOCKS5(address string, timeout time.Duration) (conn net.Con
} else { } else {
auth = nil auth = nil
} }
dialSocksProxy, err := proxy.SOCKS5("tcp", j.proxyURL.Host, auth, socks5Dialer{timeout: timeout}) dialSocksProxy, e := proxy.SOCKS5("tcp", j.proxyURL.Host, auth, socks5Dialer{timeout: timeout})
if err != nil { if e != nil {
err = fmt.Errorf("error connecting to proxy: %s", err) err = fmt.Errorf("error connecting to proxy: %s", e)
return return
} }
return dialSocksProxy.Dial("tcp", address) return dialSocksProxy.Dial("tcp", address)