HostUdpSocket

Trait HostUdpSocket 

Source
pub trait HostUdpSocket: Send {
    // Required methods
    fn create(
        &mut self,
        address_family: IpAddressFamily,
    ) -> Result<Resource<UdpSocket>, SocketError>;
    fn disconnect(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<(), SocketError>;
    fn get_local_address(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<IpSocketAddress, SocketError>;
    fn get_remote_address(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<IpSocketAddress, SocketError>;
    fn get_address_family(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<IpAddressFamily>;
    fn get_unicast_hop_limit(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<u8, SocketError>;
    fn set_unicast_hop_limit(
        &mut self,
        self_: Resource<UdpSocket>,
        value: u8,
    ) -> Result<(), SocketError>;
    fn get_receive_buffer_size(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<u64, SocketError>;
    fn set_receive_buffer_size(
        &mut self,
        self_: Resource<UdpSocket>,
        value: u64,
    ) -> Result<(), SocketError>;
    fn get_send_buffer_size(
        &mut self,
        self_: Resource<UdpSocket>,
    ) -> Result<u64, SocketError>;
    fn set_send_buffer_size(
        &mut self,
        self_: Resource<UdpSocket>,
        value: u64,
    ) -> Result<(), SocketError>;
    fn drop(&mut self, rep: Resource<UdpSocket>) -> Result<()>;
}
Available on crate feature p3 only.

Required Methods§

Source

fn create( &mut self, address_family: IpAddressFamily, ) -> Result<Resource<UdpSocket>, SocketError>

Create a new UDP socket.

Similar to socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP) in POSIX. On IPv6 sockets, IPV6_V6ONLY is enabled by default and can’t be configured otherwise.

Unlike POSIX, WASI sockets have no notion of a socket-level O_NONBLOCK flag. Instead they fully rely on the Component Model’s async support.

§References:
Source

fn disconnect(&mut self, self_: Resource<UdpSocket>) -> Result<(), SocketError>

Dissociate this socket from its peer address.

After calling this method, send & receive are free to communicate with any address again.

The POSIX equivalent of this is calling connect with an AF_UNSPEC address.

§Typical errors
  • invalid-state: The socket is not connected.
§References
Source

fn get_local_address( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpSocketAddress, SocketError>

Get the current bound address.

POSIX mentions:

If the socket has not been bound to a local name, the value stored in the object pointed to by address is unspecified.

WASI is stricter and requires get-local-address to return invalid-state when the socket hasn’t been bound yet.

§Typical errors
  • invalid-state: The socket is not bound to any local address.
§References
Source

fn get_remote_address( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpSocketAddress, SocketError>

Source

fn get_address_family( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpAddressFamily>

Whether this is a IPv4 or IPv6 socket.

This is the value passed to the constructor.

Equivalent to the SO_DOMAIN socket option.

Source

fn get_unicast_hop_limit( &mut self, self_: Resource<UdpSocket>, ) -> Result<u8, SocketError>

Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options.

If the provided value is 0, an invalid-argument error is returned.

§Typical errors
  • invalid-argument: (set) The TTL value must be 1 or higher.
Source

fn set_unicast_hop_limit( &mut self, self_: Resource<UdpSocket>, value: u8, ) -> Result<(), SocketError>

Source

fn get_receive_buffer_size( &mut self, self_: Resource<UdpSocket>, ) -> Result<u64, SocketError>

The kernel buffer space reserved for sends/receives on this socket.

If the provided value is 0, an invalid-argument error is returned. Any other value will never cause an error, but it might be silently clamped and/or rounded. I.e. after setting a value, reading the same setting back may return a different value.

Equivalent to the SO_RCVBUF and SO_SNDBUF socket options.

§Typical errors
  • invalid-argument: (set) The provided value was 0.
Source

fn set_receive_buffer_size( &mut self, self_: Resource<UdpSocket>, value: u64, ) -> Result<(), SocketError>

Source

fn get_send_buffer_size( &mut self, self_: Resource<UdpSocket>, ) -> Result<u64, SocketError>

Source

fn set_send_buffer_size( &mut self, self_: Resource<UdpSocket>, value: u64, ) -> Result<(), SocketError>

Source

fn drop(&mut self, rep: Resource<UdpSocket>) -> Result<()>

Implementations on Foreign Types§

Source§

impl<_T: HostUdpSocket + ?Sized + Send> HostUdpSocket for &mut _T

Source§

fn create( &mut self, address_family: IpAddressFamily, ) -> Result<Resource<UdpSocket>, SocketError>

Create a new UDP socket.

Similar to socket(AF_INET or AF_INET6, SOCK_DGRAM, IPPROTO_UDP) in POSIX. On IPv6 sockets, IPV6_V6ONLY is enabled by default and can’t be configured otherwise.

Unlike POSIX, WASI sockets have no notion of a socket-level O_NONBLOCK flag. Instead they fully rely on the Component Model’s async support.

§References:
Source§

fn disconnect(&mut self, self_: Resource<UdpSocket>) -> Result<(), SocketError>

Dissociate this socket from its peer address.

After calling this method, send & receive are free to communicate with any address again.

The POSIX equivalent of this is calling connect with an AF_UNSPEC address.

§Typical errors
  • invalid-state: The socket is not connected.
§References
Source§

fn get_local_address( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpSocketAddress, SocketError>

Get the current bound address.

POSIX mentions:

If the socket has not been bound to a local name, the value stored in the object pointed to by address is unspecified.

WASI is stricter and requires get-local-address to return invalid-state when the socket hasn’t been bound yet.

§Typical errors
  • invalid-state: The socket is not bound to any local address.
§References
Source§

fn get_remote_address( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpSocketAddress, SocketError>

Source§

fn get_address_family( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpAddressFamily>

Whether this is a IPv4 or IPv6 socket.

This is the value passed to the constructor.

Equivalent to the SO_DOMAIN socket option.

Source§

fn get_unicast_hop_limit( &mut self, self_: Resource<UdpSocket>, ) -> Result<u8, SocketError>

Equivalent to the IP_TTL & IPV6_UNICAST_HOPS socket options.

If the provided value is 0, an invalid-argument error is returned.

§Typical errors
  • invalid-argument: (set) The TTL value must be 1 or higher.
Source§

fn get_receive_buffer_size( &mut self, self_: Resource<UdpSocket>, ) -> Result<u64, SocketError>

The kernel buffer space reserved for sends/receives on this socket.

If the provided value is 0, an invalid-argument error is returned. Any other value will never cause an error, but it might be silently clamped and/or rounded. I.e. after setting a value, reading the same setting back may return a different value.

Equivalent to the SO_RCVBUF and SO_SNDBUF socket options.

§Typical errors
  • invalid-argument: (set) The provided value was 0.
Source§

fn set_unicast_hop_limit( &mut self, self_: Resource<UdpSocket>, value: u8, ) -> Result<(), SocketError>

Source§

fn set_receive_buffer_size( &mut self, self_: Resource<UdpSocket>, value: u64, ) -> Result<(), SocketError>

Source§

fn get_send_buffer_size( &mut self, self_: Resource<UdpSocket>, ) -> Result<u64, SocketError>

Source§

fn set_send_buffer_size( &mut self, self_: Resource<UdpSocket>, value: u64, ) -> Result<(), SocketError>

Source§

fn drop(&mut self, rep: Resource<UdpSocket>) -> Result<()>

Implementors§