Struct async_io::Async

source ·
pub struct Async<T> { /* private fields */ }
Expand description

Async adapter for I/O types.

This type puts an I/O handle into non-blocking mode, registers it in epoll/kqueue/event ports/IOCP, and then provides an async interface for it.

Caveats

Async is a low-level primitive, and as such it comes with some caveats.

For higher-level primitives built on top of Async, look into async-net or async-process (on Unix).

Supported types

Async supports all networking types, as well as some OS-specific file descriptors like timerfd and inotify.

However, do not use Async with types like File, Stdin, Stdout, or Stderr because all operating systems have issues with them when put in non-blocking mode.

Concurrent I/O

Note that &Async<T> implements [AsyncRead] and [AsyncWrite] if &T implements those traits, which means tasks can concurrently read and write using shared references.

But there is a catch: only one task can read a time, and only one task can write at a time. It is okay to have two tasks where one is reading and the other is writing at the same time, but it is not okay to have two tasks reading at the same time or writing at the same time. If you try to do that, conflicting tasks will just keep waking each other in turn, thus wasting CPU time.

Besides [AsyncRead] and [AsyncWrite], this caveat also applies to poll_readable() and poll_writable().

However, any number of tasks can be concurrently calling other methods like readable() or read_with().

Closing

Closing the write side of Async with close() simply flushes. If you want to shutdown a TCP or Unix socket, use Shutdown.

Examples

Connect to a server and echo incoming messages back to the server:

use async_io::Async;
use futures_lite::io;
use std::net::TcpStream;

// Connect to a local server.
let stream = Async::<TcpStream>::connect(([127, 0, 0, 1], 8000)).await?;

// Echo all messages from the read side of the stream into the write side.
io::copy(&stream, &stream).await?;

You can use either predefined async methods or wrap blocking I/O operations in Async::read_with(), Async::read_with_mut(), Async::write_with(), and Async::write_with_mut():

use async_io::Async;
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;

// These two lines are equivalent:
let (stream, addr) = listener.accept().await?;
let (stream, addr) = listener.read_with(|inner| inner.accept()).await?;

Implementations§

source§

impl<T: AsRawFd> Async<T>

source

pub fn new(io: T) -> Result<Async<T>>

Creates an async I/O handle.

This method will put the handle in non-blocking mode and register it in epoll/kqueue/event ports/IOCP.

On Unix systems, the handle must implement AsRawFd, while on Windows it must implement AsRawSocket.

Examples
use async_io::Async;
use std::net::{SocketAddr, TcpListener};

let listener = TcpListener::bind(SocketAddr::from(([127, 0, 0, 1], 0)))?;
let listener = Async::new(listener)?;
source§

impl<T> Async<T>

source

pub fn get_ref(&self) -> &T

Gets a reference to the inner I/O handle.

Examples
use async_io::Async;
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;
let inner = listener.get_ref();
source

pub fn get_mut(&mut self) -> &mut T

Gets a mutable reference to the inner I/O handle.

Examples
use async_io::Async;
use std::net::TcpListener;

let mut listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;
let inner = listener.get_mut();
source

pub fn into_inner(self) -> Result<T>

Unwraps the inner I/O handle.

This method will not put the I/O handle back into blocking mode.

Examples
use async_io::Async;
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;
let inner = listener.into_inner()?;

// Put the listener back into blocking mode.
inner.set_nonblocking(false)?;
source

pub fn readable(&self) -> Readable<'_, T>

Waits until the I/O handle is readable.

This method completes when a read operation on this I/O handle wouldn’t block.

Examples
use async_io::Async;
use std::net::TcpListener;

let mut listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;

// Wait until a client can be accepted.
listener.readable().await?;
source

pub fn readable_owned(self: Arc<Self>) -> ReadableOwned<T>

Waits until the I/O handle is readable.

This method completes when a read operation on this I/O handle wouldn’t block.

source

pub fn writable(&self) -> Writable<'_, T>

Waits until the I/O handle is writable.

This method completes when a write operation on this I/O handle wouldn’t block.

Examples
use async_io::Async;
use std::net::{TcpStream, ToSocketAddrs};

let addr = "example.com:80".to_socket_addrs()?.next().unwrap();
let stream = Async::<TcpStream>::connect(addr).await?;

// Wait until the stream is writable.
stream.writable().await?;
source

