Skip to content

Commit

Permalink
ActixStream readiness methods return Ready object (#293)
Browse files Browse the repository at this point in the history
  • Loading branch information
fakeshadow committed Mar 23, 2021
1 parent 945479e commit 0c73f13
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 23 deletions.
3 changes: 3 additions & 0 deletions actix-rt/CHANGES.md
@@ -1,6 +1,9 @@
# Changes

## Unreleased - 2021-xx-xx
* `ActixStream::{poll_read_ready, poll_write_ready}` would return `Ready` in Ok variant. [#293]

[#293] https://github.com/actix/actix-net/pull/293


## 2.1.0 - 2021-02-24
Expand Down
2 changes: 1 addition & 1 deletion actix-rt/Cargo.toml
Expand Up @@ -26,7 +26,7 @@ macros = ["actix-macros"]
actix-macros = { version = "0.2.0", optional = true }

futures-core = { version = "0.3", default-features = false }
tokio = { version = "1.2", features = ["rt", "net", "parking_lot", "signal", "sync", "time"] }
tokio = { version = "1.3", features = ["rt", "net", "parking_lot", "signal", "sync", "time"] }

[dev-dependencies]
tokio = { version = "1.2", features = ["full"] }
Expand Down
39 changes: 26 additions & 13 deletions actix-rt/src/lib.rs
Expand Up @@ -72,9 +72,14 @@ pub mod signal {
pub mod net {
//! TCP/UDP/Unix bindings (mostly Tokio re-exports).

use std::task::{Context, Poll};

use tokio::io::{AsyncRead, AsyncWrite};
use std::{
future::Future,
io,
task::{Context, Poll},
};

pub use tokio::io::Ready;
use tokio::io::{AsyncRead, AsyncWrite, Interest};
pub use tokio::net::UdpSocket;
pub use tokio::net::{TcpListener, TcpSocket, TcpStream};

Expand All @@ -86,32 +91,40 @@ pub mod net {
/// Poll stream and check read readiness of Self.
///
/// See [tokio::net::TcpStream::poll_read_ready] for detail on intended use.
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<std::io::Result<()>>;
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>>;

/// Poll stream and check write readiness of Self.
///
/// See [tokio::net::TcpStream::poll_write_ready] for detail on intended use.
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<std::io::Result<()>>;
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>>;
}

impl ActixStream for TcpStream {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> {
TcpStream::poll_read_ready(self, cx)
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
let ready = self.ready(Interest::READABLE);
tokio::pin!(ready);
ready.poll(cx)
}

fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> {
TcpStream::poll_write_ready(self, cx)
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
let ready = self.ready(Interest::WRITABLE);
tokio::pin!(ready);
ready.poll(cx)
}
}

#[cfg(unix)]
impl ActixStream for UnixStream {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> {
UnixStream::poll_read_ready(self, cx)
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
let ready = self.ready(Interest::READABLE);
tokio::pin!(ready);
ready.poll(cx)
}

fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<std::io::Result<()>> {
UnixStream::poll_write_ready(self, cx)
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
let ready = self.ready(Interest::WRITABLE);
tokio::pin!(ready);
ready.poll(cx)
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions actix-tls/src/accept/nativetls.rs
Expand Up @@ -6,7 +6,7 @@ use std::{
};

use actix_codec::{AsyncRead, AsyncWrite, ReadBuf};
use actix_rt::net::ActixStream;
use actix_rt::net::{ActixStream, Ready};
use actix_service::{Service, ServiceFactory};
use actix_utils::counter::Counter;
use futures_core::future::LocalBoxFuture;
Expand Down Expand Up @@ -80,11 +80,11 @@ impl<T: ActixStream> AsyncWrite for TlsStream<T> {
}

impl<T: ActixStream> ActixStream for TlsStream<T> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
T::poll_read_ready((&**self).get_ref().get_ref().get_ref(), cx)
}

fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
T::poll_write_ready((&**self).get_ref().get_ref().get_ref(), cx)
}
}
Expand Down
6 changes: 3 additions & 3 deletions actix-tls/src/accept/openssl.rs
Expand Up @@ -7,7 +7,7 @@ use std::{
};

use actix_codec::{AsyncRead, AsyncWrite, ReadBuf};
use actix_rt::net::ActixStream;
use actix_rt::net::{ActixStream, Ready};
use actix_service::{Service, ServiceFactory};
use actix_utils::counter::{Counter, CounterGuard};
use futures_core::{future::LocalBoxFuture, ready};
Expand Down Expand Up @@ -82,11 +82,11 @@ impl<T: ActixStream> AsyncWrite for TlsStream<T> {
}

impl<T: ActixStream> ActixStream for TlsStream<T> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
T::poll_read_ready((&**self).get_ref(), cx)
}

fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
T::poll_write_ready((&**self).get_ref(), cx)
}
}
Expand Down
6 changes: 3 additions & 3 deletions actix-tls/src/accept/rustls.rs
Expand Up @@ -8,7 +8,7 @@ use std::{
};

use actix_codec::{AsyncRead, AsyncWrite, ReadBuf};
use actix_rt::net::ActixStream;
use actix_rt::net::{ActixStream, Ready};
use actix_service::{Service, ServiceFactory};
use actix_utils::counter::{Counter, CounterGuard};
use futures_core::future::LocalBoxFuture;
Expand Down Expand Up @@ -82,11 +82,11 @@ impl<T: ActixStream> AsyncWrite for TlsStream<T> {
}

impl<T: ActixStream> ActixStream for TlsStream<T> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
fn poll_read_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
T::poll_read_ready((&**self).get_ref().0, cx)
}

fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<()>> {
fn poll_write_ready(&self, cx: &mut Context<'_>) -> Poll<io::Result<Ready>> {
T::poll_write_ready((&**self).get_ref().0, cx)
}
}
Expand Down

0 comments on commit 0c73f13

Please sign in to comment.