From ba2d58419efe59377af22ed2960deda3a985eed5 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 18 Apr 2022 15:39:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DUDP=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E5=8F=98=E5=8C=96=E6=97=B6=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=E6=AD=BB=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/listener_udp.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/internal/nodes/listener_udp.go b/internal/nodes/listener_udp.go index 0f5aec7..21ff047 100644 --- a/internal/nodes/listener_udp.go +++ b/internal/nodes/listener_udp.go @@ -24,6 +24,8 @@ type UDPListener struct { connTicker *utils.Ticker reverseProxy *serverconfigs.ReverseProxyConfig + + isClosed bool } func (this *UDPListener) Serve() error { @@ -46,7 +48,18 @@ func (this *UDPListener) Serve() error { var buffer = make([]byte, 4*1024) for { - n, addr, _ := this.Listener.ReadFrom(buffer) + if this.isClosed { + return nil + } + + n, addr, err := this.Listener.ReadFrom(buffer) + if err != nil { + if this.isClosed { + return nil + } + return err + } + if n > 0 { this.connLocker.Lock() conn, ok := this.connMap[addr.String()] @@ -76,6 +89,8 @@ func (this *UDPListener) Serve() error { } func (this *UDPListener) Close() error { + this.isClosed = true + if this.connTicker != nil { this.connTicker.Stop() }