diff options
Diffstat (limited to 'tokio/src/net/unix/incoming.rs')
-rw-r--r-- | tokio/src/net/unix/incoming.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tokio/src/net/unix/incoming.rs b/tokio/src/net/unix/incoming.rs new file mode 100644 index 00000000..542b5e1d --- /dev/null +++ b/tokio/src/net/unix/incoming.rs @@ -0,0 +1,31 @@ +#![cfg(feature = "async-traits")] + +use super::{UnixListener, UnixStream}; + +use futures_core::ready; +use futures_core::stream::Stream; +use std::io; +use std::pin::Pin; +use std::task::{Context, Poll}; + +/// Stream of listeners +#[derive(Debug)] +#[must_use = "streams do nothing unless polled"] +pub struct Incoming { + inner: UnixListener, +} + +impl Incoming { + pub(crate) fn new(listener: UnixListener) -> Incoming { + Incoming { inner: listener } + } +} + +impl Stream for Incoming { + type Item = io::Result<UnixStream>; + + fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> { + let (socket, _) = ready!(Pin::new(&mut self.inner).poll_accept(cx))?; + Poll::Ready(Some(Ok(socket))) + } +} |