Repository navigation
Conversation
A failed completion carries an NTSTATUS, which the driver converts to a Win32 code. For a socket that is not what a Winsock call reports: a refused connect comes back as ERROR_CONNECTION_REFUSED (1225) instead of WSAECONNREFUSED, and io::Error::kind() calls it Uncategorized. Socket operations now resolve the error through WSAGetOverlappedResult, so a refused connect is ConnectionRefused and an ICMP port-unreachable on a UDP socket is ConnectionReset, as with mio.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #1145
Socket operations on the IOCP driver now report Winsock error codes.
OpCodegainscompletion_error, a no-op by default, which the driver calls on a failed completion. The socket ops (and the managed ops wrapping them) override it to askWSAGetOverlappedResultfor the provider's error. Cancellation keepsERROR_OPERATION_ABORTED, so cancel detection is unchanged.With that, a refused connect is
ConnectionRefused, and an ICMP port unreachable on UDP isWSAECONNRESET.compio-quicno longer needs itsERROR_PORT_UNREACHABLEarm.Adds
connect_refusedtocompio-net/tests/tcp_connect.rs.