pub struct UdpSocket { /* private fields */ }
Expand description
Tokio-compatible UDP socket with some useful specializations.
Unlike a standard tokio UDP socket, this allows ECN bits to be read and written on some platforms.
Implementations§
Source§impl UdpSocket
impl UdpSocket
Sourcepub fn from_std(socket: UdpSocket) -> Result<UdpSocket>
pub fn from_std(socket: UdpSocket) -> Result<UdpSocket>
Creates a new UDP socket from a previously created std::net::UdpSocket
pub fn into_std(self) -> Result<UdpSocket>
Sourcepub async fn bind<A: ToSocketAddrs>(addr: A) -> Result<UdpSocket>
pub async fn bind<A: ToSocketAddrs>(addr: A) -> Result<UdpSocket>
create a new UDP socket and attempt to bind to addr
Sourcepub fn set_broadcast(&self, broadcast: bool) -> Result<()>
pub fn set_broadcast(&self, broadcast: bool) -> Result<()>
sets the value of SO_BROADCAST for this socket
Sourcepub fn set_gro(&self, enable: bool) -> Result<()>
pub fn set_gro(&self, enable: bool) -> Result<()>
Opportunistically try to enable GRO support for this socket. This is only supported on Linux platforms.
pub async fn connect<A: ToSocketAddrs>(&self, addrs: A) -> Result<()>
pub async fn join_multicast_v4( &self, multiaddr: Ipv4Addr, interface: Ipv4Addr, ) -> Result<()>
pub async fn join_multicast_v6( &self, multiaddr: &Ipv6Addr, interface: u32, ) -> Result<()>
pub async fn leave_multicast_v4( &self, multiaddr: Ipv4Addr, interface: Ipv4Addr, ) -> Result<()>
pub async fn leave_multicast_v6( &self, multiaddr: &Ipv6Addr, interface: u32, ) -> Result<()>
pub async fn set_multicast_loop_v4(&self, on: bool) -> Result<()>
pub async fn set_multicast_loop_v6(&self, on: bool) -> Result<()>
Sourcepub async fn send_to(&self, buf: &[u8], target: SocketAddr) -> Result<usize>
pub async fn send_to(&self, buf: &[u8], target: SocketAddr) -> Result<usize>
Sends data on the socket to the given address. On success, returns the number of bytes written.
calls underlying tokio send_to
Sourcepub fn poll_send_to(
&self,
cx: &mut Context<'_>,
buf: &[u8],
target: SocketAddr,
) -> Poll<Result<usize>>
pub fn poll_send_to( &self, cx: &mut Context<'_>, buf: &[u8], target: SocketAddr, ) -> Poll<Result<usize>>
Sends data on the socket to the given address. On success, returns the number of bytes written.
calls underlying tokio poll_send_to
Sourcepub async fn send(&self, buf: &[u8]) -> Result<usize>
pub async fn send(&self, buf: &[u8]) -> Result<usize>
Sends data on the socket to the remote address that the socket is connected to.
See tokio send
Sourcepub async fn poll_send(
&self,
cx: &mut Context<'_>,
buf: &[u8],
) -> Poll<Result<usize>>
pub async fn poll_send( &self, cx: &mut Context<'_>, buf: &[u8], ) -> Poll<Result<usize>>
Sends data on the socket to the remote address that the socket is connected to.
See tokio poll_send
Sourcepub async fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
pub async fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)>
Receives a single datagram message on the socket. On success, returns the number of bytes read and the origin.
See tokio recv_from
Sourcepub fn poll_recv_from(
&self,
cx: &mut Context<'_>,
buf: &mut ReadBuf<'_>,
) -> Poll<Result<SocketAddr>>
pub fn poll_recv_from( &self, cx: &mut Context<'_>, buf: &mut ReadBuf<'_>, ) -> Poll<Result<SocketAddr>>
Receives a single datagram message on the socket. On success, returns the number of bytes read and the origin.
See tokio poll_recv_from
Sourcepub async fn recv(&self, buf: &mut [u8]) -> Result<usize>
pub async fn recv(&self, buf: &mut [u8]) -> Result<usize>
Receives a single datagram message on the socket from the remote address to which it is connected. On success, returns the number of bytes read.
See tokio recv
Sourcepub fn poll_recv(
&self,
cx: &mut Context<'_>,
buf: &mut ReadBuf<'_>,
) -> Poll<Result<()>>
pub fn poll_recv( &self, cx: &mut Context<'_>, buf: &mut ReadBuf<'_>, ) -> Poll<Result<()>>
Receives a single datagram message on the socket from the remote address to which it is connected. On success, returns the number of bytes read.
See tokio poll_recv
Sourcepub async fn send_mmsg<B: AsPtr<u8>>(
&self,
state: &UdpState,
transmits: &[Transmit<B>],
) -> Result<usize, Error>
pub async fn send_mmsg<B: AsPtr<u8>>( &self, state: &UdpState, transmits: &[Transmit<B>], ) -> Result<usize, Error>
Calls syscall sendmmsg
. With a given state
configured GSO and
transmits
with information on the data and metadata about outgoing
packets.
Utilizes the default batch size (DEFAULT_BATCH_SIZE
), and will send no
more than that number of messages. The caller must call this fuction
again after modifying transmits
to continue sending the entire set of
messages.
Sourcepub async fn send_mmsg_with_batch_size<B: AsPtr<u8>, const BATCH_SIZE: usize>(
&self,
state: &UdpState,
transmits: &[Transmit<B>],
) -> Result<usize, Error>
pub async fn send_mmsg_with_batch_size<B: AsPtr<u8>, const BATCH_SIZE: usize>( &self, state: &UdpState, transmits: &[Transmit<B>], ) -> Result<usize, Error>
Calls syscall sendmmsg
. With a given state
configured GSO and
transmits
with information on the data and metadata about outgoing packets.
Sends no more than BATCH_SIZE
messages. The caller must call this
fuction again after modifying transmits
to continue sending the entire
set of messages. BATCH_SIZE_CAP
defines the maximum that will be
sent, regardless of the specified BATCH_SIZE
Sourcepub async fn send_msg<B: AsPtr<u8>>(
&self,
state: &UdpState,
transmits: Transmit<B>,
) -> Result<usize>
pub async fn send_msg<B: AsPtr<u8>>( &self, state: &UdpState, transmits: Transmit<B>, ) -> Result<usize>
Calls syscall sendmsg
. With a given state
configured GSO and
transmit
with information on the data and metadata about outgoing packet.
Sourcepub async fn recv_mmsg(
&self,
bufs: &mut [IoSliceMut<'_>],
meta: &mut [RecvMeta],
) -> Result<usize>
pub async fn recv_mmsg( &self, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta], ) -> Result<usize>
async version of recvmmsg
with compile-time configurable batch size
pub async fn recv_mmsg_with_batch_size<const BATCH_SIZE: usize>( &self, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta], ) -> Result<usize>
Sourcepub async fn recv_msg(&self, buf: &mut [u8]) -> Result<RecvMeta>
pub async fn recv_msg(&self, buf: &mut [u8]) -> Result<RecvMeta>
recv_msg
is similar to recv_from
but returns extra information
about the packet in RecvMeta
.
Sourcepub fn poll_send_mmsg<B: AsPtr<u8>>(
&mut self,
state: &UdpState,
cx: &mut Context<'_>,
transmits: &[Transmit<B>],
) -> Poll<Result<usize>>
pub fn poll_send_mmsg<B: AsPtr<u8>>( &mut self, state: &UdpState, cx: &mut Context<'_>, transmits: &[Transmit<B>], ) -> Poll<Result<usize>>
calls sendmmsg
Sourcepub fn poll_send_mmsg_with_batch_size<B: AsPtr<u8>, const BATCH_SIZE: usize>(
&mut self,
state: &UdpState,
cx: &mut Context<'_>,
transmits: &[Transmit<B>],
) -> Poll<Result<usize>>
pub fn poll_send_mmsg_with_batch_size<B: AsPtr<u8>, const BATCH_SIZE: usize>( &mut self, state: &UdpState, cx: &mut Context<'_>, transmits: &[Transmit<B>], ) -> Poll<Result<usize>>
calls sendmmsg
Sourcepub fn poll_send_msg<B: AsPtr<u8>>(
&self,
state: &UdpState,
cx: &mut Context<'_>,
transmits: Transmit<B>,
) -> Poll<Result<usize>>
pub fn poll_send_msg<B: AsPtr<u8>>( &self, state: &UdpState, cx: &mut Context<'_>, transmits: Transmit<B>, ) -> Poll<Result<usize>>
calls sendmsg
with compile-time configurable batch size
Sourcepub fn poll_recv_msg(
&self,
cx: &mut Context<'_>,
buf: &mut IoSliceMut<'_>,
) -> Poll<Result<RecvMeta>>
pub fn poll_recv_msg( &self, cx: &mut Context<'_>, buf: &mut IoSliceMut<'_>, ) -> Poll<Result<RecvMeta>>
calls recvmsg
Sourcepub fn poll_recv_mmsg(
&self,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>],
meta: &mut [RecvMeta],
) -> Poll<Result<usize>>
pub fn poll_recv_mmsg( &self, cx: &mut Context<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta], ) -> Poll<Result<usize>>
calls recvmmsg
Sourcepub fn poll_recv_mmsg_with_batch_size<const BATCH_SIZE: usize>(
&self,
cx: &mut Context<'_>,
bufs: &mut [IoSliceMut<'_>],
meta: &mut [RecvMeta],
) -> Poll<Result<usize>>
pub fn poll_recv_mmsg_with_batch_size<const BATCH_SIZE: usize>( &self, cx: &mut Context<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta], ) -> Poll<Result<usize>>
calls recvmmsg
with compile-time configurable batch size
Sourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
Returns local address this socket is bound to.