Skip to content

Commit 0dd7bee

Browse files
authored
refactor: improve connection cancellation handling in common loop and common once
1 parent a747eab commit 0dd7bee

File tree

1 file changed

+16
-21
lines changed

1 file changed

+16
-21
lines changed

internal/common.go

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -766,10 +766,7 @@ func (c *Common) commonTCPLoop() {
766766
// 注册取消函数
767767
c.cancelMap.Store(id, func() {
768768
if targetConn != nil {
769-
targetConn.SetReadDeadline(time.Now())
770-
}
771-
if remoteConn != nil {
772-
remoteConn.SetReadDeadline(time.Now())
769+
targetConn.Close()
773770
}
774771
})
775772
defer c.cancelMap.Delete(id)
@@ -909,7 +906,9 @@ func (c *Common) commonUDPLoop() {
909906
// 通过读超时机制实现取消
910907
go func() {
911908
<-ctx.Done()
912-
remoteConn.SetReadDeadline(time.Now())
909+
if remoteConn != nil {
910+
remoteConn.SetReadDeadline(time.Now())
911+
}
913912
}()
914913

915914
for {
@@ -1133,10 +1132,7 @@ func (c *Common) commonTCPOnce(signalURL *url.URL) {
11331132
// 注册取消函数
11341133
c.cancelMap.Store(id, func() {
11351134
if targetConn != nil {
1136-
targetConn.SetReadDeadline(time.Now())
1137-
}
1138-
if remoteConn != nil {
1139-
remoteConn.SetReadDeadline(time.Now())
1135+
targetConn.Close()
11401136
}
11411137
})
11421138
defer c.cancelMap.Delete(id)
@@ -1255,19 +1251,24 @@ func (c *Common) commonUDPOnce(signalURL *url.URL) {
12551251

12561252
done := make(chan struct{}, 2)
12571253

1254+
// 通过连接关闭和读超时机制实现取消
1255+
go func() {
1256+
<-ctx.Done()
1257+
if targetConn != nil {
1258+
targetConn.Close()
1259+
}
1260+
if remoteConn != nil {
1261+
remoteConn.SetReadDeadline(time.Now())
1262+
}
1263+
}()
1264+
12581265
go func() {
12591266
defer func() { done <- struct{}{} }()
12601267

12611268
buffer := c.getUDPBuffer()
12621269
defer c.putUDPBuffer(buffer)
12631270
reader := &conn.TimeoutReader{Conn: remoteConn, Timeout: c.readTimeout}
12641271

1265-
// 通过读超时机制实现取消
1266-
go func() {
1267-
<-ctx.Done()
1268-
remoteConn.SetReadDeadline(time.Now())
1269-
}()
1270-
12711272
for {
12721273
// 从隧道连接读取数据
12731274
x, err := reader.Read(buffer)
@@ -1299,12 +1300,6 @@ func (c *Common) commonUDPOnce(signalURL *url.URL) {
12991300
defer c.putUDPBuffer(buffer)
13001301
reader := &conn.TimeoutReader{Conn: targetConn, Timeout: c.readTimeout}
13011302

1302-
// 通过读超时机制实现取消
1303-
go func() {
1304-
<-ctx.Done()
1305-
targetConn.SetReadDeadline(time.Now())
1306-
}()
1307-
13081303
for {
13091304
// 从目标UDP连接读取数据
13101305
x, err := reader.Read(buffer)

0 commit comments

Comments
 (0)