use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
use std::task::{Context, Poll};
-use mio::event::Evented;
-use mio::unix::EventedFd as MioEventedFd;
-use mio::Poll as MioPoll;
-use mio::{PollOpt, Ready, Token};
-use tokio::io::PollEvented;
+use tokio::io::unix::AsyncFd;
use crate::tools::Fd;
}
}
-impl Evented for EventedFd {
- fn register(
- &self,
- poll: &MioPoll,
- token: Token,
- interest: Ready,
- opts: PollOpt,
- ) -> io::Result<()> {
- MioEventedFd(self.fd.as_ref()).register(poll, token, interest, opts)
- }
-
- fn reregister(
- &self,
- poll: &MioPoll,
- token: Token,
- interest: Ready,
- opts: PollOpt,
- ) -> io::Result<()> {
- MioEventedFd(self.fd.as_ref()).reregister(poll, token, interest, opts)
- }
-
- fn deregister(&self, poll: &MioPoll) -> io::Result<()> {
- MioEventedFd(self.fd.as_ref()).deregister(poll)
- }
-}
-
#[repr(transparent)]
pub struct PolledFd {
- fd: PollEvented<EventedFd>,
+ fd: AsyncFd<EventedFd>,
}
impl PolledFd {
pub fn new(fd: Fd) -> tokio::io::Result<Self> {
Ok(Self {
- fd: PollEvented::new(EventedFd::new(fd))?,
+ fd: AsyncFd::new(EventedFd::new(fd))?,
})
}
cx: &mut Context,
func: impl FnOnce() -> io::Result<T>,
) -> Poll<io::Result<T>> {
- ready!(self.fd.poll_read_ready(cx, mio::Ready::readable()))?;
+ let mut ready_guard = ready!(self.fd.poll_read_ready(cx))?;
match func() {
Ok(out) => Poll::Ready(Ok(out)),
Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => {
- self.fd.clear_read_ready(cx, mio::Ready::readable())?;
+ ready_guard.clear_ready();
Poll::Pending
}
Err(err) => Poll::Ready(Err(err)),
cx: &mut Context,
func: impl FnOnce() -> io::Result<T>,
) -> Poll<io::Result<T>> {
- ready!(self.fd.poll_write_ready(cx))?;
+ let mut ready_guard = ready!(self.fd.poll_write_ready(cx))?;
match func() {
Ok(out) => Poll::Ready(Ok(out)),
Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => {
- self.fd.clear_write_ready(cx)?;
+ ready_guard.clear_ready();
Poll::Pending
}
Err(err) => Poll::Ready(Err(err)),
// its driver
self.fd
.into_inner()
- .expect("failed to remove polled file descriptor from reactor")
.into_raw_fd()
}
}