embassy-net

Crates

git

Versions

default

Flavors

embassy_net::udp

Struct UdpSocket

Source
pub struct UdpSocket<'a> { /* private fields */ }
Expand description

An UDP socket.

Implementations§

Source§

impl<'a> UdpSocket<'a>

Source

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 UDP socket using the provided stack and buffers.

Source

pub fn bind<T>(&mut self, endpoint: T) -> Result<(), BindError>

Bind the socket to a local endpoint.

Source

pub async fn wait_recv_ready(&self)

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.

Source

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.

Source

pub async fn recv_from( &self, buf: &mut [u8], ) -> Result<(usize, UdpMetadata), RecvError>

Receive a datagram.

This method will wait until a datagram is received.

Returns the number of bytes received and the remote endpoint.

Source

pub fn poll_recv_from( &self, buf: &mut [u8], cx: &mut Context<'_>, ) -> Poll<Result<(usize, UdpMetadata), 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.

Source

pub async fn recv_from_with<F, R>(&mut self, f: F) -> R
where F: FnOnce(&[u8], UdpMetadata) -> R,

Receive a datagram with a zero-copy function.

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 call the provided function with the number of bytes received and the remote endpoint and return Poll::Ready with the function’s returned value.

Source

pub async fn wait_send_ready(&self)

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.

Source

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.

Source

pub async fn send_to<T>( &self, buf: &[u8], remote_endpoint: T, ) -> Result<(), SendError>
where T: Into<UdpMetadata>,

Send a datagram to the specified remote endpoint.

This method will wait until the datagram has been sent.

When the remote endpoint is not reachable, this method will return Err(SendError::NoRoute)

Source

pub fn poll_send_to<T>( &self, buf: &[u8], remote_endpoint: T, cx: &mut Context<'_>, ) -> Poll<Result<(), SendError>>
where T: Into<UdpMetadata>,

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.

When the remote endpoint is not reachable, this method will return Poll::Ready(Err(Error::NoRoute)).

Source

pub async fn send_to_with<T, F, R>( &mut self, size: usize, remote_endpoint: T, f: F, ) -> Result<R, SendError>
where T: Into<UdpMetadata> + Copy, F: FnOnce(&mut [u8]) -> R,

Send a datagram to the specified remote endpoint 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.

When the remote endpoint is not reachable, this method will return Err(SendError::NoRoute)

Source

pub async fn flush(&mut self)

Flush the socket.

This method will wait until the socket is flushed.

Source

pub fn endpoint(&self) -> IpListenEndpoint

Returns the local endpoint of the socket.

Source

pub fn is_open(&self) -> bool

Returns whether the socket is open.

Source

pub fn close(&mut self)

Close the socket.

Source

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.

Source

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.

Source

pub fn packet_recv_capacity(&self) -> usize

Return the maximum number packets the socket can receive.

Source

pub fn packet_send_capacity(&self) -> usize

Return the maximum number packets the socket can receive.

Source

pub fn payload_recv_capacity(&self) -> usize

Return the maximum number of bytes inside the recv buffer.

Source

pub fn payload_send_capacity(&self) -> usize

Return the maximum number of bytes inside the transmit buffer.

Source

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

Set the hop limit field in the IP header of sent packets.

Trait Implementations§

Source§

impl Drop for UdpSocket<'_>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for UdpSocket<'a>

§

impl<'a> !RefUnwindSafe for UdpSocket<'a>

§

impl<'a> !Send for UdpSocket<'a>

§

impl<'a> !Sync for UdpSocket<'a>

§

impl<'a> Unpin for UdpSocket<'a>

§

impl<'a> !UnwindSafe for UdpSocket<'a>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

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

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.