Skip to content

Commit ad555c9

Browse files
authored
fix: refine error handling in UDP functions to ignore io.EOF errors
1 parent 2107ccb commit ad555c9

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

internal/common.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"encoding/hex"
1010
"fmt"
1111
"hash/fnv"
12+
"io"
1213
"net"
1314
"net/url"
1415
"os"
@@ -945,7 +946,7 @@ func (c *Common) commonUDPLoop() {
945946
if err != nil {
946947
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
947948
c.logger.Debug("UDP session abort: %v", err)
948-
} else {
949+
} else if err != io.EOF {
949950
c.logger.Error("commonUDPLoop: read from tunnel failed: %v", err)
950951
}
951952
return
@@ -954,7 +955,9 @@ func (c *Common) commonUDPLoop() {
954955
// 将数据写入目标UDP连接
955956
_, err = c.targetUDPConn.WriteToUDP(buffer[:x], clientAddr)
956957
if err != nil {
957-
c.logger.Error("commonUDPLoop: writeToUDP failed: %v", err)
958+
if err != io.EOF {
959+
c.logger.Error("commonUDPLoop: writeToUDP failed: %v", err)
960+
}
958961
return
959962
}
960963
// 传输完成
@@ -987,7 +990,9 @@ func (c *Common) commonUDPLoop() {
987990
// 将原始数据写入池连接
988991
_, err = remoteConn.Write(buffer[:x])
989992
if err != nil {
990-
c.logger.Error("commonUDPLoop: write to tunnel failed: %v", err)
993+
if err != io.EOF {
994+
c.logger.Error("commonUDPLoop: write to tunnel failed: %v", err)
995+
}
991996
c.targetUDPSession.Delete(sessionKey)
992997
remoteConn.Close()
993998
c.putUDPBuffer(buffer)
@@ -1252,7 +1257,7 @@ func (c *Common) commonUDPOnce(signalURL *url.URL) {
12521257
if err != nil {
12531258
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
12541259
c.logger.Debug("UDP session abort: %v", err)
1255-
} else {
1260+
} else if err != io.EOF {
12561261
c.logger.Error("commonUDPOnce: read from tunnel failed: %v", err)
12571262
}
12581263
return
@@ -1261,7 +1266,9 @@ func (c *Common) commonUDPOnce(signalURL *url.URL) {
12611266
// 将数据写入目标UDP连接
12621267
_, err = targetConn.Write(buffer[:x])
12631268
if err != nil {
1264-
c.logger.Error("commonUDPOnce: write to target failed: %v", err)
1269+
if err != io.EOF {
1270+
c.logger.Error("commonUDPOnce: write to target failed: %v", err)
1271+
}
12651272
return
12661273
}
12671274

@@ -1283,7 +1290,7 @@ func (c *Common) commonUDPOnce(signalURL *url.URL) {
12831290
if err != nil {
12841291
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
12851292
c.logger.Debug("UDP session abort: %v", err)
1286-
} else {
1293+
} else if err != io.EOF {
12871294
c.logger.Error("commonUDPOnce: read from target failed: %v", err)
12881295
}
12891296
return
@@ -1292,7 +1299,9 @@ func (c *Common) commonUDPOnce(signalURL *url.URL) {
12921299
// 将数据写回隧道连接
12931300
_, err = remoteConn.Write(buffer[:x])
12941301
if err != nil {
1295-
c.logger.Error("commonUDPOnce: write to tunnel failed: %v", err)
1302+
if err != io.EOF {
1303+
c.logger.Error("commonUDPOnce: write to tunnel failed: %v", err)
1304+
}
12961305
return
12971306
}
12981307

@@ -1513,7 +1522,7 @@ func (c *Common) singleUDPLoop() error {
15131522
if err != nil {
15141523
if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
15151524
c.logger.Debug("UDP session abort: %v", err)
1516-
} else {
1525+
} else if err != io.EOF {
15171526
c.logger.Error("singleUDPLoop: read from target failed: %v", err)
15181527
}
15191528
c.targetUDPSession.Delete(sessionKey)
@@ -1526,7 +1535,9 @@ func (c *Common) singleUDPLoop() error {
15261535
// 将响应写回隧道UDP连接
15271536
_, err = c.tunnelUDPConn.WriteToUDP(buffer[:x], clientAddr)
15281537
if err != nil {
1529-
c.logger.Error("singleUDPLoop: writeToUDP failed: %v", err)
1538+
if err != io.EOF {
1539+
c.logger.Error("singleUDPLoop: writeToUDP failed: %v", err)
1540+
}
15301541
c.targetUDPSession.Delete(sessionKey)
15311542
if targetConn != nil {
15321543
targetConn.Close()
@@ -1543,7 +1554,9 @@ func (c *Common) singleUDPLoop() error {
15431554
c.logger.Debug("Starting transfer: %v <-> %v", targetConn.LocalAddr(), c.tunnelUDPConn.LocalAddr())
15441555
_, err = targetConn.Write(buffer[:x])
15451556
if err != nil {
1546-
c.logger.Error("singleUDPLoop: write to target failed: %v", err)
1557+
if err != io.EOF {
1558+
c.logger.Error("singleUDPLoop: write to target failed: %v", err)
1559+
}
15471560
c.targetUDPSession.Delete(sessionKey)
15481561
if targetConn != nil {
15491562
targetConn.Close()

0 commit comments

Comments
 (0)