Skip to content

Commit 795e665

Browse files
authored
fix: replace manual read deadline setting with TimeoutReader for singleUDPLoop
1 parent bb2f57b commit 795e665

File tree

1 file changed

+3
-10
lines changed

1 file changed

+3
-10
lines changed

internal/common.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -888,22 +888,15 @@ func (c *Common) singleUDPLoop() error {
888888
}()
889889

890890
buffer := make([]byte, udpDataBufSize)
891+
reader := &conn.TimeoutReader{Conn: targetConn, Timeout: udpReadTimeout}
891892

892893
for {
893894
select {
894895
case <-c.ctx.Done():
895896
return
896897
default:
897-
// 设置UDP读取超时
898-
if err := targetConn.SetReadDeadline(time.Now().Add(udpReadTimeout)); err != nil {
899-
c.logger.Error("SetReadDeadline failed: %v", err)
900-
c.targetUDPSession.Delete(sessionKey)
901-
targetConn.Close()
902-
return
903-
}
904-
905898
// 从UDP读取响应
906-
n, err := targetConn.Read(buffer)
899+
x, err := reader.Read(buffer)
907900
if err != nil {
908901
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
909902
c.logger.Debug("UDP session abort: %v", err)
@@ -918,7 +911,7 @@ func (c *Common) singleUDPLoop() error {
918911
}
919912

920913
// 将响应写回隧道UDP连接
921-
tx, err := c.tunnelUDPConn.WriteToUDP(buffer[:n], clientAddr)
914+
tx, err := c.tunnelUDPConn.WriteToUDP(buffer[:x], clientAddr)
922915
if err != nil {
923916
c.logger.Error("WriteToUDP failed: %v", err)
924917
c.targetUDPSession.Delete(sessionKey)

0 commit comments

Comments
 (0)