pub struct TcpListener { /* private fields */ }Expand description
A TCP socket server, listening for connections.
You can accept a new connection by using the
accept method.
§Examples
use std::net::SocketAddr;
use compio_io::{AsyncReadExt, AsyncWriteExt};
use compio_net::{TcpListener, TcpStream};
use socket2::SockAddr;
let addr = "127.0.0.1:2345".parse::<SocketAddr>().unwrap();
let listener = TcpListener::bind(&addr).await.unwrap();
let tx_fut = TcpStream::connect(&addr);
let rx_fut = listener.accept();
let (mut tx, (mut rx, _)) = futures_util::try_join!(tx_fut, rx_fut).unwrap();
tx.write_all("test").await.0.unwrap();
let (_, buf) = rx.read_exact(Vec::with_capacity(4)).await.unwrap();
assert_eq!(buf, b"test");Implementations§
Source§impl TcpListener
impl TcpListener
Sourcepub async fn bind(addr: impl ToSocketAddrsAsync) -> Result<TcpListener, Error>
pub async fn bind(addr: impl ToSocketAddrsAsync) -> Result<TcpListener, Error>
Creates a new TcpListener, which will be bound to the specified
address.
The returned listener is ready for accepting connections.
Binding with a port number of 0 will request that the OS assigns a port to this listener.
Sourcepub fn close(self) -> impl Future<Output = Result<(), Error>>
pub fn close(self) -> impl Future<Output = Result<(), Error>>
Close the socket. If the returned future is dropped before polling, the socket won’t be closed.
Sourcepub async fn accept(&self) -> Result<(TcpStream, SocketAddr), Error>
pub async fn accept(&self) -> Result<(TcpStream, SocketAddr), Error>
Accepts a new incoming connection from this listener.
This function will yield once a new TCP connection is established. When
established, the corresponding TcpStream and the remote peer’s
address will be returned.
Sourcepub fn local_addr(&self) -> Result<SocketAddr, Error>
pub fn local_addr(&self) -> Result<SocketAddr, Error>
Returns the local address that this listener is bound to.
This can be useful, for example, when binding to port 0 to figure out which port was actually bound.
§Examples
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
use compio_net::TcpListener;
use socket2::SockAddr;
let listener = TcpListener::bind("127.0.0.1:8080").await.unwrap();
let addr = listener.local_addr().expect("Couldn't get local address");
assert_eq!(
addr,
SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080))
);Trait Implementations§
Source§impl AsRawFd for TcpListener
impl AsRawFd for TcpListener
Source§impl Debug for TcpListener
impl Debug for TcpListener
Source§impl FromRawFd for TcpListener
impl FromRawFd for TcpListener
Source§unsafe fn from_raw_fd(fd: i32) -> TcpListener
unsafe fn from_raw_fd(fd: i32) -> TcpListener
Self from the given raw file
descriptor. Read moreSource§impl IntoRawFd for TcpListener
impl IntoRawFd for TcpListener
Source§fn into_raw_fd(self) -> i32
fn into_raw_fd(self) -> i32
Source§impl TryClone for TcpListener
impl TryClone for TcpListener
Auto Trait Implementations§
impl !Freeze for TcpListener
impl RefUnwindSafe for TcpListener
impl Send for TcpListener
impl Sync for TcpListener
impl Unpin for TcpListener
impl UnsafeUnpin for TcpListener
impl UnwindSafe for TcpListener
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more