EMSGSIZE during the handshake is swallowed, packets are retransmitted at the same size
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 activitysend_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
Source: quic-go/quic-go