TCPListener: unsubscribe asio before socket close #1626
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.
This commit changes TCPListener to unsubscribe asio events
prior to closing the socket and file descriptor.
This prevents events from being reported for closed sockets
due to any race conditions related to socket close and
epoll receiving an event between the socket close request
and the actual close occurring.
See: http://stackoverflow.com/questions/8707601/is-it-necessary-to-deregister-a-socket-from-epoll-before-closing-it
In my limited testing, this change results in less failures in the TCP tests with the following output where the server never accepts a connection:
This failure seems to mostly be due to a combination of
fd reuse
combined with the lack of unsubscribe before the close which this PR resolves.