diff --git a/tokio/src/io/async_fd.rs b/tokio/src/io/async_fd.rs index 99f23fd663b..dcc2ad98372 100644 --- a/tokio/src/io/async_fd.rs +++ b/tokio/src/io/async_fd.rs @@ -76,6 +76,7 @@ pub struct AsyncFdReadyGuard<'a, T: AsRawFd> { const ALL_INTEREST: Interest = Interest::READABLE.add(Interest::WRITABLE); impl AsyncFd { + #[inline] /// Creates an AsyncFd backed by (and taking ownership of) an object /// implementing [`AsRawFd`]. The backing file descriptor is cached at the /// time of creation. @@ -85,14 +86,28 @@ impl AsyncFd { where T: AsRawFd, { - Self::new_with_handle(inner, Handle::current()) + Self::with_interest(inner, ALL_INTEREST) + } + + #[inline] + /// Creates new instance as `new` with additional ability to customize interest, + /// allowing to specify whether file descriptor will be polled for read, write or both. + pub fn with_interest(inner: T, interest: Interest) -> io::Result + where + T: AsRawFd, + { + Self::new_with_handle_and_interest(inner, Handle::current(), interest) } - pub(crate) fn new_with_handle(inner: T, handle: Handle) -> io::Result { + pub(crate) fn new_with_handle_and_interest( + inner: T, + handle: Handle, + interest: Interest, + ) -> io::Result { let fd = inner.as_raw_fd(); let registration = - Registration::new_with_interest_and_handle(&mut SourceFd(&fd), ALL_INTEREST, handle)?; + Registration::new_with_interest_and_handle(&mut SourceFd(&fd), interest, handle)?; Ok(AsyncFd { registration,