Struct TcpListener
pub struct TcpListener { /* private fields */ }net only.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 listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
let addr = listener.local_addr().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§
§impl TcpListener
impl TcpListener
pub 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.
It enables the SO_REUSEADDR option by default.
To configure the socket before binding, you can use the TcpSocket
type.
pub fn from_std(stream: TcpListener) -> Result<TcpListener, Error>
pub fn from_std(stream: TcpListener) -> Result<TcpListener, Error>
Creates new TcpListener from a std::net::TcpListener.
pub 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.
See TcpStream::close for more details.
pub 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.
pub fn incoming(&self) -> TcpIncoming<'_>
pub fn incoming(&self) -> TcpIncoming<'_>
Returns a stream of incoming connections to this listener.
pub 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))
);pub fn take_error(&self) -> Result<Option<Error>, Error>
pub fn take_error(&self) -> Result<Option<Error>, Error>
Returns the value of the SO_ERROR option.
pub fn ttl_v4(&self) -> Result<u32, Error>
pub fn ttl_v4(&self) -> Result<u32, Error>
Gets the value of the IP_TTL option for this socket.
For more information about this option, see set_ttl_v4.
pub fn set_ttl_v4(&self, ttl: u32) -> Result<(), Error>
pub fn set_ttl_v4(&self, ttl: u32) -> Result<(), Error>
Sets the value for the IP_TTL option on this socket.
This value sets the time-to-live field that is used in every packet sent from this socket.
Trait Implementations§
§impl AsFd for TcpListener
Available on Unix only.
impl AsFd for TcpListener
§fn as_fd(&self) -> BorrowedFd<'_>
fn as_fd(&self) -> BorrowedFd<'_>
§impl Clone for TcpListener
impl Clone for TcpListener
§fn clone(&self) -> TcpListener
fn clone(&self) -> TcpListener
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for TcpListener
impl Debug for TcpListener
§impl FromRawFd for TcpListener
Available on Unix only.
impl FromRawFd for TcpListener
§unsafe fn from_raw_fd(fd: i32) -> TcpListener
unsafe fn from_raw_fd(fd: i32) -> TcpListener
Self from the given raw file
descriptor. Read moreSharedFd.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§
§impl<T> AsSource for Twhere
T: AsFd,
impl<T> AsSource for Twhere
T: AsFd,
§fn source(&self) -> BorrowedFd<'_>
fn source(&self) -> BorrowedFd<'_>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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