pub fn writable_owned(self: Arc<Self>) -> WritableOwned<T>

Waits until the I/O handle is writable.

This method completes when a write operation on this I/O handle wouldn’t block.

source

pub fn poll_readable(&self, cx: &mut Context<'_>) -> Poll<Result<()>>

Polls the I/O handle for readability.

When this method returns Poll::Ready, that means the OS has delivered an event indicating readability since the last time this task has called the method and received Poll::Pending.

Caveats

Two different tasks should not call this method concurrently. Otherwise, conflicting tasks will just keep waking each other in turn, thus wasting CPU time.

Note that the [AsyncRead] implementation for Async also uses this method.

Examples
use async_io::Async;
use futures_lite::future;
use std::net::TcpListener;

let mut listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;

// Wait until a client can be accepted.
future::poll_fn(|cx| listener.poll_readable(cx)).await?;
source

pub fn poll_writable(&self, cx: &mut Context<'_>) -> Poll<Result<()>>

Polls the I/O handle for writability.

When this method returns Poll::Ready, that means the OS has delivered an event indicating writability since the last time this task has called the method and received Poll::Pending.

Caveats

Two different tasks should not call this method concurrently. Otherwise, conflicting tasks will just keep waking each other in turn, thus wasting CPU time.

Note that the [AsyncWrite] implementation for Async also uses this method.

Examples
use async_io::Async;
use futures_lite::future;
use std::net::{TcpStream, ToSocketAddrs};

let addr = "example.com:80".to_socket_addrs()?.next().unwrap();
let stream = Async::<TcpStream>::connect(addr).await?;

// Wait until the stream is writable.
future::poll_fn(|cx| stream.poll_writable(cx)).await?;
source

pub async fn read_with<R>(&self, op: impl FnMut(&T) -> Result<R>) -> Result<R>

Performs a read operation asynchronously.

The I/O handle is registered in the reactor and put in non-blocking mode. This method invokes the op closure in a loop until it succeeds or returns an error other than io::ErrorKind::WouldBlock. In between iterations of the loop, it waits until the OS sends a notification that the I/O handle is readable.

The closure receives a shared reference to the I/O handle.

Examples
use async_io::Async;
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;

// Accept a new client asynchronously.
let (stream, addr) = listener.read_with(|l| l.accept()).await?;
source

pub async fn read_with_mut<R>( &mut self, op: impl FnMut(&mut T) -> Result<R> ) -> Result<R>

Performs a read operation asynchronously.

The I/O handle is registered in the reactor and put in non-blocking mode. This method invokes the op closure in a loop until it succeeds or returns an error other than io::ErrorKind::WouldBlock. In between iterations of the loop, it waits until the OS sends a notification that the I/O handle is readable.

The closure receives a mutable reference to the I/O handle.

Examples
use async_io::Async;
use std::net::TcpListener;

let mut listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;

// Accept a new client asynchronously.
let (stream, addr) = listener.read_with_mut(|l| l.accept()).await?;
source

pub async fn write_with<R>(&self, op: impl FnMut(&T) -> Result<R>) -> Result<R>

Performs a write operation asynchronously.

The I/O handle is registered in the reactor and put in non-blocking mode. This method invokes the op closure in a loop until it succeeds or returns an error other than io::ErrorKind::WouldBlock. In between iterations of the loop, it waits until the OS sends a notification that the I/O handle is writable.

The closure receives a shared reference to the I/O handle.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;
socket.get_ref().connect("127.0.0.1:9000")?;

let msg = b"hello";
let len = socket.write_with(|s| s.send(msg)).await?;
source

pub async fn write_with_mut<R>( &mut self, op: impl FnMut(&mut T) -> Result<R> ) -> Result<R>

Performs a write operation asynchronously.

The I/O handle is registered in the reactor and put in non-blocking mode. This method invokes the op closure in a loop until it succeeds or returns an error other than io::ErrorKind::WouldBlock. In between iterations of the loop, it waits until the OS sends a notification that the I/O handle is writable.

The closure receives a mutable reference to the I/O handle.

Examples
use async_io::Async;
use std::net::UdpSocket;

let mut socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;
socket.get_ref().connect("127.0.0.1:9000")?;

let msg = b"hello";
let len = socket.write_with_mut(|s| s.send(msg)).await?;
source§

impl Async<TcpListener>

source

pub fn bind<A: Into<SocketAddr>>(addr: A) -> Result<Async<TcpListener>>

Creates a TCP listener bound to the specified address.

Binding with port number 0 will request an available port from the OS.

Examples
use async_io::Async;
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 0))?;
println!("Listening on {}", listener.get_ref().local_addr()?);
source

