summaryrefslogtreecommitdiffstats
path: root/tokio/src/net/unix/listener.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio/src/net/unix/listener.rs')
-rw-r--r--tokio/src/net/unix/listener.rs30
1 files changed, 12 insertions, 18 deletions
diff --git a/tokio/src/net/unix/listener.rs b/tokio/src/net/unix/listener.rs
index fc3c8710..dc8cb08e 100644
--- a/tokio/src/net/unix/listener.rs
+++ b/tokio/src/net/unix/listener.rs
@@ -2,7 +2,6 @@ use crate::future::poll_fn;
use crate::io::PollEvented;
use crate::net::unix::{Incoming, UnixStream};
-use mio::Ready;
use std::convert::TryFrom;
use std::fmt;
use std::io;
@@ -122,19 +121,19 @@ impl UnixListener {
&mut self,
cx: &mut Context<'_>,
) -> Poll<io::Result<(net::UnixStream, SocketAddr)>> {
- ready!(self.io.poll_read_ready(cx, Ready::readable()))?;
-
- match self.io.get_ref().accept_std() {
- Ok(None) => {
- self.io.clear_read_ready(cx, Ready::readable())?;
- Poll::Pending
- }
- Ok(Some((sock, addr))) => Ok((sock, addr)).into(),
- Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => {
- self.io.clear_read_ready(cx, Ready::readable())?;
- Poll::Pending
+ loop {
+ let ev = ready!(self.io.poll_read_ready(cx))?;
+
+ match self.io.get_ref().accept_std() {
+ Ok(None) => {
+ self.io.clear_readiness(ev);
+ }
+ Ok(Some((sock, addr))) => return Ok((sock, addr)).into(),
+ Err(ref err) if err.kind() == io::ErrorKind::WouldBlock => {
+ self.io.clear_readiness(ev);
+ }
+ Err(err) => return Err(err).into(),
}
- Err(err) => Err(err).into(),
}
}
@@ -197,11 +196,6 @@ impl TryFrom<UnixListener> for mio_uds::UnixListener {
type Error = io::Error;
/// Consumes value, returning the mio I/O object.
- ///
- /// See [`PollEvented::into_inner`] for more details about
- /// resource deregistration that happens during the call.
- ///
- /// [`PollEvented::into_inner`]: crate::io::PollEvented::into_inner
fn try_from(value: UnixListener) -> Result<Self, Self::Error> {
value.io.into_inner()
}