pub struct IcmpSocket<'a> { /* private fields */ }Expand description
An ICMP socket.
Implementations§
Source§impl<'a> IcmpSocket<'a>
impl<'a> IcmpSocket<'a>
Sourcepub fn new(
stack: Stack<'a>,
rx_meta: &'a mut [PacketMetadata],
rx_buffer: &'a mut [u8],
tx_meta: &'a mut [PacketMetadata],
tx_buffer: &'a mut [u8],
) -> Self
pub fn new( stack: Stack<'a>, rx_meta: &'a mut [PacketMetadata], rx_buffer: &'a mut [u8], tx_meta: &'a mut [PacketMetadata], tx_buffer: &'a mut [u8], ) -> Self
Create a new ICMP socket using the provided stack and buffers.
Sourcepub fn bind<T>(&mut self, endpoint: T) -> Result<(), BindError>where
T: Into<IcmpEndpoint>,
pub fn bind<T>(&mut self, endpoint: T) -> Result<(), BindError>where
T: Into<IcmpEndpoint>,
Bind the socket to the given endpoint.
Sourcepub fn wait_recv_ready(&self) -> impl Future<Output = ()> + '_
pub fn wait_recv_ready(&self) -> impl Future<Output = ()> + '_
Wait until the socket becomes readable.
A socket is readable when a packet has been received, or when there are queued packets in the buffer.
Sourcepub fn poll_recv_ready(&self, cx: &mut Context<'_>) -> Poll<()>
pub fn poll_recv_ready(&self, cx: &mut Context<'_>) -> Poll<()>
Wait until a datagram can be read.
When no datagram is readable, this method will return Poll::Pending and
register the current task to be notified when a datagram is received.
When a datagram is received, this method will return Poll::Ready.
Sourcepub fn recv_from<'s>(
&'s self,
buf: &'s mut [u8],
) -> impl Future<Output = Result<(usize, IpAddress), RecvError>> + 's
pub fn recv_from<'s>( &'s self, buf: &'s mut [u8], ) -> impl Future<Output = Result<(usize, IpAddress), RecvError>> + 's
Receive a datagram.
This method will wait until a datagram is received.
Returns the number of bytes received and the remote endpoint.
Sourcepub fn poll_recv_from(
&self,
buf: &mut [u8],
cx: &mut Context<'_>,
) -> Poll<Result<(usize, IpAddress), RecvError>>
pub fn poll_recv_from( &self, buf: &mut [u8], cx: &mut Context<'_>, ) -> Poll<Result<(usize, IpAddress), RecvError>>
Receive a datagram.
When no datagram is available, this method will return Poll::Pending and
register the current task to be notified when a datagram is received.
When a datagram is received, this method will return Poll::Ready with the
number of bytes received and the remote endpoint.
Sourcepub async fn recv_from_with<F, R>(&self, f: F) -> Result<R, RecvError>
pub async fn recv_from_with<F, R>(&self, f: F) -> Result<R, RecvError>
Dequeue a packet received from a remote endpoint and calls the provided function with the
slice of the packet and the remote endpoint address and returns Poll::Ready with the
function’s returned value.
Note: when the size of the provided buffer is smaller than the size of the payload,
the packet is dropped and a RecvError::Truncated error is returned.
Sourcepub fn wait_send_ready(&self) -> impl Future<Output = ()> + '_
pub fn wait_send_ready(&self) -> impl Future<Output = ()> + '_
Wait until the socket becomes writable.
A socket becomes writable when there is space in the buffer, from initial memory or after dispatching datagrams on a full buffer.
Sourcepub fn poll_send_ready(&self, cx: &mut Context<'_>) -> Poll<()>
pub fn poll_send_ready(&self, cx: &mut Context<'_>) -> Poll<()>
Wait until a datagram can be sent.
When no datagram can be sent (i.e. the buffer is full), this method will return
Poll::Pending and register the current task to be notified when
space is freed in the buffer after a datagram has been dispatched.
When a datagram can be sent, this method will return Poll::Ready.
Sourcepub async fn send_to<T>(
&self,
buf: &[u8],
remote_endpoint: T,
) -> Result<(), SendError>
pub async fn send_to<T>( &self, buf: &[u8], remote_endpoint: T, ) -> Result<(), SendError>
Send a datagram to the specified remote endpoint.
This method will wait until the datagram has been sent.
If the socket’s send buffer is too small to fit buf, this method will return Err(SendError::PacketTooLarge)
When the remote endpoint is not reachable, this method will return Err(SendError::NoRoute)
Sourcepub fn poll_send_to<T>(
&self,
buf: &[u8],
remote_endpoint: T,
cx: &mut Context<'_>,
) -> Poll<Result<(), SendError>>
pub fn poll_send_to<T>( &self, buf: &[u8], remote_endpoint: T, cx: &mut Context<'_>, ) -> Poll<Result<(), SendError>>
Send a datagram to the specified remote endpoint.
When the datagram has been sent, this method will return Poll::Ready(Ok()).
When the socket’s send buffer is full, this method will return Poll::Pending
and register the current task to be notified when the buffer has space available.
If the socket’s send buffer is too small to fit buf, this method will return Poll::Ready(Err(SendError::PacketTooLarge))
When the remote endpoint is not reachable, this method will return Poll::Ready(Err(Error::NoRoute)).
Sourcepub async fn send_to_with<T, F, R>(
&mut self,
size: usize,
remote_endpoint: T,
f: F,
) -> Result<R, SendError>
pub async fn send_to_with<T, F, R>( &mut self, size: usize, remote_endpoint: T, f: F, ) -> Result<R, SendError>
Enqueue a packet to be sent to a given remote address with a zero-copy function.
This method will wait until the buffer can fit the requested size before calling the function to fill its contents.
Sourcepub fn flush(&mut self) -> impl Future<Output = ()> + '_
pub fn flush(&mut self) -> impl Future<Output = ()> + '_
Flush the socket.
This method will wait until the socket is flushed.
Sourcepub fn may_send(&self) -> bool
pub fn may_send(&self) -> bool
Returns whether the socket is ready to send data, i.e. it has enough buffer space to hold a packet.
Sourcepub fn may_recv(&self) -> bool
pub fn may_recv(&self) -> bool
Returns whether the socket is ready to receive data, i.e. it has received a packet that’s now in the buffer.
Sourcepub fn packet_recv_capacity(&self) -> usize
pub fn packet_recv_capacity(&self) -> usize
Return the maximum number packets the socket can receive.
Sourcepub fn packet_send_capacity(&self) -> usize
pub fn packet_send_capacity(&self) -> usize
Return the maximum number packets the socket can receive.
Sourcepub fn payload_recv_capacity(&self) -> usize
pub fn payload_recv_capacity(&self) -> usize
Return the maximum number of bytes inside the recv buffer.
Sourcepub fn payload_send_capacity(&self) -> usize
pub fn payload_send_capacity(&self) -> usize
Return the maximum number of bytes inside the transmit buffer.
Sourcepub fn hop_limit(&self) -> Option<u8>
pub fn hop_limit(&self) -> Option<u8>
Return the time-to-live (IPv4) or hop limit (IPv6) value used in outgoing packets.
Sourcepub fn set_hop_limit(&mut self, hop_limit: Option<u8>)
pub fn set_hop_limit(&mut self, hop_limit: Option<u8>)
Set the hop limit field in the IP header of sent packets.