Releases: A13xB0/GopherSocks
Release list
v0.1.0
Connection core rewrite. The wire format is unchanged, and existing NewQUIC / StartListener / Data() / SendToClient code keeps working.
Highlights
-
Listen()+Serve(ctx, handler): a goroutine per session, which closes when the handler returns. -
Session.Messages(): pull-based reads, so a slow handler slows its own client through flow control instead of the server buffering.Session.Context()records why the session closed. -
Per-session writer:
SendToClientqueues and returns; frames are batched into one write, and a client stuck behind forWriteTimeoutis closed (ErrSlowConsumer). -
framingpackage:Legacy(the original QUIC format),UvarintandUint32. QUIC picks the codec by ALPN (WithQUICCodec), so a new wire format can roll out while old clients still connect. -
Throughput vs v0.0.13:
Benchmark Change QUIC outbound 5× Fan-out to 100 clients 10× TCP bursts 6× QUIC inbound 1.25–1.75× QUIC echo 1.4× faster; allocations 1,328 → 16
Fixes
- A payload containing
\n\n\nno longer wedges a QUIC stream. - The 10 kB QUIC cap is gone.
- UDP datagrams are no longer truncated to 100 bytes.
- An idle client can no longer block accept.
- The accept loop no longer spins after stop.
- One connection over the limit no longer stops the TCP server.
- Closing a session no longer panics with "send on closed channel".
- TCP frames no longer desync or interleave.
- The self-signed ECDSA certificate is only generated when you don't supply TLS.
- Top-level protocol options now apply.
- UDP sessions now expire after
ReadTimeout. - WebSocket bind errors are now reported.
Upgrading
- Interfaces grew:
SessiongainsMessagesandContext;ListenergainsListenandServe. - Exported internals removed:
BaseSessionand the per-protocol session types. SendToClientreturns before writing: don't modify the slice afterwards.- UDP sessions expire after
ReadTimeout. - Requires Go 1.26 (quic-go v0.63).