From 5c12e17ed4cb7fc4423f446e4ce0b6ca3b3a304e Mon Sep 17 00:00:00 2001 From: Josh Guilfoyle Date: Tue, 18 Jul 2023 14:24:56 -0700 Subject: [PATCH] poll: Do not clear readiness on short read/writes. The new mio_unsupported_force_poll_poll behaviour works the same as Windows (using level-triggered APIs to mimic edge-triggered ones) and it depends on intercepting an EAGAIN result to start polling the fd again. --- tokio/src/io/poll_evented.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tokio/src/io/poll_evented.rs b/tokio/src/io/poll_evented.rs index 875ad7e0d0a..9021888d349 100644 --- a/tokio/src/io/poll_evented.rs +++ b/tokio/src/io/poll_evented.rs @@ -166,7 +166,7 @@ feature! { Ok(n) => { // if we read a partially full buffer, this is sufficient on unix to show // that the socket buffer has been drained - if n > 0 && (!cfg!(windows) && n < len) { + if n > 0 && (!cfg!(windows) && !cfg!(mio_unsupported_force_poll_poll) && n < len) { self.registration.clear_readiness(evt); } @@ -197,7 +197,7 @@ feature! { Ok(n) => { // if we write only part of our buffer, this is sufficient on unix to show // that the socket buffer is full - if n > 0 && (!cfg!(windows) && n < buf.len()) { + if n > 0 && (!cfg!(windows) && !cfg!(mio_unsupported_force_poll_poll) && n < buf.len()) { self.registration.clear_readiness(evt); }