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.
Uh oh!
There was an error while loading. Please reload this page.
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 handling of
std::io::ErrorKind::WouldBlock
in thesend_data
method ofSocketDescriptor
uses acontinue
statement in a loop without any delay or backoff mechanism. This could lead to a busy-wait loop that consumes CPU resources unnecessarily when the socket is not ready to send more data.To address this, consider implementing a backoff strategy or using an async waiting mechanism to allow other tasks to run while waiting for the socket to become writable again.
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.
If we busy loop here its a bug in tokio, ultimately, as it should eventually return
Poll::Pending
for us.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.
@TheBlueMatt Understood, if tokio's
poll_write_ready
behaves as expected, it should indeed prevent a busy loop by returningPoll::Pending
when appropriate. Thank you for the clarification.