event: handle socket events more precisely #581
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 adjusts the socket event to correct a potential spurious wakeup
which can incorrectly mark the socket as closed.
When working with a
SOCK_STREAM
socket,FIONREAD
returns the totalamount of data that can be read in a single receive operation.
Normally, this is the same amount of data queued on the socket, but this
is not guaranteed as a data-stream is byte-oriented. Additionally, a
read on a separate thread may have drained the data between the event
trigger and the ioctl to read the available bytes. Only wake up the
handler if there are bytes to read.
In order to differentiate between the trigger for a close event and a
read-event, we explicitly check the close and the read or write event.
This allows waking the handlers one last time after a socket is closed.