[][src]Struct smoltcp::socket::IcmpSocket

pub struct IcmpSocket<'a, 'b: 'a> { /* fields omitted */ }

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.

Methods

impl<'a, 'b> IcmpSocket<'a, 'b>[src]

pub fn new(
    rx_buffer: IcmpSocketBuffer<'a, 'b>,
    tx_buffer: IcmpSocketBuffer<'a, 'b>
) -> IcmpSocket<'a, 'b>
[src]

Create an ICMP socket with the given buffers.

pub fn handle(&self) -> SocketHandle[src]

Return the socket handle.

pub fn hop_limit(&self) -> Option<u8>[src]

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

See also the set_hop_limit method

pub fn set_hop_limit(&mut self, hop_limit: Option<u8>)[src]

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.

pub fn bind<T: Into<Endpoint>>(&mut self, endpoint: T) -> Result<()>[src]

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

pub fn can_send(&self) -> bool[src]

Check whether the transmit buffer is full.

pub fn can_recv(&self) -> bool[src]

Check whether the receive buffer is not empty.

pub fn packet_recv_capacity(&self) -> usize[src]

Return the maximum number packets the socket can receive.

pub fn packet_send_capacity(&self) -> usize[src]

Return the maximum number packets the socket can transmit.

pub fn payload_recv_capacity(&self) -> usize[src]

Return the maximum number of bytes inside the recv buffer.

pub fn payload_send_capacity(&self) -> usize[src]

Return the maximum number of bytes inside the transmit buffer.

pub fn is_open(&self) -> bool[src]

Check whether the socket is open.

pub fn send(&mut self, size: usize, endpoint: IpAddress) -> Result<&mut [u8]>[src]

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.

pub fn send_slice(&mut self, data: &[u8], endpoint: IpAddress) -> Result<()>[src]

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

See also send.

pub fn recv(&mut self) -> Result<(&[u8], IpAddress)>[src]

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.

pub fn recv_slice(&mut self, data: &mut [u8]) -> Result<(usize, IpAddress)>[src]

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

impl<'a, 'b> AnySocket<'a, 'b> for IcmpSocket<'a, 'b>[src]

impl<'a, 'b: 'a> Debug for IcmpSocket<'a, 'b>[src]

impl<'a, 'b> Into<Socket<'a, 'b>> for IcmpSocket<'a, 'b>[src]

Auto Trait Implementations

impl<'a, 'b> RefUnwindSafe for IcmpSocket<'a, 'b>

impl<'a, 'b> Send for IcmpSocket<'a, 'b>

impl<'a, 'b> Sync for IcmpSocket<'a, 'b>

impl<'a, 'b> Unpin for IcmpSocket<'a, 'b>

impl<'a, 'b> !UnwindSafe for IcmpSocket<'a, 'b>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.