forked from quic-go/quic-go
sendQueue: ignore "datagram too large" error (#3328)
This commit introduces additional platform-dependent checking when the kernel returns an error. Previously, the session is terminated when PingFrame sends a discovery packet larger than the limit. With this commit, the error is checked, and if it is "datagram too large", the error is ignored. Additionally, 1. This commit re-enables MTU discovery on Windows unless it is disabled explicitly by user (Undo #3276), 2. Set IP_DONTFRAGMENT and IPV6_DONTFRAG with error checking on Windows, and 3. Set IP_MTU_DISCOVERY to PMTUDISC_DO for both IPv4 and IPv6 on Linux so that the kernel will return "message too long". Fixes #3273 #3327
This commit is contained in:
@@ -64,7 +64,13 @@ func (h *sendQueue) Run() error {
|
||||
shouldClose = true
|
||||
case p := <-h.queue:
|
||||
if err := h.conn.Write(p.Data); err != nil {
|
||||
return err
|
||||
// This additional check enables:
|
||||
// 1. Checking for "datagram too large" message from the kernel, as such,
|
||||
// 2. Path MTU discovery,and
|
||||
// 3. Eventual detection of loss PingFrame.
|
||||
if !isMsgSizeErr(err) {
|
||||
return err
|
||||
}
|
||||
}
|
||||
p.Release()
|
||||
select {
|
||||
|
||||
Reference in New Issue
Block a user