v0.44.0
v0.44 contains a lot of fixes related to HTTP Datagrams, new logic to determine (and configure) the QUIC packet size, as well as a significant speedup of the various parsers.
HTTP Datagram-related Fixes
The last release introduced support for HTTP Datagrams (RFC 9297). This release resolves a number of problems we discovered in the initial implementation:
- reject sending of DATAGRAM frames that exceed the currently available MTU (#4497)
- http3: deadline errors are now ignored in stream state tracking (#4495)
- http3: refuse to send HTTP datagrams associated with a closed stream (#4488)
- http3: use the send stream context for tracking the stream state (#4489)
- http3: fix memory leak caused by stream state tracking (#4523). Thanks to @GeorgeMac for debugging and fixing!
QUIC Packet Size and Path MTU Discovery
- The initial packet size is now configurable via
quic.Config
. Most users should not use this config option, but instead rely on Path MTU discovery (#4503) - The client's initial packet size was increased to 1280 bytes (#4500)
- Respect the client's
max_udp_payload_size
transport parameter (#4514) - qlog: add support for the
mtu_updated
event (#4517)
Speeding up Parsing the variable-length Integers
The QUIC varint parser was rewritten to act on byte slices instead of a bytes.Reader
. This is significantly faster (#4475). The new parser is now used for parsing QUIC frames (#4484), the QUIC packet header (#4481), the QUIC transport parameters (#4483) and HTTP datagrams (#4478).
Other Notable Changes
- http3:
ParseCapsule
now returns anio.EOF
(and not anio.UnexpectedEOF
) if the underlying reader returns anio.EOF
on the first byte (#4476) - http3:
ListenAndServe
was renamed toListenAndServeTLS
(#4522). Thanks to @ETZhangSX! - http3: reserved frame types now cause a connection error, as required by the RFC (#4467)
- http3: pass the correct
Connection
to theConnContext
callback (#4480). Thanks to @rthellend!
quic-go needs your support!
Is your project / company relying on quic-go?
Please consider funding the project. Any support is highly appreciated!
What's Changed
- build(deps): bump golangci/golangci-lint-action from 4 to 5 by @dependabot in #4472
- http3: return an io.EOF when parsing a capsule fails on the first byte by @marten-seemann in #4476
- quicvarint: add a function to parse a varint from a byte slice by @marten-seemann in #4475
- http3: avoid allocation when parsing the datagram's quarter stream ID by @marten-seemann in #4478
- http3: Pass original Conn to ConnContext by @rthellend in #4480
- http3: reject reserved frame types by @marten-seemann in #4467
- fix capture of loop variable in connection probe packet tests by @marten-seemann in #4486
- http3: refuse to send datagrams associated with a closed stream by @marten-seemann in #4488
- http3: use the stream context to detect when the send side is closed by @marten-seemann in #4489
- wire: use quicvarint.Parse to when parsing transport parameters by @marten-seemann in #4482
- wire: use quicvarint.Parse when parsing frames by @marten-seemann in #4484
- wire: refactor header parsing to use quicvarint.Parse by @marten-seemann in #4481
- wire: reduce allocations when parsing transport parameters by @marten-seemann in #4483
- fix incorrect reuse of UDP connection in handshake benchmark by @marten-seemann in #4491
- http3: fix race condition when creating state tracking stream by @marten-seemann in #4493
- ci: run benchmarks by @marten-seemann in #4492
- http3: ignore deadline errors when tracking QUIC stream states by @marten-seemann in #4495
- ci: update golangci-lint-action to v6 and golangci-lint to v1.58.0 by @marten-seemann in #4494
- ci: disable exhaustive linter for test files by @marten-seemann in #4499
- add an integration test for DPLPMTUD by @marten-seemann in #4498
- reject sending of DATAGRAM frames that exceed the current MTU by @marten-seemann in #4497
- wire: write configured value of max_udp_payload_size transport parameter by @marten-seemann in #4501
- increase initial packet size to 1280 bytes (for both IPv4 and IPv6) by @marten-seemann in #4500
- make the initial packet size configurable by @marten-seemann in #4503
- update all golang.org/x dependencies by @marten-seemann in #4506
- initialize the MTU discoverer when processing the transport parameters by @marten-seemann in #4514
- retry the MTU integration test up to 3 times by @marten-seemann in #4519
- logging / qlog: add support for DPLPMTUD by @marten-seemann in #4517
- http3: rename ListenAndServe to ListenAndServeTLS by @ETZhangSX in #4522
- fix(http3): handle streamStateSendAndReceiveClosed in onStreamStateChange by @GeorgeMac in #4523
New Contributors
- @ETZhangSX made their first contribution in #4522
Full Changelog: v0.43.0...v0.44.0