From 7413246fb81e1c4918220319309740d2b44dce58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E3=81=AE=E3=81=8B=E3=81=88=E3=81=A7?= Date: Mon, 22 Nov 2021 14:13:25 +0800 Subject: [PATCH] Feat: implement set buffer methods in QUIC sysConn (#1404) --- transport/internet/quic/conn.go | 17 +++++++++++++++-- transport/internet/quic/dialer.go | 2 +- transport/internet/quic/hub.go | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/transport/internet/quic/conn.go b/transport/internet/quic/conn.go index 9a768776d..7258e1489 100644 --- a/transport/internet/quic/conn.go +++ b/transport/internet/quic/conn.go @@ -4,6 +4,7 @@ import ( "crypto/cipher" "crypto/rand" "errors" + "syscall" "time" "github.com/lucas-clemente/quic-go" @@ -15,12 +16,12 @@ import ( ) type sysConn struct { - conn net.PacketConn + conn *net.UDPConn header internet.PacketHeader auth cipher.AEAD } -func wrapSysConn(rawConn net.PacketConn, config *Config) (*sysConn, error) { +func wrapSysConn(rawConn *net.UDPConn, config *Config) (*sysConn, error) { header, err := getHeader(config) if err != nil { return nil, err @@ -128,6 +129,14 @@ func (c *sysConn) LocalAddr() net.Addr { return c.conn.LocalAddr() } +func (c *sysConn) SetReadBuffer(bytes int) error { + return c.conn.SetReadBuffer(bytes) +} + +func (c *sysConn) SetWriteBuffer(bytes int) error { + return c.conn.SetWriteBuffer(bytes) +} + func (c *sysConn) SetDeadline(t time.Time) error { return c.conn.SetDeadline(t) } @@ -140,6 +149,10 @@ func (c *sysConn) SetWriteDeadline(t time.Time) error { return c.conn.SetWriteDeadline(t) } +func (c *sysConn) SyscallConn() (syscall.RawConn, error) { + return c.conn.SyscallConn() +} + type interConn struct { stream quic.Stream local net.Addr diff --git a/transport/internet/quic/dialer.go b/transport/internet/quic/dialer.go index df20d1fe6..a19ed62cf 100644 --- a/transport/internet/quic/dialer.go +++ b/transport/internet/quic/dialer.go @@ -154,7 +154,7 @@ func (s *clientSessions) openConnection(destAddr net.Addr, config *Config, tlsCo KeepAlive: true, } - conn, err := wrapSysConn(rawConn, config) + conn, err := wrapSysConn(rawConn.(*net.UDPConn), config) if err != nil { rawConn.Close() return nil, err diff --git a/transport/internet/quic/hub.go b/transport/internet/quic/hub.go index 0a67fedab..78d52c029 100644 --- a/transport/internet/quic/hub.go +++ b/transport/internet/quic/hub.go @@ -110,7 +110,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti KeepAlive: true, } - conn, err := wrapSysConn(rawConn, config) + conn, err := wrapSysConn(rawConn.(*net.UDPConn), config) if err != nil { conn.Close() return nil, err