Skip to content

Releases: A13xB0/GopherSocks

v0.1.0

Choose a tag to compare

@A13xB0 A13xB0 released this 30 Sep 19:34
4a37cae

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: SendToClient queues and returns; frames are batched into one write, and a client stuck behind for WriteTimeout is closed (ErrSlowConsumer).

  • framing package: Legacy (the original QUIC format), Uvarint and Uint32. 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\n no 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: Session gains Messages and Context; Listener gains Listen and Serve.
  • Exported internals removed: BaseSession and the per-protocol session types.
  • SendToClient returns before writing: don't modify the slice afterwards.
  • UDP sessions expire after ReadTimeout.
  • Requires Go 1.26 (quic-go v0.63).

PRs: #17, #18.

v0.0.13

Choose a tag to compare

@A13xB0 A13xB0 released this 28 Mar 16:21
1c4f172
fix race condition (#16)

v0.0.12

Choose a tag to compare

@A13xB0 A13xB0 released this 28 Mar 15:56
26e9444
fix err

v0.0.11

Choose a tag to compare

@A13xB0 A13xB0 released this 28 Mar 15:41
4cdcd64
fix err

v0.0.10

Choose a tag to compare

@A13xB0 A13xB0 released this 27 Mar 23:03
6e382f4
Update listener.go (#14)

v0.0.9

Choose a tag to compare

@A13xB0 A13xB0 released this 27 Mar 22:57
a731402
More Robust Quic (#13)

v0.0.8

Choose a tag to compare

@A13xB0 A13xB0 released this 19 Mar 15:41
1e5d254
logs disabled by default (#12)

v0.0.7

Choose a tag to compare

@A13xB0 A13xB0 released this 19 Mar 13:52
caab16c
possible bug fix (#10)

v0.0.6

Choose a tag to compare

@A13xB0 A13xB0 released this 19 Mar 13:01
6463150

What's Changed

Full Changelog: v0.0.5...v0.0.6

v0.0.5

Choose a tag to compare

@A13xB0 A13xB0 released this 19 Mar 12:55
1dc03f0

What's Changed

Full Changelog: v0.0.4...v0.0.5