New
v0.58.0
This release optimizes the QUIC handshake:
- Multiple incoming packets are now processed before sending an acknowledgment, reducing the total number of packets sent: #5451
- ACK frames are now packed into coalesced packets, reducing the need to send a separate packet just for the ACK in many cases: #5477
- When packets are buffered during the handshake, this now doesn't lead to inflated RTT measurements anymore: #5493, #5494
Other notable changes
- quic-go now has a new logo: #5484
- ACK frames can now be encoded with up to 64 ranges (previously: 32): #5476
- Serializing ACK frames is now significantly faster: #5476
- Improved batch packet processing logic: #5478
- qlog: added support for the
datagram_idonpacket_sent,packet_receivedandpacket_bufferedevents, using the CRC32 of the packet: #5455
Changelog
- qlog: add a DebugEvent by @marten-seemann in https://github.com/quic-go/quic-go/pull/5456
- qlog the datagram_id for long header and coalesced packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/5455
- build(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in https://github.com/quic-go/quic-go/pull/5458
- handshake: pass cipherSuite by value instead of pointer by @marten-seemann in https://github.com/quic-go/quic-go/pull/5459
- handshake: add a benchmark for token decoding by @marten-seemann in https://github.com/quic-go/quic-go/pull/5460
- use synctest in the session resumption test by @marten-seemann in https://github.com/quic-go/quic-go/pull/5424
- handshake: fix QUIC events with session tickets disabled on Go 1.26 by @marten-seemann in https://github.com/quic-go/quic-go/pull/5462
- fix flaky TestConnectionCongestionControl by @Copilot in https://github.com/quic-go/quic-go/pull/5467
- simnet: move latency configuration to Router, simplify queueing logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/5463
- use synctest for the RTT and reordering tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5464
- use synctest for 0-RTT integration tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/5465
- allow processing of multiple packets before handshake completion by @marten-seemann in https://github.com/quic-go/quic-go/pull/5451
- ackhandler: disentangle ReceivedPacketHandler and SentPacketHandler by @marten-seemann in https://github.com/quic-go/quic-go/pull/5469
- refactor connection tests to remove ReceivedPacketHandler mock by @marten-seemann in https://github.com/quic-go/quic-go/pull/5468
- ackhandler: remove ReceivedPacketHandler interface, use struct directly by @marten-seemann in https://github.com/quic-go/quic-go/pull/5472
- wire: add a function to trunctate an ACK frame by @marten-seemann in https://github.com/quic-go/quic-go/pull/5476
- allow packing of ACKs in coalesced packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/5477
- improve batch packet processing logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/5478
- build(deps): bump actions/cache from 4 to 5 by @dependabot[bot] in https://github.com/quic-go/quic-go/pull/5482
- build(deps): bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in https://github.com/quic-go/quic-go/pull/5483
- update the logo by @marten-seemann in https://github.com/quic-go/quic-go/pull/5484
- ci: add Go 1.26rc1 to tested Go versions by @marten-seemann in https://github.com/quic-go/quic-go/pull/5486
- utils: make TestAddTimestamp work in all time zones by @marten-seemann in https://github.com/quic-go/quic-go/pull/5492
- ackhandler: record RTT measurements for non-ack-eliciting packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/5494
- ackhandler: only generate RTT sample for the last ack-eliciting packet by @marten-seemann in https://github.com/quic-go/quic-go/pull/5493
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.57.0...v0.58.0