mirror of https://github.com/stjepang/smol
Merge pull request #141 from Sherlock-Holo/master
add new async functions readable() and writable() for Async
This commit is contained in:
commit
f00debd726
|
@ -159,6 +159,7 @@ impl<T: IntoRawFd> IntoRawFd for Async<T> {
|
||||||
self.into_inner().unwrap().into_raw_fd()
|
self.into_inner().unwrap().into_raw_fd()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
impl<T: AsRawSocket> Async<T> {
|
impl<T: AsRawSocket> Async<T> {
|
||||||
/// Creates an async I/O handle.
|
/// Creates an async I/O handle.
|
||||||
|
@ -190,7 +191,7 @@ impl<T: AsRawSocket> Async<T> {
|
||||||
/// use std::net::TcpListener;
|
/// use std::net::TcpListener;
|
||||||
///
|
///
|
||||||
/// # smol::run(async {
|
/// # 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)?;
|
/// let listener = Async::new(listener)?;
|
||||||
/// # std::io::Result::Ok(()) });
|
/// # std::io::Result::Ok(()) });
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -231,7 +232,7 @@ impl<T> Async<T> {
|
||||||
/// use std::net::TcpListener;
|
/// use std::net::TcpListener;
|
||||||
///
|
///
|
||||||
/// # smol::run(async {
|
/// # 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();
|
/// let inner = listener.get_ref();
|
||||||
/// # std::io::Result::Ok(()) });
|
/// # std::io::Result::Ok(()) });
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -248,7 +249,7 @@ impl<T> Async<T> {
|
||||||
/// use std::net::TcpListener;
|
/// use std::net::TcpListener;
|
||||||
///
|
///
|
||||||
/// # smol::run(async {
|
/// # 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();
|
/// let inner = listener.get_mut();
|
||||||
/// # std::io::Result::Ok(()) });
|
/// # std::io::Result::Ok(()) });
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -265,7 +266,7 @@ impl<T> Async<T> {
|
||||||
/// use std::net::TcpListener;
|
/// use std::net::TcpListener;
|
||||||
///
|
///
|
||||||
/// # smol::run(async {
|
/// # 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()?;
|
/// let inner = listener.into_inner()?;
|
||||||
/// # std::io::Result::Ok(()) });
|
/// # std::io::Result::Ok(()) });
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -454,6 +455,54 @@ impl<T> Async<T> {
|
||||||
self.source.writable().await?;
|
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> {
|
impl<T> Drop for Async<T> {
|
||||||
|
|
Loading…
Reference in New Issue