[−][src]Struct smoltcp::socket::IcmpSocket
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]
rx_buffer: IcmpSocketBuffer<'a, 'b>,
tx_buffer: IcmpSocketBuffer<'a, 'b>
) -> IcmpSocket<'a, 'b>
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]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,