summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHK416-is-all-you-need <73653352+HK416-is-all-you-need@users.noreply.github.com>2020-11-30 22:11:18 +0300
committerGitHub <noreply@github.com>2020-11-30 11:11:18 -0800
commit7707ba88efa9b9d78436f1fbdc873d81bfc3f7a5 (patch)
tree45e9d190af02ab0cdc92c317e3127a1b8227ac3a
parent72d6346c0d43d867002dc0cc5527fbd0b0e23c3f (diff)
io: add AsyncFd::with_interest (#3167)
Fixes #3072
-rw-r--r--tokio/src/io/async_fd.rs21
1 files changed, 18 insertions, 3 deletions
diff --git a/tokio/src/io/async_fd.rs b/tokio/src/io/async_fd.rs
index 99f23fd6..dcc2ad98 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<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.
@@ -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,