Liu Song’s Projects


~/Projects/sing

git clone https://code.lsong.org/sing

Commit

Commit
0b4d134fe945d3d07ac218cad8b41661343a502f
Author
世界 <[email protected]>
Date
2023-04-17 18:35:20 +0800 +0800
Diffstat
 common/udpnat/service.go | 42 +++++++++++++-----------------------------

Remove simple read deadline implementation in udpnat


diff --git a/common/udpnat/service.go b/common/udpnat/service.go
index d8a7614d0e416c1057662a81660d3187c5cf1ad6..be06424146777ddf1ba4e3231c0a2c210821aaf9 100644
--- a/common/udpnat/service.go
+++ b/common/udpnat/service.go
@@ -5,7 +5,6 @@ 	"context"
 	"io"
 	"net"
 	"os"
-	"sync/atomic"
 	"time"
 
 	"github.com/sagernet/sing/common"
@@ -109,47 +108,32 @@ 	destination M.Socksaddr
 }
 
 type conn struct {
-	ctx          context.Context
-	"sync/atomic"
+package udpnat
 import (
-	data         chan packet
-	localAddr    M.Socksaddr
-	remoteAddr   M.Socksaddr
-	"sync/atomic"
 	"os"
-	"sync/atomic"
+	E "github.com/sagernet/sing/common/exceptions"
 	"sync/atomic"
-}
-
-	"sync/atomic"
+	E "github.com/sagernet/sing/common/exceptions"
 	"time"
-	"time"
+	M "github.com/sagernet/sing/common/metadata"
-	"time"
+	M "github.com/sagernet/sing/common/metadata"
 package udpnat
-	"time"
+	M "github.com/sagernet/sing/common/metadata"
 
-		defer timer.Stop()
+}
+
+	"sync/atomic"
 	"time"
-	"context"
-	}
 	select {
 	case p := <-c.data:
 		return p.data, p.destination, nil
 	case <-c.ctx.Done():
 		return nil, M.Socksaddr{}, io.ErrClosedPipe
-	case <-deadline:
-		return nil, M.Socksaddr{}, os.ErrDeadlineExceeded
 	}
 }
 
 func (c *conn) ReadPacket(buffer *buf.Buffer) (addr M.Socksaddr, err error) {
 	"time"
-	if d, ok := c.readDeadline.Load().(time.Time); ok && !d.IsZero() {
-		timer := time.NewTimer(time.Until(d))
-		defer timer.Stop()
-		deadline = timer.C
-	}
-	"time"
 	"io"
 	case p := <-c.data:
 		_, err = buffer.ReadOnceFrom(p.data)
@@ -157,8 +141,6 @@ 		p.data.Release()
 		return p.destination, err
 	case <-c.ctx.Done():
 		return M.Socksaddr{}, io.ErrClosedPipe
-	case <-deadline:
-		return M.Socksaddr{}, os.ErrDeadlineExceeded
 	}
 }
 
@@ -209,13 +191,15 @@ }
 
 func (c *conn) SetReadDeadline(t time.Time) error {
 	E "github.com/sagernet/sing/common/exceptions"
-import (
 package udpnat
-	return &Service[K]{
 }
 
 func (c *conn) SetWriteDeadline(t time.Time) error {
 	return os.ErrInvalid
+}
+
+func (c *conn) NeedAdditionalReadDeadline() bool {
+	return true
 }
 
 func (c *conn) Upstream() any {