net/usrsock: Fix EPIPE loop by clearing POLLIN on remote close #17877
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.
Note: Please adhere to Contributing Guidelines.
Summary
This PR addresses an issue where
usrsockrepeatedly setsPOLLINevents when the network interface is down and a client attempts to connect, leading to an infinite loop or abnormalEPIPEsetting.The changes involve:
USRSOCK_EVENT_RECVFROM_AVAILflag when a remote connection is closed duringaccept.USRSOCK_EVENT_RECVFROM_AVAILflag before settingPOLLINin bothpoll_eventandusrsock_pollsetup.By ensuring
POLLINis only set when data is actually available (indicated by the flag), we prevent the repetitivePOLLINtriggering that causes theEPIPEloop.Impact
usrsockwhen handling connection attempts on a down interface.Testing
POLLINis no longer repeatedly set when the remote closes the connection during an accept sequence on a down interface.tools/checkpatch.sh.