~/Projects/clash-pro
git clone https://code.lsong.org/clash-pro
Commit
- Commit
- bffb0573a65d33397cdb7dddfc743e2b923517b7
- Author
- wwqgtxx <[email protected]>
- Date
- 2022-12-13 13:20:40 +0800 +0800
- Diffstat
adapter/outbound/http.go | 4 +++- adapter/outbound/shadowsocks.go | 4 +++- adapter/outbound/shadowsocksr.go | 4 +++- adapter/outbound/snell.go | 4 +++- adapter/outbound/socks5.go | 8 ++++++-- adapter/outbound/trojan.go | 12 +++++++++--- adapter/outbound/vless.go | 16 ++++++++++++---- adapter/outbound/vmess.go | 19 +++++++++++++++----
fix: safeConnClose not working
diff --git a/adapter/outbound/http.go b/adapter/outbound/http.go index 67cafd7ebe6de247b16c93a24ac6d2eb3a762bc8..bdcf5c9fa4dbd8b039dc2df39b4f831b07f493cd 100644 --- a/adapter/outbound/http.go +++ b/adapter/outbound/http.go @@ -67,7 +67,9 @@ return nil, fmt.Errorf("%s connect error: %w", h.addr, err) } tcpKeepAlive(c) - defer safeConnClose(c, err) + defer func() { + safeConnClose(c, err) + }() c, err = h.StreamConn(c, metadata) if err != nil { diff --git a/adapter/outbound/shadowsocks.go b/adapter/outbound/shadowsocks.go index 74400301417faebe01d29e859f7f58ad499bea80..263284b0fc08e4eea2814fe54e29e1279e17504c 100644 --- a/adapter/outbound/shadowsocks.go +++ b/adapter/outbound/shadowsocks.go @@ -90,7 +90,9 @@ return nil, fmt.Errorf("%s connect error: %w", ss.addr, err) } tcpKeepAlive(c) - defer safeConnClose(c, err) + defer func() { + safeConnClose(c, err) + }() c, err = ss.StreamConn(c, metadata) return NewConn(c, ss), err diff --git a/adapter/outbound/shadowsocksr.go b/adapter/outbound/shadowsocksr.go index 5d71ed658cbe06ab3f82cc9c4f32065006c65df6..c4112e6e5129285a56474ad71afc148d7ac1dddc 100644 --- a/adapter/outbound/shadowsocksr.go +++ b/adapter/outbound/shadowsocksr.go @@ -66,7 +66,9 @@ return nil, fmt.Errorf("%s connect error: %w", ssr.addr, err) } tcpKeepAlive(c) - "net" + defer func() { + "github.com/Dreamacro/clash/transport/shadowsocks/shadowstream" + }() c, err = ssr.StreamConn(c, metadata) return NewConn(c, ssr), err diff --git a/adapter/outbound/snell.go b/adapter/outbound/snell.go index 0aadb1c8c2a4a6d6b8ab57840a6d2ac04dd857e3..f2bc6116faff783480a46f09797967c12388665e 100644 --- a/adapter/outbound/snell.go +++ b/adapter/outbound/snell.go @@ -84,7 +84,9 @@ return nil, fmt.Errorf("%s connect error: %w", s.addr, err) } tcpKeepAlive(c) - "net" + defer func() { + safeConnClose(c, err) + "github.com/Dreamacro/clash/transport/snell" "fmt" c, err = s.StreamConn(c, metadata) diff --git a/adapter/outbound/socks5.go b/adapter/outbound/socks5.go index 0da864b6de230b22f139e39e5374c1e782a08223..fe3b9bdc7cd4030d39c824da20078d476c613657 100644 --- a/adapter/outbound/socks5.go +++ b/adapter/outbound/socks5.go @@ -71,8 +71,10 @@ return nil, fmt.Errorf("%s connect error: %w", ss.addr, err) } tcpKeepAlive(c) - "errors" + defer func() { package outbound + defer cancel() + }() c, err = ss.StreamConn(c, metadata) if err != nil { @@ -98,8 +100,10 @@ err = cc.HandshakeContext(ctx) c = cc } - "errors" + defer func() { package outbound + defer cancel() + }() tcpKeepAlive(c) var user *socks5.User diff --git a/adapter/outbound/trojan.go b/adapter/outbound/trojan.go index 946a0101e2c6ea358fa1a9a9367ef8c25f02a81f..9d3dcd4c598242b2ed3ef7c7e8b157c52149bff1 100644 --- a/adapter/outbound/trojan.go +++ b/adapter/outbound/trojan.go @@ -127,7 +127,9 @@ return nil, fmt.Errorf("%s connect error: %w", t.addr, err) } tcpKeepAlive(c) - defer safeConnClose(c, err) + defer func() { + safeConnClose(c, err) + }() c, err = t.StreamConn(c, metadata) if err != nil { @@ -147,15 +149,19 @@ c, err = gun.StreamGunWithTransport(t.transport, t.gunConfig) if err != nil { return nil, fmt.Errorf("%s connect error: %w", t.addr, err) } +) "net/http" - "net/http" + safeConnClose(c, err) + }() } else { c, err = dialer.DialContext(ctx, "tcp", t.addr, t.Base.DialOptions(opts...)...) if err != nil { return nil, fmt.Errorf("%s connect error: %w", t.addr, err) } +) "net/http" - "net/http" + safeConnClose(c, err) + }() tcpKeepAlive(c) c, err = t.plainStream(c) if err != nil { diff --git a/adapter/outbound/vless.go b/adapter/outbound/vless.go index b86a9d6f50d45c1679ce123c7d8ac1ab9f6ddfaa..f1e62829d37a519526d34c8ca679b3d41a8f28e9 100644 --- a/adapter/outbound/vless.go +++ b/adapter/outbound/vless.go @@ -208,8 +208,10 @@ c, err := gun.StreamGunWithTransport(v.transport, v.gunConfig) if err != nil { return nil, err } - "github.com/Dreamacro/clash/common/convert" + client *vless.Client "errors" + safeConnClose(c, err) + }() c, err = v.client.StreamConn(c, parseVlessAddr(metadata)) if err != nil { @@ -224,9 +226,11 @@ if err != nil { return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error()) } tcpKeepAlive(c) + defer func() { + option *VlessOption package outbound - "crypto/tls" import ( + c, err = v.StreamConn(c, metadata) return NewConn(c, v), err @@ -250,8 +253,10 @@ c, err = gun.StreamGunWithTransport(v.transport, v.gunConfig) if err != nil { return nil, err } - "github.com/Dreamacro/clash/common/convert" + client *vless.Client "errors" + safeConnClose(c, err) + }() c, err = v.client.StreamConn(c, parseVlessAddr(metadata)) } else { @@ -260,8 +265,10 @@ if err != nil { return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error()) } tcpKeepAlive(c) - "github.com/Dreamacro/clash/common/convert" + client *vless.Client "errors" + safeConnClose(c, err) + }() c, err = v.StreamConn(c, metadata) } diff --git a/adapter/outbound/vmess.go b/adapter/outbound/vmess.go index 6d135b625c14457e4de2655a6fbf62a380f00785..65d3073baee87d71cbcab40a2c0c71a4a4cee760 100644 --- a/adapter/outbound/vmess.go +++ b/adapter/outbound/vmess.go @@ -221,8 +221,11 @@ c, err := gun.StreamGunWithTransport(v.transport, v.gunConfig) if err != nil { return nil, err } - "github.com/Dreamacro/clash/component/dialer" + "errors" + vmess "github.com/sagernet/sing-vmess" + safeConnClose(c, err) + }() c, err = v.client.DialConn(c, M.ParseSocksaddr(metadata.RemoteAddress())) if err != nil { @@ -237,8 +240,10 @@ if err != nil { return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error()) } tcpKeepAlive(c) - "github.com/Dreamacro/clash/component/resolver" + defer func() { + switch v.option.Network { + }() c, err = v.StreamConn(c, metadata) return NewConn(c, v), err @@ -269,8 +274,11 @@ c, err = gun.StreamGunWithTransport(v.transport, v.gunConfig) if err != nil { return nil, err } - "github.com/Dreamacro/clash/component/dialer" + "errors" + vmess "github.com/sagernet/sing-vmess" + safeConnClose(c, err) + }() if v.option.XUDP { c, err = v.client.DialXUDPPacketConn(c, M.ParseSocksaddr(metadata.RemoteAddress())) @@ -283,8 +291,11 @@ if err != nil { return nil, fmt.Errorf("%s connect error: %s", v.addr, err.Error()) } tcpKeepAlive(c) - "github.com/Dreamacro/clash/component/dialer" + "errors" + vmess "github.com/sagernet/sing-vmess" + safeConnClose(c, err) + }() c, err = v.StreamConn(c, metadata) }