pub async fn accept(&self) -> Result<(Async<TcpStream>, SocketAddr)>

Accepts a new incoming TCP connection.

When a connection is established, it will be returned as a TCP stream together with its remote address.

Examples
use async_io::Async;
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 8000))?;
let (stream, addr) = listener.accept().await?;
println!("Accepted client: {}", addr);
source

pub fn incoming( &self ) -> impl Stream<Item = Result<Async<TcpStream>>> + Send + '_

Returns a stream of incoming TCP connections.

The stream is infinite, i.e. it never stops with a None.

Examples
use async_io::Async;
use futures_lite::{pin, stream::StreamExt};
use std::net::TcpListener;

let listener = Async::<TcpListener>::bind(([127, 0, 0, 1], 8000))?;
let incoming = listener.incoming();
pin!(incoming);

while let Some(stream) = incoming.next().await {
    let stream = stream?;
    println!("Accepted client: {}", stream.get_ref().peer_addr()?);
}
source§

impl Async<TcpStream>

source

pub async fn connect<A: Into<SocketAddr>>(addr: A) -> Result<Async<TcpStream>>

Creates a TCP connection to the specified address.

Examples
use async_io::Async;
use std::net::{TcpStream, ToSocketAddrs};

let addr = "example.com:80".to_socket_addrs()?.next().unwrap();
let stream = Async::<TcpStream>::connect(addr).await?;
source

pub async fn peek(&self, buf: &mut [u8]) -> Result<usize>

Reads data from the stream without removing it from the buffer.

Returns the number of bytes read. Successive calls of this method read the same data.

Examples
use async_io::Async;
use futures_lite::{io::AsyncWriteExt, stream::StreamExt};
use std::net::{TcpStream, ToSocketAddrs};

let addr = "example.com:80".to_socket_addrs()?.next().unwrap();
let mut stream = Async::<TcpStream>::connect(addr).await?;

stream
    .write_all(b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n")
    .await?;

let mut buf = [0u8; 1024];
let len = stream.peek(&mut buf).await?;
source§

impl Async<UdpSocket>

source

pub fn bind<A: Into<SocketAddr>>(addr: A) -> Result<Async<UdpSocket>>

Creates a UDP socket bound to the specified address.

Binding with port number 0 will request an available port from the OS.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 0))?;
println!("Bound to {}", socket.get_ref().local_addr()?);
source

pub async fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>

Receives a single datagram message.

Returns the number of bytes read and the address the message came from.

This method must be called with a valid byte slice of sufficient size to hold the message. If the message is too long to fit, excess bytes may get discarded.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;

let mut buf = [0u8; 1024];
let (len, addr) = socket.recv_from(&mut buf).await?;
source

pub async fn peek_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>

Receives a single datagram message without removing it from the queue.

Returns the number of bytes read and the address the message came from.

This method must be called with a valid byte slice of sufficient size to hold the message. If the message is too long to fit, excess bytes may get discarded.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;

let mut buf = [0u8; 1024];
let (len, addr) = socket.peek_from(&mut buf).await?;
source

pub async fn send_to<A: Into<SocketAddr>>( &self, buf: &[u8], addr: A ) -> Result<usize>

Sends data to the specified address.

Returns the number of bytes writen.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 0))?;
let addr = socket.get_ref().local_addr()?;

let msg = b"hello";
let len = socket.send_to(msg, addr).await?;
source

pub async fn recv(&self, buf: &mut [u8]) -> Result<usize>

Receives a single datagram message from the connected peer.

Returns the number of bytes read.

This method must be called with a valid byte slice of sufficient size to hold the message. If the message is too long to fit, excess bytes may get discarded.

The connect method connects this socket to a remote address. This method will fail if the socket is not connected.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;
socket.get_ref().connect("127.0.0.1:9000")?;

let mut buf = [0u8; 1024];
let len = socket.recv(&mut buf).await?;
source

pub async fn peek(&self, buf: &mut [u8]) -> Result<usize>

