add buffer size option for udp connection

This commit is contained in:
ginuerzh
2025-07-30 21:40:53 +08:00
parent b64e5901b6
commit a5309eee97
26 changed files with 218 additions and 219 deletions
+12 -10
View File
@@ -2,10 +2,10 @@ package v5
import (
"bytes"
"math"
"net"
"time"
"github.com/go-gost/core/common/bufpool"
"github.com/go-gost/core/logger"
"github.com/go-gost/gosocks5"
)
@@ -25,17 +25,18 @@ func (c *bindConn) RemoteAddr() net.Addr {
}
type udpRelayConn struct {
udpConn *net.UDPConn
tcpConn net.Conn
taddr net.Addr
rbuf [math.MaxUint16]byte
wbuf [math.MaxInt16]byte
logger logger.Logger
udpConn *net.UDPConn
tcpConn net.Conn
taddr net.Addr
bufferSize int
logger logger.Logger
}
func (c *udpRelayConn) ReadFrom(b []byte) (n int, addr net.Addr, err error) {
buf := c.rbuf[:]
nn, err := c.udpConn.Read(buf[:])
buf := bufpool.Get(c.bufferSize)
defer bufpool.Put(buf)
nn, err := c.udpConn.Read(buf)
if err != nil {
return
}
@@ -81,7 +82,8 @@ func (c *udpRelayConn) WriteTo(b []byte, addr net.Addr) (n int, err error) {
Data: b,
}
buf := c.wbuf[:]
buf := bufpool.Get(c.bufferSize)
defer bufpool.Put(buf)
nn, err := dgram.WriteTo(bytes.NewBuffer(buf[:0]))
if err != nil {
+5 -4
View File
@@ -225,9 +225,10 @@ func (c *socks5Connector) relayUDP(ctx context.Context, conn net.Conn, addr net.
}
return &udpRelayConn{
udpConn: cc.(*net.UDPConn),
tcpConn: conn,
taddr: addr,
logger: log,
udpConn: cc.(*net.UDPConn),
tcpConn: conn,
taddr: addr,
bufferSize: c.md.udpBufferSize,
logger: log,
}, nil
}
+9
View File
@@ -8,10 +8,15 @@ import (
mdutil "github.com/go-gost/x/metadata/util"
)
const (
defaultUDPBufferSize = 4096
)
type metadata struct {
connectTimeout time.Duration
noTLS bool
relay string
udpBufferSize int
udpTimeout time.Duration
muxCfg *mux.Config
}
@@ -20,6 +25,10 @@ func (c *socks5Connector) parseMetadata(md mdata.Metadata) (err error) {
c.md.connectTimeout = mdutil.GetDuration(md, "timeout")
c.md.noTLS = mdutil.GetBool(md, "notls")
c.md.relay = mdutil.GetString(md, "relay")
c.md.udpBufferSize = mdutil.GetInt(md, "udp.bufferSize", "udpBufferSize")
if c.md.udpBufferSize <= 0 {
c.md.udpBufferSize = defaultUDPBufferSize
}
c.md.udpTimeout = mdutil.GetDuration(md, "udp.timeout")
c.md.muxCfg = &mux.Config{