Struct smoltcp::socket::IcmpSocket
source · pub struct IcmpSocket<'a, 'b: 'a> { /* private fields */ }
Expand description
A ICMP socket
An ICMP socket is bound to a specific IcmpEndpoint which may be a sepecific UDP port to listen for ICMP error messages related to the port or a specific ICMP identifier value. See bind for more details.
Implementations§
source§impl<'a, 'b> IcmpSocket<'a, 'b>
impl<'a, 'b> IcmpSocket<'a, 'b>
sourcepub fn new(
rx_buffer: IcmpSocketBuffer<'a, 'b>,
tx_buffer: IcmpSocketBuffer<'a, 'b>
) -> IcmpSocket<'a, 'b>
pub fn new(
rx_buffer: IcmpSocketBuffer<'a, 'b>,
tx_buffer: IcmpSocketBuffer<'a, 'b>
) -> IcmpSocket<'a, 'b>
Create an ICMP socket with the given buffers.
sourcepub fn handle(&self) -> SocketHandle
pub fn handle(&self) -> SocketHandle
Return the socket handle.
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.
See also the set_hop_limit method
sourcepub fn set_hop_limit(&mut self, hop_limit: Option<u8>)
pub fn set_hop_limit(&mut self, hop_limit: Option<u8>)
Set the time-to-live (IPv4) or hop limit (IPv6) value used in outgoing packets.
A socket without an explicitly set hop limit value uses the default IANA recommended value (64).
Panics
This function panics if a hop limit value of 0 is given. See RFC 1122 § 3.2.1.7.
sourcepub fn bind<T: Into<Endpoint>>(&mut self, endpoint: T) -> Result<()>
pub fn bind<T: Into<Endpoint>>(&mut self, endpoint: T) -> Result<()>
Bind the socket to the given endpoint.
This function returns Err(Error::Illegal)
if the socket was open
(see is_open), and Err(Error::Unaddressable)
if endpoint
is unspecified (see is_specified).
Examples
Bind to ICMP Error messages associated with a specific UDP port:
To recv ICMP error messages that are associated with a specific local UDP port, the socket may be bound to a given port using IcmpEndpoint::Udp. This may be useful for applications using UDP attempting to detect and/or diagnose connection problems.
use smoltcp::wire::IpEndpoint;
use smoltcp::socket::IcmpEndpoint;
let mut icmp_socket = // ...
// Bind to ICMP error responses for UDP packets sent from port 53.
let endpoint = IpEndpoint::from(53);
icmp_socket.bind(IcmpEndpoint::Udp(endpoint)).unwrap();
Bind to a specific ICMP identifier:
To send and recv ICMP packets that are not associated with a specific UDP port, the socket may be bound to a specific ICMP identifier using IcmpEndpoint::Ident. This is useful for sending and receiving Echo Request/Reply messages.
use smoltcp::socket::IcmpEndpoint;
let mut icmp_socket = // ...
// Bind to ICMP messages with the ICMP identifier 0x1234
icmp_socket.bind(IcmpEndpoint::Ident(0x1234)).unwrap();
sourcepub fn send(&mut self, size: usize, endpoint: IpAddress) -> Result<&mut [u8]>
pub fn send(&mut self, size: usize, endpoint: IpAddress) -> Result<&mut [u8]>
Enqueue a packet to be sent to a given remote address, and return a pointer to its payload.
This function returns Err(Error::Exhausted)
if the transmit buffer is full,
Err(Error::Truncated)
if the requested size is larger than the packet buffer
size, and Err(Error::Unaddressable)
if the remote address is unspecified.
sourcepub fn send_slice(&mut self, data: &[u8], endpoint: IpAddress) -> Result<()>
pub fn send_slice(&mut self, data: &[u8], endpoint: IpAddress) -> Result<()>
Enqueue a packet to be sent to a given remote address, and fill it from a slice.
See also send.