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<()>;
}
p3
only.Required Methods§
Sourcefn create(
&mut self,
address_family: IpAddressFamily,
) -> Result<Resource<UdpSocket>, SocketError>
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:
Sourcefn disconnect(&mut self, self_: Resource<UdpSocket>) -> Result<(), SocketError>
fn disconnect(&mut self, self_: Resource<UdpSocket>) -> Result<(), SocketError>
Sourcefn get_local_address(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<IpSocketAddress, SocketError>
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
Sourcefn get_remote_address(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<IpSocketAddress, SocketError>
fn get_remote_address( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpSocketAddress, SocketError>
Sourcefn get_address_family(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<IpAddressFamily>
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.
Sourcefn get_unicast_hop_limit(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<u8, SocketError>
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.
fn set_unicast_hop_limit( &mut self, self_: Resource<UdpSocket>, value: u8, ) -> Result<(), SocketError>
Sourcefn get_receive_buffer_size(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<u64, SocketError>
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.
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<()>
Implementations on Foreign Types§
Source§impl<_T: HostUdpSocket + ?Sized + Send> HostUdpSocket for &mut _T
impl<_T: HostUdpSocket + ?Sized + Send> HostUdpSocket for &mut _T
Source§fn create(
&mut self,
address_family: IpAddressFamily,
) -> Result<Resource<UdpSocket>, SocketError>
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>
fn disconnect(&mut self, self_: Resource<UdpSocket>) -> Result<(), SocketError>
Source§fn get_local_address(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<IpSocketAddress, SocketError>
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>
fn get_remote_address( &mut self, self_: Resource<UdpSocket>, ) -> Result<IpSocketAddress, SocketError>
Source§fn get_address_family(
&mut self,
self_: Resource<UdpSocket>,
) -> Result<IpAddressFamily>
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>
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>
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.