Skip to content

Commit

Permalink
io: add AsyncFd::with_interest (#3167)
Browse files Browse the repository at this point in the history
Fixes #3072
  • Loading branch information
HK416-is-all-you-need committed Nov 30, 2020
1 parent 72d6346 commit 7707ba8
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions tokio/src/io/async_fd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ pub struct AsyncFdReadyGuard<'a, T: AsRawFd> {
const ALL_INTEREST: Interest = Interest::READABLE.add(Interest::WRITABLE);

impl<T: AsRawFd> AsyncFd<T> {
#[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.
Expand All @@ -85,14 +86,28 @@ impl<T: AsRawFd> AsyncFd<T> {
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<Self>
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<Self> {
pub(crate) fn new_with_handle_and_interest(
inner: T,
handle: Handle,
interest: Interest,
) -> io::Result<Self> {
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,
Expand Down

0 comments on commit 7707ba8

Please sign in to comment.