diff --git a/proxy/shadowsocks.go b/proxy/shadowsocks.go index 67987fb..f9569a7 100755 --- a/proxy/shadowsocks.go +++ b/proxy/shadowsocks.go @@ -50,11 +50,7 @@ func (ss *Shadowsocks) DialContext(ctx context.Context, metadata *M.Metadata) (c } setKeepAlive(c) - defer func() { - if err != nil && c != nil { - c.Close() - } - }() + defer safeConnClose(c, err) switch ss.obfsMode { case "tls": diff --git a/proxy/socks5.go b/proxy/socks5.go index aa0b156..567d4d6 100755 --- a/proxy/socks5.go +++ b/proxy/socks5.go @@ -39,11 +39,7 @@ func (ss *Socks5) DialContext(ctx context.Context, metadata *M.Metadata) (c net. } setKeepAlive(c) - defer func() { - if err != nil && c != nil { - c.Close() - } - }() + defer safeConnClose(c, err) var user *socks5.User if ss.user != "" { diff --git a/proxy/keepalive.go b/proxy/util.go similarity index 68% rename from proxy/keepalive.go rename to proxy/util.go index 6a986e6..fdf7729 100755 --- a/proxy/keepalive.go +++ b/proxy/util.go @@ -16,3 +16,10 @@ func setKeepAlive(c net.Conn) { tcp.SetKeepAlivePeriod(tcpKeepAlivePeriod) } } + +// safeConnClose closes tcp connection safely. +func safeConnClose(c net.Conn, err error) { + if c != nil && err != nil { + c.Close() + } +}