Receives a single datagram message from the connected peer without removing it from the queue.

Returns the number of bytes read and the address the message came from.

This method must be called with a valid byte slice of sufficient size to hold the message. If the message is too long to fit, excess bytes may get discarded.

The connect method connects this socket to a remote address. This method will fail if the socket is not connected.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;
socket.get_ref().connect("127.0.0.1:9000")?;

let mut buf = [0u8; 1024];
let len = socket.peek(&mut buf).await?;
source

pub async fn send(&self, buf: &[u8]) -> Result<usize>

Sends data to the connected peer.

Returns the number of bytes written.

The connect method connects this socket to a remote address. This method will fail if the socket is not connected.

Examples
use async_io::Async;
use std::net::UdpSocket;

let socket = Async::<UdpSocket>::bind(([127, 0, 0, 1], 8000))?;
socket.get_ref().connect("127.0.0.1:9000")?;

let msg = b"hello";
let len = socket.send(msg).await?;
source§

impl Async<UnixListener>

source

pub fn bind<P: AsRef<Path>>(path: P) -> Result<Async<UnixListener>>

Creates a UDS listener bound to the specified path.

Examples
use async_io::Async;
use std::os::unix::net::UnixListener;

let listener = Async::<UnixListener>::bind("/tmp/socket")?;
println!("Listening on {:?}", listener.get_ref().local_addr()?);
source

pub async fn accept(&self) -> Result<(Async<UnixStream>, UnixSocketAddr)>

Accepts a new incoming UDS stream connection.

When a connection is established, it will be returned as a stream together with its remote address.

Examples
use async_io::Async;
use std::os::unix::net::UnixListener;

let listener = Async::<UnixListener>::bind("/tmp/socket")?;
let (stream, addr) = listener.accept().await?;
println!("Accepted client: {:?}", addr);
source

pub fn incoming( &self ) -> impl Stream<Item = Result<Async<UnixStream>>> + Send + '_

Returns a stream of incoming UDS connections.

The stream is infinite, i.e. it never stops with a None item.

Examples
use async_io::Async;
use futures_lite::{pin, stream::StreamExt};
use std::os::unix::net::UnixListener;

let listener = Async::<UnixListener>::bind("/tmp/socket")?;
let incoming = listener.incoming();
pin!(incoming);

while let Some(stream) = incoming.next().await {
    let stream = stream?;
    println!("Accepted client: {:?}", stream.get_ref().peer_addr()?);
}
source§

impl Async<UnixStream>

source

pub async fn connect<P: AsRef<Path>>(path: P) -> Result<Async<UnixStream>>

Creates a UDS stream connected to the specified path.

Examples
use async_io::Async;
use std::os::unix::net::UnixStream;

let stream = Async::<UnixStream>::connect("/tmp/socket").await?;
source

pub fn pair() -> Result<(Async<UnixStream>, Async<UnixStream>)>

Creates an unnamed pair of connected UDS stream sockets.

Examples
use async_io::Async;
use std::os::unix::net::UnixStream;

let (stream1, stream2) = Async::<UnixStream>::pair()?;
source§

impl Async<UnixDatagram>

source

pub fn bind<P: AsRef<Path>>(path: P) -> Result<Async<UnixDatagram>>

Creates a UDS datagram socket bound to the specified path.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let socket = Async::<UnixDatagram>::bind("/tmp/socket")?;
source

pub fn unbound() -> Result<Async<UnixDatagram>>

Creates a UDS datagram socket not bound to any address.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let socket = Async::<UnixDatagram>::unbound()?;
source

pub fn pair() -> Result<(Async<UnixDatagram>, Async<UnixDatagram>)>

Creates an unnamed pair of connected Unix datagram sockets.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let (socket1, socket2) = Async::<UnixDatagram>::pair()?;
source

pub async fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, UnixSocketAddr)>

Receives data from the socket.

Returns the number of bytes read and the address the message came from.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let socket = Async::<UnixDatagram>::bind("/tmp/socket")?;

let mut buf = [0u8; 1024];
let (len, addr) = socket.recv_from(&mut buf).await?;
source

pub async fn send_to<P: AsRef<Path>>( &self, buf: &[u8], path: P ) -> Result<usize>

Sends data to the specified address.

Returns the number of bytes written.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let socket = Async::<UnixDatagram>::unbound()?;

