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.
It could also say "The sender MUST close the connection if a packet it knows is unsent is acknowledged." Which keeps the must, but does not require unlimited state.
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.
@mcmanus, @siyengar, does Ian's suggestion work better?
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.
"it knows" isn't really verifiable in any normative sense - it pretty much means SHOULD. prefer SHOULD.
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.
Generally I worry with a SHOULD no-one will end up implementing it because people will realize that it requires maintaining a lot of state. I like the spirit of Ian's wording but it's super confusing. SHOULD seems like the right thing here. I think if we acknowledge why it is a SHOULD it might convince more people to implement it along with a suggestion of how to implement it.
For example a sender could implement this by keeping track of all the packets sent and by advancing a smallest ackable packet periodically.
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.
The wording could also be "SHOULD close a connection when receiving an ACK for a packet that has not been sent unless the packet is older that oldest retransmittable packet in which case the ackowledgement of that packet should be ignored."
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.
But the retransmission queue may be sparse -- you don't necessarily know whether a packet no longer there was never sent or was simply already acknowledged.
SHOULD is supposed to have an explanation of why you might not. You SHOULD do this if you detect it, but you're not required to maintain enough state to detect it 100% of the time.
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.
@MikeBishop I think I agree but isn't
a good reason for SHOULD?