From 8e0a96a44c9f140f038eb1ce34dd49f6d6abc674 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 8 Nov 2023 14:46:42 +0700 Subject: [PATCH] Fix panic dues to quic-go changes quic.DialEarly requires separate UDP connection for each quic.EarlyConnection instead of re-using the same one. --- config_quic.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/config_quic.go b/config_quic.go index cd3eaee..3f397cb 100644 --- a/config_quic.go +++ b/config_quic.go @@ -127,11 +127,6 @@ func (d *quicParallelDialer) Dial(ctx context.Context, addrs []string, tlsCfg *t close(ch) }() - udpConn, err := net.ListenUDP("udp", nil) - if err != nil { - return nil, err - } - for _, addr := range addrs { go func(addr string) { defer wg.Done() @@ -140,6 +135,11 @@ func (d *quicParallelDialer) Dial(ctx context.Context, addrs []string, tlsCfg *t ch <- ¶llelDialerResult{conn: nil, err: err} return } + udpConn, err := net.ListenUDP("udp", nil) + if err != nil { + ch <- ¶llelDialerResult{conn: nil, err: err} + return + } conn, err := quic.DialEarly(ctx, udpConn, remoteAddr, tlsCfg, cfg) select { case ch <- ¶llelDialerResult{conn: conn, err: err}: @@ -147,6 +147,9 @@ func (d *quicParallelDialer) Dial(ctx context.Context, addrs []string, tlsCfg *t if conn != nil { conn.CloseWithError(quic.ApplicationErrorCode(http3.ErrCodeNoError), "") } + if udpConn != nil { + udpConn.Close() + } } }(addr) }