Fix auto pong responses not flushing after block #393
Merged
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.
Currently auto pongs are written and flushed during
read()
. If aWouldBlock
error is received it is ignored and reading continues.In the case the usage is read-predominant, this presents a scenario where the auto pong is
WouldBlock
-ed and will never retry flushing until another ping is received or the client does some unrelated writes. This could cause the other connected party to time out the connection as it has failed to receive a timely pong response.I reproduced this in new test
read_usage_auto_pong_flush
.To fix we record if a pong write failed in this way and retry on all subsequent
read
calls until a flush succeeds.