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()
|
||||
}
|
||||
}
|
||||
|
||||
#[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> {
|
||||
|
|
Loading…
Reference in New Issue