let msg = b"hello";
let addr = "/tmp/socket";
let len = socket.send_to(msg, addr).await?;
source

pub async fn recv(&self, buf: &mut [u8]) -> Result<usize>

Receives data from the connected peer.

Returns the number of bytes read and the address the message came from.

The connect method connects this socket to a remote address. This method will fail if the socket is not connected.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let socket = Async::<UnixDatagram>::bind("/tmp/socket1")?;
socket.get_ref().connect("/tmp/socket2")?;

let mut buf = [0u8; 1024];
let len = socket.recv(&mut buf).await?;
source

pub async fn send(&self, buf: &[u8]) -> Result<usize>

Sends data to the connected peer.

Returns the number of bytes written.

The connect method connects this socket to a remote address. This method will fail if the socket is not connected.

Examples
use async_io::Async;
use std::os::unix::net::UnixDatagram;

let socket = Async::<UnixDatagram>::bind("/tmp/socket1")?;
socket.get_ref().connect("/tmp/socket2")?;

let msg = b"hello";
let len = socket.send(msg).await?;

Trait Implementations§

source§

impl<T: AsFd> AsFd for Async<T>

source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
source§

impl<T> AsMut<T> for Async<T>

source§

fn as_mut(&mut self) -> &mut T

Converts this type into a mutable reference of the (usually inferred) input type.
source§

impl<T: AsRawFd> AsRawFd for Async<T>

source§

fn as_raw_fd(&self) -> RawFd

Extracts the raw file descriptor. Read more
source§

impl<T> AsRef<T> for Async<T>

source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<T> AsyncRead for &Async<T>where for<'a> &'a T: Read,

source§

fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut [u8] ) -> Poll<Result<usize>>

Attempt to read from the AsyncRead into buf. Read more
source§

fn poll_read_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &mut [IoSliceMut<'_>] ) -> Poll<Result<usize>>

Attempt to read from the AsyncRead into bufs using vectored IO operations. Read more
source§

impl<T: Read> AsyncRead for Async<T>

source§

fn poll_read( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &mut [u8] ) -> Poll<Result<usize>>

Attempt to read from the AsyncRead into buf. Read more
source§

fn poll_read_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &mut [IoSliceMut<'_>] ) -> Poll<Result<usize>>

Attempt to read from the AsyncRead into bufs using vectored IO operations. Read more
source§

impl<T> AsyncWrite for &Async<T>where for<'a> &'a T: Write,

source§

fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8] ) -> Poll<Result<usize>>

Attempt to write bytes from buf into the object. Read more
source§

