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§

Create an ICMP socket with the given buffers.

Return the socket handle.

Return the time-to-live (IPv4) or hop limit (IPv6) value used in outgoing packets.

See also the set_hop_limit method

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.

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();

Check whether the transmit buffer is full.

Check whether the receive buffer is not empty.

Check whether the socket is open.

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.

Enqueue a packet to be sent to a given remote address, and fill it from a slice.

See also send.

Dequeue a packet received from a remote endpoint, and return the IpAddress as well as a pointer to the payload.

This function returns Err(Error::Exhausted) if the receive buffer is empty.

Dequeue a packet received from a remote endpoint, copy the payload into the given slice, and return the amount of octets copied as well as the IpAddress

See also recv.

Trait Implementations§

Formats the value using the given formatter. Read more
Converts this type into the (usually inferred) input type.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.