From 5048326c20f8014be5e313dde765562d56e80905 Mon Sep 17 00:00:00 2001 From: yusing Date: Wed, 7 Jan 2026 21:10:47 +0800 Subject: [PATCH] fix(agent/stream): handle EOF error in UDP server connection - Updated error handling in the UDP server to ignore io.EOF errors when reading from client connections. - Added a check to return early if no bytes are read from the client connection. - Ensured proper closure of tcpListener in the main.go file during cancellation. --- agent/cmd/main.go | 2 +- agent/pkg/agent/stream/udp_server.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/agent/cmd/main.go b/agent/cmd/main.go index 9cd0fb4d..122988f1 100644 --- a/agent/cmd/main.go +++ b/agent/cmd/main.go @@ -192,9 +192,9 @@ Tips: { subtask := t.Subtask("agent-tls-mux", true) t.OnCancel("stop_mux", func() { - _ = tcpListener.Close() _ = httpLn.Close() _ = streamLn.Close() + _ = tcpListener.Close() }) go func() { defer subtask.Finish(subtask.FinishCause()) diff --git a/agent/pkg/agent/stream/udp_server.go b/agent/pkg/agent/stream/udp_server.go index 3e36e2d2..c7ad19d6 100644 --- a/agent/pkg/agent/stream/udp_server.go +++ b/agent/pkg/agent/stream/udp_server.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "crypto/x509" + "errors" "io" "net" "time" @@ -119,10 +120,13 @@ func (s *UDPServer) handleDTLSConnection(clientConn net.Conn) { return default: n, err := clientConn.Read(buf) - if err != nil { + if err != nil && !errors.Is(err, io.EOF) { s.logger(clientConn).Err(err).Msg("failed to read from client") return } + if n == 0 { + return + } if _, err := dstConn.Write(buf[:n]); err != nil { s.logger(clientConn).Err(err).Msgf("failed to write %d bytes to destination", n) return