Struct async_net::TcpListener
source · [−]pub struct TcpListener { /* private fields */ }
Expand description
A TCP server, listening for connections.
After creating a TcpListener
by bind
ing it to an address, it
listens for incoming TCP connections. These can be accepted by calling
accept()
or by awaiting items from the stream of
incoming
connections.
Cloning a TcpListener
creates another handle to the same socket. The socket will be closed
when all handles to it are dropped.
The Transmission Control Protocol is specified in IETF RFC 793.
Examples
use async_net::TcpListener;
use futures_lite::prelude::*;
let listener = TcpListener::bind("127.0.0.1:8080").await?;
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
let mut stream = stream?;
stream.write_all(b"hello").await?;
}
Implementations
sourceimpl TcpListener
impl TcpListener
sourcepub async fn bind<A: AsyncToSocketAddrs>(addr: A) -> Result<TcpListener>
pub async fn bind<A: AsyncToSocketAddrs>(addr: A) -> Result<TcpListener>
Creates a new TcpListener
bound to the given address.
Binding with a port number of 0 will request that the operating system assigns an available
port to this listener. The assigned port can be queried via the
local_addr()
method.
If addr
yields multiple addresses, binding will be attempted with each of the addresses
until one succeeds and returns the listener. If none of the addresses succeed in creating a
listener, the error from the last attempt is returned.
Examples
Create a TCP listener bound to 127.0.0.1:80
:
use async_net::TcpListener;
let listener = TcpListener::bind("127.0.0.1:80").await?;
Create a TCP listener bound to 127.0.0.1:80
. If that address is unavailable, then try
binding to 127.0.0.1:443
:
use async_net::{SocketAddr, TcpListener};
let addrs = [
SocketAddr::from(([127, 0, 0, 1], 80)),
SocketAddr::from(([127, 0, 0, 1], 443)),
];
let listener = TcpListener::bind(&addrs[..]).await.unwrap();
sourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
Returns the local address this listener is bound to.
Examples
Bind to port 0 and then see which port was assigned by the operating system:
use async_net::{SocketAddr, TcpListener};
let listener = TcpListener::bind("127.0.0.1:0").await?;
println!("Listening on {}", listener.local_addr()?);
sourcepub async fn accept(&self) -> Result<(TcpStream, SocketAddr)>
pub async fn accept(&self) -> Result<(TcpStream, SocketAddr)>
Accepts a new incoming connection.
Returns a TCP stream and the address it is connected to.
Examples
use async_net::TcpListener;
let listener = TcpListener::bind("127.0.0.1:8080").await?;
let (stream, addr) = listener.accept().await?;
sourcepub fn incoming(&self) -> Incoming<'_>
pub fn incoming(&self) -> Incoming<'_>
Returns a stream of incoming connections.
Iterating over this stream is equivalent to calling accept()
in a loop. The stream of connections is infinite, i.e awaiting the next connection will
never result in None
.
Examples
use async_net::TcpListener;
use futures_lite::prelude::*;
let listener = TcpListener::bind("127.0.0.1:0").await?;
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
let mut stream = stream?;
stream.write_all(b"hello").await?;
}
sourcepub fn ttl(&self) -> Result<u32>
pub fn ttl(&self) -> Result<u32>
Gets the value of the IP_TTL
option for this socket.
This option configures the time-to-live field that is used in every packet sent from this socket.
Examples
use async_net::TcpListener;
let listener = TcpListener::bind("127.0.0.1:80").await?;
listener.set_ttl(100)?;
assert_eq!(listener.ttl()?, 100);
sourcepub fn set_ttl(&self, ttl: u32) -> Result<()>
pub fn set_ttl(&self, ttl: u32) -> Result<()>
Sets the value of the IP_TTL
option for this socket.
This option configures the time-to-live field that is used in every packet sent from this socket.
Examples
use async_net::TcpListener;
let listener = TcpListener::bind("127.0.0.1:80").await?;
listener.set_ttl(100)?;
Trait Implementations
sourceimpl AsRawFd for TcpListener
impl AsRawFd for TcpListener
sourceimpl Clone for TcpListener
impl Clone for TcpListener
sourcefn clone(&self) -> TcpListener
fn clone(&self) -> TcpListener
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for TcpListener
impl Debug for TcpListener
sourceimpl From<Async<TcpListener>> for TcpListener
impl From<Async<TcpListener>> for TcpListener
sourcefn from(listener: Async<TcpListener>) -> TcpListener
fn from(listener: Async<TcpListener>) -> TcpListener
Performs the conversion.
sourceimpl From<TcpListener> for Arc<Async<TcpListener>>
impl From<TcpListener> for Arc<Async<TcpListener>>
sourcefn from(val: TcpListener) -> Self
fn from(val: TcpListener) -> Self
Performs the conversion.
sourceimpl TryFrom<TcpListener> for TcpListener
impl TryFrom<TcpListener> for TcpListener
sourcefn try_from(listener: TcpListener) -> Result<TcpListener>
fn try_from(listener: TcpListener) -> Result<TcpListener>
Performs the conversion.
Auto Trait Implementations
impl RefUnwindSafe for TcpListener
impl Send for TcpListener
impl Sync for TcpListener
impl Unpin for TcpListener
impl UnwindSafe for TcpListener
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more