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.
Dragonfly BSD 6.4.0 VM doesn't seem to have git.
```
error: failed to get `cfg-if` as a dependency of package `polling v2.5.2 (/Users/runner/work/polling/polling)`
Caused by:
failed to load source for dependency `cfg-if`
Caused by:
Unable to update registry `crates-io`
Caused by:
failed to fetch `https://github.com/rust-lang/crates.io-index`
Caused by:
could not execute process `git fetch --force --update-head-ok 'https://github.com/rust-lang/crates.io-index' '+HEAD:refs/remotes/origin/HEAD'` (never executed)
Caused by:
No such file or directory (os error 2)
```
* feat: Expose other kqueue filters
* Fix netbsd/openbsd compilation
* Build MSRV for FreeBsd/OpenBsd in CI
* Only run MSRV BSD builds on Linux
* Change API a little + fix netbsd timer
* Add inlines + move PollerSealed
* rustfmt
* Make filter fields public
* Fix examples
In FreeBSD 12, kevent grew some extra fields. libc currently implements
a FreeBSD 11 ABI, but that will change some day. Tweak the kevent
initialization so it will compile with either version.
In a future release of the `libc` crate, `libc::timespec` will contain
private padding fields on `*-linux-musl` targets and so the struct will
no longer be able to be created using the literal initialization syntax.
Update `TS_ZERO` to create a value by initializing an array of the
correct size to `0` and then transmuting to `libc::timespec`. Update
struct literal use of `libc::timespec` to initialize to `TS_ZERO` and
then manually update the appropriate fields. Also updates a raw syscall
to use the libc function instead as on musl 1.2, it correctly handles
`libc::timespec` values which, in musl 1.2, are always 16 bytes in
length regardless of platform.