From cbfb1998a542d15e79270976a3563751e36bca91 Mon Sep 17 00:00:00 2001 From: Toby Date: Thu, 10 Aug 2023 22:15:55 -0700 Subject: [PATCH] fix: TProxy UDP error log --- app/internal/tproxy/udp_linux.go | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/app/internal/tproxy/udp_linux.go b/app/internal/tproxy/udp_linux.go index c366567..03e2f42 100644 --- a/app/internal/tproxy/udp_linux.go +++ b/app/internal/tproxy/udp_linux.go @@ -76,10 +76,22 @@ func (r *UDPTProxy) newPair(srcAddr, dstAddr *net.UDPAddr, initPkt []byte) { return } // Start forwarding - go r.forwarding(conn, hyConn, dstAddr.String()) + go func() { + err := r.forwarding(conn, hyConn, dstAddr.String()) + _ = conn.Close() + _ = hyConn.Close() + if r.EventLogger != nil { + var netErr net.Error + if errors.As(err, &netErr) && netErr.Timeout() { + // We don't consider deadline exceeded (timeout) an error + err = nil + } + r.EventLogger.Error(srcAddr, dstAddr, err) + } + }() } -func (r *UDPTProxy) forwarding(conn *net.UDPConn, hyConn client.HyUDPConn, dst string) { +func (r *UDPTProxy) forwarding(conn *net.UDPConn, hyConn client.HyUDPConn, dst string) error { errChan := make(chan error, 2) // Local <- Remote go func() { @@ -116,17 +128,7 @@ func (r *UDPTProxy) forwarding(conn *net.UDPConn, hyConn client.HyUDPConn, dst s } } }() - err := <-errChan - _ = conn.Close() - _ = hyConn.Close() - if r.EventLogger != nil { - var netErr net.Error - if errors.As(err, &netErr) && netErr.Timeout() { - // We don't consider deadline exceeded (timeout) an error - err = nil - } - r.EventLogger.Error(conn.LocalAddr(), conn.RemoteAddr(), err) - } + return <-errChan } func (r *UDPTProxy) updateConnDeadline(conn *net.UDPConn) error {