#5815·quic-go

EMSGSIZE during the handshake is swallowed, packets are retransmitted at the same size

Author: the-sargeCreated Aug 25, 2026Updated Sep 16, 2026

v0.61.0, macOS 26.6 arm64 on both ends, path MTU 1280 (Tailscale). Default Config on both sides, handshake never completes:

WriteMsgUDP len=1280 -> sendmsg: message too long   (×12, every PTO, always 1280)
handshake FAILED after 8s: timeout: no recent network activity

send_queue.go:95 ignores EMSGSIZE so that PMTUD / loss detection can handle it, but before the handshake is confirmed nothing does: maxPacketSize() keeps returning InitialPacketSize, so each retransmission is the same size and gets the same error. With InitialPacketSize: 1200 on both sides the handshake completes in 20ms.

Would you take a PR that, on EMSGSIZE for an Initial/Handshake packet, drops the packet size to MinInitialPacketSize until the MTU discoverer starts? That leaves the 1280 default alone (so not #5634) and only acts on a signal the kernel already gave us. The same thing was mentioned in #3327 as the follow-up to isSendMsgSizeErr.

Repro (server + client, -initial flag): https://gist.github.com/the-sarge/31505ee789d7aa1e7ce8c4866c4c0d83