From ec4d98c4bfc04db0d13f2f254a5e1769f7b18669 Mon Sep 17 00:00:00 2001 From: xjasonlyu Date: Fri, 26 Feb 2021 09:50:34 +0800 Subject: [PATCH] Fix: reset udp timeout after sending --- tunnel/udp.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tunnel/udp.go b/tunnel/udp.go index d54d6b2..5dce3fd 100755 --- a/tunnel/udp.go +++ b/tunnel/udp.go @@ -97,7 +97,7 @@ func handleUDP(packet core.UDPPacket) { defer packet.Drop() defer _natTable.Delete(key) - handleUDPToLocal(packet, pc, udpSessionTimeout) + handleUDPToLocal(packet, pc) }() _natTable.Set(key, pc) @@ -115,16 +115,17 @@ func handleUDPToRemote(packet core.UDPPacket, pc net.PacketConn, remote net.Addr if _, err := pc.WriteTo(packet.Data() /* data */, remote); err != nil { log.Warnf("[UDP] write to %s error: %v", remote, err) } + pc.SetReadDeadline(time.Now().Add(udpSessionTimeout)) /* reset timeout */ log.Infof("[UDP] %s --> %s", packet.RemoteAddr(), remote) } -func handleUDPToLocal(packet core.UDPPacket, pc net.PacketConn, timeout time.Duration) { +func handleUDPToLocal(packet core.UDPPacket, pc net.PacketConn) { buf := pool.Get(pool.MaxSegmentSize) defer pool.Put(buf) for /* just loop */ { - pc.SetReadDeadline(time.Now().Add(timeout)) + pc.SetReadDeadline(time.Now().Add(udpSessionTimeout)) n, from, err := pc.ReadFrom(buf) if err != nil { if !errors.Is(err, os.ErrDeadlineExceeded) /* ignore i/o timeout */ {