In linux, epoll, EPOLLHUP may happen even if no connection call is made. It
would confuse callers for what is actually happening.
Replaced is_connect_failed, and we detect if connection failed by using the
combination of is_err and is_interrupt, please see the example, tcp_client
CallOnDrop is no longer used in the Windows IOCP backend, and it wasn't
being flagged as unused until the latest nightly. In order to fix
Windows builds, this commit removes CallOnDrop.
Signed-off-by: John Nunley <dev@notgull.net>
Previously, if AFD failed to initialize `polling` would return a custom
I/O error with a string error, containing the formatted version of the
underlying system error. However, this means that information about the
underlying system error is lost to the user.
This commit makes it so the returned `io::Error` wraps a user
inaccessible type: `AfdError`. This `AfdError`, when stringified,
returns a similar error message as what was previously returned. In
addition when `.source()` is used it returns the underlying system
error.
Closes#174
Signed-off-by: John Nunley <dev@notgull.net>
This lint does not take into account destructors.
```
error: field `0` is never read
--> src\iocp\mod.rs:1155:13
|
1155 | Waiting(WaitHandle),
| ------- ^^^^^^^^^^
| |
| field in this variant
|
= note: `-D dead-code` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(dead_code)]`
help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
|
1155 | Waiting(()),
| ~~
```
* Add better documentation for the IOCP module
* Extract Events from Poller
This prevents the need to have an intermediate buffer to read events
from, reducing the need for an allocation and a copy. This is a breaking
change.
* Add event extra information
Foundation for more details later on.
* Add PRI and HUP events
* Fix various failing tests
- Make sure that waitable handles interact properly with the new
infrastructure
- Fix failing doctests
* Review comments
- Make set_* take a boolean for the value of the flag
- Make Events !Sync
- Fix visibility modifiers
- Inline more methods
- Use a better strategy for testing
* Move completion packets into the Events buffer
This removes one of the mutexes that we have to lock.
* Review comments
Signed-off-by: John Nunley <dev@notgull.net>
* Add support for polling waitable handles
* Add a smoke test
* Fix failing tests
* Rebase on latest master
Signed-off-by: John Nunley <dev@notgull.net>
* Update semantics for new system
Signed-off-by: John Nunley <dev@notgull.net>
* Forgot about doctests
Signed-off-by: John Nunley <dev@notgull.net>
---------
Signed-off-by: John Nunley <dev@notgull.net>
Reimplements the C-based wepoll backend in Rust, using some handwritten code. This PR also implements bindings to the I/O Completion Ports and \Device\Afd APIs. For more information on the latter, see my blog post on the subject: https://notgull.github.io/device-afd/
Note that the IOCP API is wrapped using a `Pin`-oriented "CompletionHandle" system that is relatively brittle. This should be replaced with a better model when one becomes available.