From a8fce929c378d5d00127020ee6a05b5c842d4d02 Mon Sep 17 00:00:00 2001 From: Jason Date: Fri, 30 Aug 2019 17:18:44 +0800 Subject: [PATCH] update error detect --- proxy/udp.go | 2 +- proxy/utils.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/proxy/udp.go b/proxy/udp.go index 4f47466..299ecbb 100644 --- a/proxy/udp.go +++ b/proxy/udp.go @@ -43,7 +43,7 @@ func (h *udpHandler) fetchUDPInput(conn core.UDPConn, input net.PacketConn, addr input.SetDeadline(time.Now().Add(h.timeout)) n, _, err := input.ReadFrom(buf) if err != nil { - if netErr, ok := err.(net.Error); !ok || !netErr.Timeout() { + if !isTimeout(err) && !isClosed(err) { log.Warnf("failed to read UDP data from remote: %v", err) } return diff --git a/proxy/utils.go b/proxy/utils.go index a2d64be..058ef76 100644 --- a/proxy/utils.go +++ b/proxy/utils.go @@ -5,11 +5,25 @@ import ( "io" "io/ioutil" "net" + "strings" "time" "github.com/xjasonlyu/tun2socks/proxy/socks" ) +// Error +func isTimeout(err error) bool { + if netErr, ok := err.(net.Error); ok { + return netErr.Timeout() + } + return false +} + +func isClosed(err error) bool { + want := "use of closed network connection" + return strings.Contains(err.Error(), want) +} + // UDP util type udpElement struct { remoteAddr net.Addr