-
Notifications
You must be signed in to change notification settings - Fork 201
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tweaks for the draining period #870
Merged
Merged
Changes from 2 commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1522,20 +1522,30 @@ from its peer. These packets might have been sent prior to receiving any close | |
signal, or they might be retransmissions of packets for which acknowledgments | ||
were lost. | ||
|
||
The draining period persists for three times the current Retransmission Timeout | ||
(RTO) interval as defined in {{QUIC-RECOVERY}}. During this period, new packets | ||
can be acknowledged, but no new application data can be sent on the connection. | ||
The draining period exists to ensure that delayed or reordered packets are | ||
properly discarded. This state SHOULD persist for three times the current | ||
Retransmission Timeout (RTO) interval as defined in {{QUIC-RECOVERY}}. During | ||
this period no new application data can be sent on the connection. | ||
|
||
Different treatment is given to packets that are received while a connection is | ||
in the draining period depending on how the connection was closed. | ||
|
||
An endpoint that is in a draining period MUST NOT send packets unless they | ||
contain a CONNECTION_CLOSE or APPLICATION_CLOSE frame. | ||
in the draining period depending on how the connection was closed. An endpoint | ||
that is in a draining period MUST NOT send packets unless they contain a | ||
CONNECTION_CLOSE or APPLICATION_CLOSE frame. | ||
|
||
Once the draining period has ended, an endpoint SHOULD discard per-connection | ||
state. This results in new packets on the connection being discarded. An | ||
endpoint MAY send a stateless reset in response to any further incoming packets. | ||
|
||
An endpoint MAY exit the draining period earlier if it can guarantee that its | ||
peer is also draining. Receiving a CONNECTION_CLOSE or APPLICATION_CLOSE frame | ||
is sufficient confirmation, as is receiving a stateless reset. However, | ||
disposing of connection state could result in delayed or reordered packets to be | ||
handled poorly. For endpoints that have some alternative means to ensure that | ||
that late arriving packets on the connection are discarded, such as closing the | ||
UDP port, an abbreviated draining period can allow for faster resource recovery. | ||
Servers that retain an open port for accepting new connections SHOULD NOT exit | ||
the draining period early. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This sentence is good. |
||
|
||
The draining period does not apply when a stateless reset ({{stateless-reset}}) | ||
is sent. | ||
|
||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(i) Closing the "port" makes no sense, you probably meant to say "socket".
(ii) Closing the port doesn't ensure that they;re discarded -- this can result in an ICMP message being generated in response. Perhaps say something like "to ensure that late-arriving packets on the connection do not create QUIC state, such as by closing the UDP socket"