fn poll_write_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &[IoSlice<'_>] ) -> Poll<Result<usize>>

Attempt to write bytes from bufs into the object using vectored IO operations. Read more
source§

fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to flush the object, ensuring that any buffered data reach their destination. Read more
source§

fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to close the object. Read more
source§

impl<T: Write> AsyncWrite for Async<T>

source§

fn poll_write( self: Pin<&mut Self>, cx: &mut Context<'_>, buf: &[u8] ) -> Poll<Result<usize>>

Attempt to write bytes from buf into the object. Read more
source§

fn poll_write_vectored( self: Pin<&mut Self>, cx: &mut Context<'_>, bufs: &[IoSlice<'_>] ) -> Poll<Result<usize>>

Attempt to write bytes from bufs into the object using vectored IO operations. Read more
source§

fn poll_flush(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to flush the object, ensuring that any buffered data reach their destination. Read more
source§

fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<()>>

Attempt to close the object. Read more
source§

impl<T: Debug> Debug for Async<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T> Drop for Async<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: Into<OwnedFd>> TryFrom<Async<T>> for OwnedFd

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(value: Async<T>) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl<T: AsRawFd + From<OwnedFd>> TryFrom<OwnedFd> for Async<T>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(value: OwnedFd) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl TryFrom<TcpListener> for Async<TcpListener>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(listener: TcpListener) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<TcpStream> for Async<TcpStream>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(stream: TcpStream) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<UdpSocket> for Async<UdpSocket>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(socket: UdpSocket) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<UnixDatagram> for Async<UnixDatagram>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(socket: UnixDatagram) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<UnixListener> for Async<UnixListener>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(listener: UnixListener) -> Result<Self>

Performs the conversion.
source§

impl TryFrom<UnixStream> for Async<UnixStream>

§

type Error = Error

The type returned in the event of a conversion error.
source§

fn try_from(stream: UnixStream) -> Result<Self>

Performs the conversion.
source§

impl<T> Unpin for Async<T>

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for Async<T>where T: RefUnwindSafe,

§

impl<T> Send for Async<T>where T: Send,

§

impl<T> Sync for Async<T>where T: Sync,

§

impl<T> UnwindSafe for Async<T>where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AsFilelike for Twhere T: AsFd,

§

fn as_filelike(&self) -> BorrowedFd<'_>

Borrows the reference. Read more
§

fn as_filelike_view<Target>(&self) -> FilelikeView<'_, Target>where Target: FilelikeViewType,

Return a borrowing view of a resource which dereferences to a &Target. Read more
§

impl<T> AsRawFilelike for Twhere T: AsRawFd,

§

fn as_raw_filelike(&self) -> i32

Returns the raw value.
§

impl<T> AsRawSocketlike for Twhere T: AsRawFd,

§

fn as_raw_socketlike(&self) -> i32

Returns the raw value.
§

impl<T> AsSocketlike for Twhere T: AsFd,

§

fn as_socketlike(&self) -> BorrowedFd<'_>

Borrows the reference.
§

fn as_socketlike_view<Target>(&self) -> SocketlikeView<'_, Target>where Target: SocketlikeViewType,

Return a borrowing view of a resource which dereferences to a &Target. Read more
source§

impl<R> AsyncReadExt for Rwhere R: AsyncRead + ?Sized,

source§

fn read<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadFuture<'a, Self>where Self: Unpin,

Reads some bytes from the byte stream. Read more
source§

fn read_vectored<'a>( &'a mut self, bufs: &'a mut [IoSliceMut<'a>] ) -> ReadVectoredFuture<'a, Self>where Self: Unpin,

Like read(), except it reads into a slice of buffers. Read more
source§

fn read_to_end<'a>( &'a mut self, buf: &'a mut Vec<u8, Global> ) -> ReadToEndFuture<'a, Self>where Self: Unpin,

Reads the entire contents and appends them to a Vec. Read more
source§

fn read_to_string<'a>( &'a mut self, buf: &'a mut String ) -> ReadToStringFuture<'a, Self>where Self: Unpin,

Reads the entire contents and appends them to a String. Read more
source§

fn read_exact<'a>(&'a mut self, buf: &'a mut [u8]) -> ReadExactFuture<'a, Self>where Self: Unpin,

Reads the exact number of bytes required to fill buf. Read more
source§

fn take(self, limit: u64) -> Take<Self>where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
source§

fn bytes(self) -> Bytes<Self>where Self: Sized,

Converts this [AsyncRead] into a [Stream] of bytes. Read more
source§

fn chain<R>(self, next: R) -> Chain<Self, R>where R: AsyncRead, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
source§

fn boxed_reader<'a>(self) -> Pin<Box<dyn AsyncRead + Send + 'a, Global>>where Self: Sized + Send + 'a,

Boxes the reader and changes its type to dyn AsyncRead + Send + 'a. Read more
source§

impl<W> AsyncWriteExt for Wwhere W: AsyncWrite + ?Sized,

source§

fn write<'a>(&'a mut self, buf: &'a [u8]) -> WriteFuture<'a, Self>where Self: Unpin,

Writes some bytes into the byte stream. Read more
source§

fn write_vectored<'a>( &'a mut self, bufs: &'a [IoSlice<'a>] ) -> WriteVectoredFuture<'a, Self>where Self: Unpin,

Like write(), except that it writes a slice of buffers. Read more
source§

fn write_all<'a>(&'a mut self, buf: &'a [u8]) -> WriteAllFuture<'a, Self>where Self: Unpin,

Writes an entire buffer into the byte stream. Read more
source§

fn flush(&mut self) -> FlushFuture<'_, Self>where Self: Unpin,

Flushes the stream to ensure that all buffered contents reach their destination. Read more
source§

fn close(&mut self) -> CloseFuture<'_, Self>where Self: Unpin,

Closes the writer. Read more
source§

fn boxed_writer<'a>(self) -> Pin<Box<dyn AsyncWrite + Send + 'a, Global>>where Self: Sized + Send + 'a,

Boxes the writer and changes its type to dyn AsyncWrite + Send + 'a. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.