`quic-go` version:
```
github.com/lucas-clemente/quic-go v0.23.0
```
```
gi…thub.com/lucas-clemente/quic-go v0.23.0 h1:5vFnKtZ6nHDFsc/F3uuiF4T3y/AXaQdxjUqiVw26GZE=
github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0=
```
With Path MTU Discovery enabled on windows, an error is thrown:
```
{"level":"error","ts":1631441093.781284,"caller":"peer/quic.go:65","msg":"accepting stream from peers","PeerID":11890175577191328473,"Initiator":true,"error":"INTERNAL_ERROR: write udp [::]:62885->[redacted]:1111: wsasendto: A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.","stacktrace":"github.com/zllovesuki/t/peer.(*QUIC).Start\n\tC:/Users/Ultium/code/t/peer/quic.go:65"}
```
`*quic.Config` is as follows:
```
&quic.Config{
KeepAlive: true,
HandshakeIdleTimeout: time.Second * 3,
MaxIdleTimeout: time.Second * 15,
}
```
Curiously, the INTERNAL_ERROR is not raised immediately. I was able to `AcceptStream(ctx)`/`OpenStream()` to do application layer handshake, then the quic session is passed to a different struct to do `AcceptStream(ctx)` in a loop. The error is then raised.
Full log is posted below.
```
C:\Users\Ultium\code\t [main ≡ +1 ~1 -0 !]> $Env:QUIC_GO_LOG_LEVEL="DEBUG"
C:\Users\Ultium\code\t [main ≡ +1 ~1 -0 !]> bin\t-client-windows-amd64.exe -where [redacted] -protocol 3
{"level":"info","ts":1631442119.4254043,"caller":"client/main.go:74","msg":"auto discovering peer target"}
{"level":"info","ts":1631442119.7480736,"caller":"client/main.go:108","msg":"Protocol proposal","protocol":"QUICProtocol","clientVersion":"dev"}
2021/09/12 03:21:59 muxer Increased receive buffer size to 2048 kiB
2021/09/12 03:21:59 client Starting new connection to [redacted] ([::]:63715 -> [redacted]:1111), source connection ID (empty), destination connection ID 14c7bcc42d0475cfb49a, version v1
2021/09/12 03:21:59 muxer Adding connection ID (empty).
2021/09/12 03:21:59 client Not doing 0-RTT.
2021/09/12 03:21:59 client Sending a keep-alive PING to keep the connection alive.
2021/09/12 03:21:59 client -> Sending packet 0 (1252 bytes) for connection 14c7bcc42d0475cfb49a, Initial
2021/09/12 03:21:59 client Long Header{Type: Initial, DestConnectionID: 14c7bcc42d0475cfb49a, SrcConnectionID: (empty), Token: (empty), PacketNumber: 0, PacketNumberLen: 2, Length: 1232, Version: v1}
2021/09/12 03:21:59 client -> &wire.CryptoFrame{Offset: 0, Data length: 308, Offset + Data length: 308}
2021/09/12 03:21:59 client <- Received Retry:
2021/09/12 03:21:59 client Long Header{Type: Retry, DestConnectionID: (empty), SrcConnectionID: 5b3bc9e2, Token: 0xafe88be55c725d27b35c32cfa803563d5df662485967e8523196bb0f989e19148c62cb75fbdfcf97671da9d7ed5057e1f0147baca7083346912a0ddfa9ab7654264617f2df38412f4d23c8f9add7ee03381354920fc7066f75ef0541c5e8f1151ffdb8bc, Version: v1}
2021/09/12 03:21:59 client Switching destination connection ID to: 5b3bc9e2
2021/09/12 03:21:59 client updated RTT: 28.4083ms (σ: 14.20415ms)
2021/09/12 03:21:59 client -> Sending packet 1 (1252 bytes) for connection 14c7bcc42d0475cfb49a, Initial
2021/09/12 03:21:59 client Long Header{Type: Initial, DestConnectionID: 5b3bc9e2, SrcConnectionID: (empty), Token: 0xafe88be55c725d27b35c32cfa803563d5df662485967e8523196bb0f989e19148c62cb75fbdfcf97671da9d7ed5057e1f0147baca7083346912a0ddfa9ab7654264617f2df38412f4d23c8f9add7ee03381354920fc7066f75ef0541c5e8f1151ffdb8bc, PacketNumber: 1, PacketNumberLen: 2, Length: 1137, Version: v1}
2021/09/12 03:21:59 client -> &wire.CryptoFrame{Offset: 0, Data length: 308, Offset + Data length: 308}
2021/09/12 03:21:59 client Parsed a coalesced packet. Part 1: 131 bytes. Remaining: 1121 bytes.
2021/09/12 03:21:59 client <- Reading packet 0 (131 bytes) for connection (empty), Initial
2021/09/12 03:21:59 client Long Header{Type: Initial, DestConnectionID: (empty), SrcConnectionID: 70bd1f29, Token: (empty), PacketNumber: 0, PacketNumberLen: 2, Length: 117, Version: v1}
2021/09/12 03:21:59 client Received first packet. Switching destination connection ID to: 70bd1f29
2021/09/12 03:21:59 client <- &wire.AckFrame{LargestAcked: 1, LowestAcked: 1, DelayTime: 0s}
2021/09/12 03:21:59 client newly acked packets (1): [1]
2021/09/12 03:21:59 client updated RTT: 27.693ms (σ: 12.082ms)
2021/09/12 03:21:59 client <- &wire.CryptoFrame{Offset: 0, Data length: 90, Offset + Data length: 90}
2021/09/12 03:21:59 client Received ServerHello message (90 bytes, encryption level: Initial)
2021/09/12 03:21:59 client Installed Handshake Write keys (using TLS_AES_128_GCM_SHA256)
2021/09/12 03:21:59 client Installed Handshake Read keys (using TLS_AES_128_GCM_SHA256)
2021/09/12 03:21:59 client Queueing ACK because the first packet should be acknowledged.
2021/09/12 03:21:59 client Parsed a coalesced packet. Part 2: 1121 bytes. Remaining: 0 bytes.
2021/09/12 03:21:59 client <- Reading packet 0 (1121 bytes) for connection (empty), Handshake
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: (empty), SrcConnectionID: 70bd1f29, PacketNumber: 0, PacketNumberLen: 2, Length: 1108, Version: v1}
2021/09/12 03:21:59 client <- &wire.CryptoFrame{Offset: 0, Data length: 1086, Offset + Data length: 1086}
2021/09/12 03:21:59 client Received EncryptedExtensions message (124 bytes, encryption level: Handshake)
2021/09/12 03:21:59 client Processed Transport Parameters: &wire.TransportParameters{OriginalDestinationConnectionID: 14c7bcc42d0475cfb49a, InitialSourceConnectionID: 70bd1f29, RetrySourceConnectionID: 5b3bc9e2, InitialMaxStreamDataBidiLocal: 524288, InitialMaxStreamDataBidiRemote: 524288, InitialMaxStreamDataUni: 524288, InitialMaxData: 786432, MaxBidiStreamNum: 100, MaxUniStreamNum: 100, MaxIdleTimeout: 15s, AckDelayExponent: 3, MaxAckDelay: 26ms, ActiveConnectionIDLimit: 4, StatelessResetToken: 0x2225f52db3cfbebc3c5ce66e24f92b57, MaxDatagramFrameSize: 0}
2021/09/12 03:21:59 client Queueing ACK because the first packet should be acknowledged.
2021/09/12 03:21:59 client Sending a keep-alive PING to keep the connection alive.
2021/09/12 03:21:59 client -> Sending packet 2 (1252 bytes) for connection 14c7bcc42d0475cfb49a, Initial
2021/09/12 03:21:59 client Long Header{Type: Initial, DestConnectionID: 70bd1f29, SrcConnectionID: (empty), Token: 0xafe88be55c725d27b35c32cfa803563d5df662485967e8523196bb0f989e19148c62cb75fbdfcf97671da9d7ed5057e1f0147baca7083346912a0ddfa9ab7654264617f2df38412f4d23c8f9add7ee03381354920fc7066f75ef0541c5e8f1151ffdb8bc, PacketNumber: 2, PacketNumberLen: 2, Length: 1137, Version: v1}
2021/09/12 03:21:59 client -> &wire.AckFrame{LargestAcked: 0, LowestAcked: 0, DelayTime: 0s}
2021/09/12 03:21:59 client <- Reading packet 1 (1252 bytes) for connection (empty), Handshake
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: (empty), SrcConnectionID: 70bd1f29, PacketNumber: 1, PacketNumberLen: 2, Length: 1239, Version: v1}
2021/09/12 03:21:59 client <- &wire.CryptoFrame{Offset: 1086, Data length: 1216, Offset + Data length: 2302}
2021/09/12 03:21:59 client Sending a keep-alive PING to keep the connection alive.
2021/09/12 03:21:59 client Dropping Initial keys.
2021/09/12 03:21:59 client -> Sending packet 0 (36 bytes) for connection 14c7bcc42d0475cfb49a, Handshake
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: 70bd1f29, SrcConnectionID: (empty), PacketNumber: 0, PacketNumberLen: 2, Length: 23, Version: v1}
2021/09/12 03:21:59 client -> &wire.AckFrame{LargestAcked: 1, LowestAcked: 0, DelayTime: 0s}
2021/09/12 03:21:59 client <- Reading packet 2 (1252 bytes) for connection (empty), Handshake
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: (empty), SrcConnectionID: 70bd1f29, PacketNumber: 2, PacketNumberLen: 2, Length: 1239, Version: v1}
2021/09/12 03:21:59 client <- &wire.CryptoFrame{Offset: 2302, Data length: 1216, Offset + Data length: 3518}
2021/09/12 03:21:59 client Setting ACK timer to max ack delay: 25ms
2021/09/12 03:21:59 client Sending a keep-alive PING to keep the connection alive.
2021/09/12 03:21:59 client Parsed a coalesced packet. Part 1: 582 bytes. Remaining: 91 bytes.
2021/09/12 03:21:59 client <- Reading packet 3 (582 bytes) for connection (empty), Handshake
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: (empty), SrcConnectionID: 70bd1f29, PacketNumber: 3, PacketNumberLen: 2, Length: 569, Version: v1}
2021/09/12 03:21:59 client <- &wire.CryptoFrame{Offset: 3518, Data length: 546, Offset + Data length: 4064}
2021/09/12 03:21:59 client Received Certificate message (3826 bytes, encryption level: Handshake)
2021/09/12 03:21:59 client Received CertificateVerify message (78 bytes, encryption level: Handshake)
2021/09/12 03:21:59 client Received Finished message (36 bytes, encryption level: Handshake)
2021/09/12 03:21:59 client Installed 1-RTT Read keys (using TLS_AES_128_GCM_SHA256)
2021/09/12 03:21:59 client Installed 1-RTT Write keys (using TLS_AES_128_GCM_SHA256)
2021/09/12 03:21:59 client Queueing ACK because packet 2 packets were received after the last ACK (using initial threshold: 2).
2021/09/12 03:21:59 client Parsed a coalesced packet. Part 2: 91 bytes. Remaining: 0 bytes.
2021/09/12 03:21:59 client <- Reading packet 0 (91 bytes) for connection (empty), 1-RTT
2021/09/12 03:21:59 client Short Header{DestConnectionID: (empty), PacketNumber: 0, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client <- &wire.NewConnectionIDFrame{SequenceNumber: 3, ConnectionID: daffb804, StatelessResetToken: 0xbb42e8227d3fee9194dac53d3ce21f91}
2021/09/12 03:21:59 client <- &wire.NewConnectionIDFrame{SequenceNumber: 2, ConnectionID: 57499ca8, StatelessResetToken: 0xdf9693ee2a470de3d8677a4483fbc261}
2021/09/12 03:21:59 client <- &wire.NewConnectionIDFrame{SequenceNumber: 1, ConnectionID: b7111c61, StatelessResetToken: 0x7dc67757716218b02a6476f6339b8a95}
2021/09/12 03:21:59 client Queueing ACK because the first packet should be acknowledged.
2021/09/12 03:21:59 client Sending a keep-alive PING to keep the connection alive.
2021/09/12 03:21:59 client -> Sending coalesced packet (2 parts, 103 bytes) for connection 14c7bcc42d0475cfb49a
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: 70bd1f29, SrcConnectionID: (empty), PacketNumber: 1, PacketNumberLen: 2, Length: 62, Version: v1}
2021/09/12 03:21:59 client -> &wire.AckFrame{LargestAcked: 3, LowestAcked: 0, DelayTime: 0s}
2021/09/12 03:21:59 client -> &wire.CryptoFrame{Offset: 0, Data length: 36, Offset + Data length: 36}
2021/09/12 03:21:59 client Short Header{DestConnectionID: 70bd1f29, PacketNumber: 0, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client -> &wire.PingFrame{}
2021/09/12 03:21:59 client -> &wire.PingFrame{}
2021/09/12 03:21:59 client -> &wire.PingFrame{}
2021/09/12 03:21:59 client -> &wire.PingFrame{}
2021/09/12 03:21:59 client -> &wire.PingFrame{}
2021/09/12 03:21:59 client -> Sending packet 1 (29 bytes) for connection 14c7bcc42d0475cfb49a, 1-RTT
2021/09/12 03:21:59 client Short Header{DestConnectionID: 70bd1f29, PacketNumber: 1, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client -> &wire.AckFrame{LargestAcked: 0, LowestAcked: 0, DelayTime: 28.4169ms}
2021/09/12 03:21:59 client -> Sending packet 2 (44 bytes) for connection 14c7bcc42d0475cfb49a, 1-RTT
2021/09/12 03:21:59 client Short Header{DestConnectionID: b7111c61, PacketNumber: 2, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client -> &wire.RetireConnectionIDFrame{SequenceNumber:0x0}
2021/09/12 03:21:59 client -> &wire.StreamFrame{StreamID: 0, Fin: false, Offset: 0, Data length: 17, Offset + Data length: 17}
2021/09/12 03:21:59 client <- Reading packet 4 (36 bytes) for connection (empty), Handshake
2021/09/12 03:21:59 client Long Header{Type: Handshake, DestConnectionID: (empty), SrcConnectionID: 70bd1f29, PacketNumber: 4, PacketNumberLen: 2, Length: 23, Version: v1}
2021/09/12 03:21:59 client <- &wire.AckFrame{LargestAcked: 1, LowestAcked: 0, DelayTime: 0s}
2021/09/12 03:21:59 client Peer doesn't await address validation any longer.
2021/09/12 03:21:59 client newly acked packets (1): [1]
2021/09/12 03:21:59 client updated RTT: 27.786ms (σ: 9.249ms)
2021/09/12 03:21:59 client Canceling loss detection timer. No PTO needed..
2021/09/12 03:21:59 client <- Reading packet 1 (24 bytes) for connection (empty), 1-RTT
2021/09/12 03:21:59 client Short Header{DestConnectionID: (empty), PacketNumber: 1, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client <- &wire.AckFrame{LargestAcked: 1, LowestAcked: 0, DelayTime: 104µs}
2021/09/12 03:21:59 client newly acked packets (1): [0]
2021/09/12 03:21:59 client Dropping Handshake keys.
2021/09/12 03:21:59 client <- Reading packet 2 (229 bytes) for connection (empty), 1-RTT
2021/09/12 03:21:59 client Short Header{DestConnectionID: (empty), PacketNumber: 2, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client <- &wire.HandshakeDoneFrame{}
2021/09/12 03:21:59 client <- &wire.NewTokenFrame{Token: 0x68ec090541e8eefcbdef8976be0aae6eff452d00f6565255b7996cdae032c64fe0082590714c29c32820d5805649bf70655234eb866a92fda2653487f3bb88572caf707efc44ec0414b9804fe1f317195941f0633b4a}
2021/09/12 03:21:59 client <- &wire.CryptoFrame{Offset: 0, Data length: 116, Offset + Data length: 116}
2021/09/12 03:21:59 client Received NewSessionTicket message (116 bytes, encryption level: 1-RTT)
2021/09/12 03:21:59 client Setting ACK timer to max ack delay: 25ms
2021/09/12 03:21:59 client <- Reading packet 3 (114 bytes) for connection (empty), 1-RTT
2021/09/12 03:21:59 client Short Header{DestConnectionID: (empty), PacketNumber: 3, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:21:59 client <- &wire.AckFrame{LargestAcked: 2, LowestAcked: 0, DelayTime: 160µs}
2021/09/12 03:21:59 client newly acked packets (1): [2]
2021/09/12 03:21:59 client updated RTT: 27.86ms (σ: 7.086ms)
2021/09/12 03:21:59 client Canceling loss detection timer. No packets in flight.
2021/09/12 03:21:59 client <- &wire.StreamFrame{StreamID: 0, Fin: false, Offset: 0, Data length: 88, Offset + Data length: 88}
2021/09/12 03:21:59 client Queueing ACK because packet 2 packets were received after the last ACK (using initial threshold: 2).
2021/09/12 03:21:59 client -> Sending packet 3 (29 bytes) for connection 14c7bcc42d0475cfb49a, 1-RTT
{"level":"info","ts":1631442119.9074583,"caller":"client/main.go:140","msg":"Peering established","link":{"Source":4925464347158992989,"Destination":919063264148885504,"Protocol":3}}
==================================================
Your Hostname: https://[redacted]
2021/09/12 03:21:59 client Short Header{DestConnectionID: b7111c61, PacketNumber: 3, PacketNumberLen: 2, KeyPhase: 0}
Requests will be forwarded to: http://127.0.0.1:3000
==================================================
2021/09/12 03:21:59 client -> &wire.AckFrame{LargestAcked: 3, LowestAcked: 0, DelayTime: 8.2013ms}
2021/09/12 03:22:00 client -> Sending packet 4 (1352 bytes) for connection 14c7bcc42d0475cfb49a, 1-RTT
2021/09/12 03:22:00 client Short Header{DestConnectionID: b7111c61, PacketNumber: 4, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:22:00 client -> &wire.PingFrame{}
2021/09/12 03:22:00 client <- Reading packet 4 (25 bytes) for connection (empty), 1-RTT
2021/09/12 03:22:00 client Short Header{DestConnectionID: (empty), PacketNumber: 4, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:22:00 client <- &wire.AckFrame{LargestAcked: 4, LowestAcked: 3, DelayTime: 25.408ms}
2021/09/12 03:22:00 client newly acked packets (1): [4]
2021/09/12 03:22:00 client updated RTT: 27.862ms (σ: 5.319ms)
2021/09/12 03:22:00 client -> Sending packet 5 (1402 bytes) for connection 14c7bcc42d0475cfb49a, 1-RTT
2021/09/12 03:22:00 client Short Header{DestConnectionID: b7111c61, PacketNumber: 5, PacketNumberLen: 2, KeyPhase: 0}
2021/09/12 03:22:00 client -> &wire.PingFrame{}
2021/09/12 03:22:00 client Destroying session with error: write udp [::]:63715->[redacted]:1111: wsasendto: A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.
2021/09/12 03:22:00 muxer Removing connection ID (empty).
2021/09/12 03:22:00 client Connection 14c7bcc42d0475cfb49a closed.
{"level":"error","ts":1631442120.2001612,"caller":"peer/quic.go:65","msg":"accepting stream from peers","PeerID":919063264148885504,"Initiator":true,"error":"INTERNAL_ERROR: write udp [::]:63715->[redacted]:1111: wsasendto: A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.","stacktrace":"github.com/zllovesuki/t/peer.(*QUIC).Start\n\tC:/Users/Ultium/code/t/peer/quic.go:65"}
{"level":"info","ts":1631442120.2014284,"caller":"client/main.go:156","msg":"peer disconnected, exiting"}
```