Try to fix UDP error

This commit is contained in:
yaotthaha-vscode 2021-12-01 23:06:00 +08:00 committed by yuhan6665
parent 7c240e8630
commit 4fc284a8e9
3 changed files with 17 additions and 4 deletions

View file

@ -4,6 +4,7 @@ import (
"crypto/cipher" "crypto/cipher"
"crypto/rand" "crypto/rand"
"errors" "errors"
"syscall"
"time" "time"
"github.com/lucas-clemente/quic-go" "github.com/lucas-clemente/quic-go"
@ -15,12 +16,12 @@ import (
) )
type sysConn struct { type sysConn struct {
conn net.PacketConn conn *net.UDPConn
header internet.PacketHeader header internet.PacketHeader
auth cipher.AEAD 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) header, err := getHeader(config)
if err != nil { if err != nil {
return nil, err return nil, err
@ -128,6 +129,14 @@ func (c *sysConn) LocalAddr() net.Addr {
return c.conn.LocalAddr() 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 { func (c *sysConn) SetDeadline(t time.Time) error {
return c.conn.SetDeadline(t) return c.conn.SetDeadline(t)
} }
@ -140,6 +149,10 @@ func (c *sysConn) SetWriteDeadline(t time.Time) error {
return c.conn.SetWriteDeadline(t) return c.conn.SetWriteDeadline(t)
} }
func (c *sysConn) SyscallConn() (syscall.RawConn, error) {
return c.conn.SyscallConn()
}
type interConn struct { type interConn struct {
stream quic.Stream stream quic.Stream
local net.Addr local net.Addr

View file

@ -154,7 +154,7 @@ func (s *clientSessions) openConnection(destAddr net.Addr, config *Config, tlsCo
KeepAlive: true, KeepAlive: true,
} }
conn, err := wrapSysConn(rawConn, config) conn, err := wrapSysConn(rawConn.(*net.UDPConn), config)
if err != nil { if err != nil {
rawConn.Close() rawConn.Close()
return nil, err return nil, err

View file

@ -108,7 +108,7 @@ func Listen(ctx context.Context, address net.Address, port net.Port, streamSetti
MaxIncomingUniStreams: -1, MaxIncomingUniStreams: -1,
} }
conn, err := wrapSysConn(rawConn, config) conn, err := wrapSysConn(rawConn.(*net.UDPConn), config)
if err != nil { if err != nil {
conn.Close() conn.Close()
return nil, err return nil, err