Merge pull request #141 from Sherlock-Holo/master

add new async functions readable() and writable() for Async
This commit is contained in:
Stjepan Glavina 2020-06-21 13:45:19 +02:00 committed by GitHub
commit f00debd726
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 53 additions and 4 deletions

View File

@ -159,6 +159,7 @@ impl<T: IntoRawFd> IntoRawFd for Async<T> {
self.into_inner().unwrap().into_raw_fd()
}
}
#[cfg(windows)]
impl<T: AsRawSocket> Async<T> {
/// Creates an async I/O handle.
@ -190,7 +191,7 @@ impl<T: AsRawSocket> Async<T> {
/// use std::net::TcpListener;
///
/// # smol::run(async {
/// let listener = TcpListener::bind("127.0.0.1:80")?;
/// let listener = TcpListener::bind("0.0.0.0:0")?;
/// let listener = Async::new(listener)?;
/// # std::io::Result::Ok(()) });
/// ```
@ -231,7 +232,7 @@ impl<T> Async<T> {
/// use std::net::TcpListener;
///
/// # smol::run(async {
/// let listener = Async::<TcpListener>::bind("127.0.0.1:80")?;
/// let listener = Async::<TcpListener>::bind("0.0.0.0:0")?;
/// let inner = listener.get_ref();
/// # std::io::Result::Ok(()) });
/// ```
@ -248,7 +249,7 @@ impl<T> Async<T> {
/// use std::net::TcpListener;
///
/// # smol::run(async {
/// let mut listener = Async::<TcpListener>::bind("127.0.0.1:80")?;
/// let mut listener = Async::<TcpListener>::bind("0.0.0.0:0")?;
/// let inner = listener.get_mut();
/// # std::io::Result::Ok(()) });
/// ```
@ -265,7 +266,7 @@ impl<T> Async<T> {
/// use std::net::TcpListener;
///
/// # smol::run(async {
/// let listener = Async::<TcpListener>::bind("127.0.0.1:80")?;
/// let listener = Async::<TcpListener>::bind("0.0.0.0:0")?;
/// let inner = listener.into_inner()?;
/// # std::io::Result::Ok(()) });
/// ```
@ -454,6 +455,54 @@ impl<T> Async<T> {
self.source.writable().await?;
}
}
/// Wait until the async I/O handle is readable.
///
/// # Examples
///
/// ```
/// use smol::Async;
/// use std::net::{TcpListener, TcpStream};
/// use futures_util::io::AsyncWriteExt;
///
/// # smol::run(async {
/// let listener = Async::<TcpListener>::bind("0.0.0.0:0")?;
/// let addr = listener.get_ref().local_addr()?;
///
/// let mut stream1 = Async::<TcpStream>::connect(addr).await?;
/// let (stream2, _) = listener.accept().await?;
///
/// stream1.write(b"test").await?;
/// stream2.readable().await?;
///
/// # std::io::Result::Ok(()) });
/// ```
#[inline]
pub async fn readable(&self) -> io::Result<()> {
self.source.readable().await
}
/// Wait until the async I/O handle is writable.
///
/// # Examples
///
/// ```
/// use smol::Async;
/// use std::net::{TcpListener, TcpStream};
///
/// # smol::run(async {
/// let listener = Async::<TcpListener>::bind("0.0.0.0:0")?;
/// let addr = listener.get_ref().local_addr()?;
///
/// let stream = Async::<TcpStream>::connect(addr).await?;
///
/// stream.writable().await?;
/// # std::io::Result::Ok(()) });
/// ```
#[inline]
pub async fn writable(&self) -> io::Result<()> {
self.source.writable().await
}
}
impl<T> Drop for Async<T> {