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