From 767e1c6f589c6c2c5409e0e042a9528e37269499 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Fri, 5 Mar 2021 08:06:37 +0100 Subject: [PATCH] lib/connections: Expose SetReadBuffer on conn passed to quic (ref #7417) (#7432) --- lib/connections/quic_listen.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/connections/quic_listen.go b/lib/connections/quic_listen.go index 62b40bb99..ada6429ca 100644 --- a/lib/connections/quic_listen.go +++ b/lib/connections/quic_listen.go @@ -90,13 +90,17 @@ func (t *quicListener) serve(ctx context.Context) error { svc, conn := stun.New(t.cfg, t, packetConn) defer func() { _ = conn.Close() }() + wrapped := &stunConnQUICWrapper{ + PacketConn: conn, + underlying: packetConn.(*net.UDPConn), + } go svc.Serve(ctx) - registry.Register(t.uri.Scheme, conn) - defer registry.Unregister(t.uri.Scheme, conn) + registry.Register(t.uri.Scheme, wrapped) + defer registry.Unregister(t.uri.Scheme, wrapped) - listener, err := quic.Listen(conn, t.tlsCfg, quicConfig) + listener, err := quic.Listen(wrapped, t.tlsCfg, quicConfig) if err != nil { l.Infoln("Listen (BEP/quic):", err) return err @@ -213,3 +217,13 @@ func (f *quicListenerFactory) New(uri *url.URL, cfg config.Wrapper, tlsCfg *tls. func (quicListenerFactory) Enabled(cfg config.Configuration) bool { return true } + +type stunConnQUICWrapper struct { + net.PacketConn + underlying *net.UDPConn +} + +// SetReadBuffer is required by QUIC. +func (s *stunConnQUICWrapper) SetReadBuffer(size int) error { + return s.underlying.SetReadBuffer(size) +}