UDPSocket[optional UDP: UDPBackend ref]¶
A UDP socket: bind, send datagrams, receive datagrams, and close. A
UDPSocketActor owns one and delegates to it.
Create with UDPSocket(auth, host, port, enclosing, ler), using
UDPSocket.none() as the field initializer before that. See the package
documentation for the full lifecycle.
Constructors¶
create¶
Bind a UDP socket to host:port. Port "0" lets the OS assign an
ephemeral port.
new ref create(
auth: UDPAuth val,
host: String val,
port: String val,
enclosing: UDPSocketActor[UDP] ref,
ler: UDPLifecycleEventReceiver[UDP] ref,
read_buffer_size: ReadBufferSize = DefaultReadBufferSize(),
ip_version: IPVersion = DualStack,
max_datagrams_per_turn: USize val = 256)
: UDPSocket[UDP] ref^
Parameters¶
- auth: UDPAuth val
- host: String val
- port: String val
- enclosing: UDPSocketActor[UDP] ref
- ler: UDPLifecycleEventReceiver[UDP] ref
- read_buffer_size: ReadBufferSize = DefaultReadBufferSize()
- ip_version: IPVersion = DualStack
- max_datagrams_per_turn: USize val = 256
Returns¶
- UDPSocket[UDP] ref^
none¶
Placeholder for field initialization before the real constructor runs.
Returns¶
- UDPSocket[UDP] ref^
Public Functions¶
send_to¶
Send one datagram to to. Returns SendToOk when the datagram was
handed to the OS. UDP sends are synchronous and all-or-nothing: the
entire datagram goes out or nothing does.
Parameters¶
- data: ByteSeq
- to: NetAddress box
Returns¶
close¶
Close the socket. No graceful shutdown: the fd is closed immediately.
Returns¶
- None val
local_address¶
Return the local IP address. If the socket is closed the address returned is invalid.
Returns¶
- NetAddress val
read_again¶
Re-enter the read loop. Called internally after yielding or exhausting the per-turn budget; applications do not call this directly.
Returns¶
- None val
is_open¶
True when the socket is bound and has not been closed.
Returns¶
- Bool val
is_closed¶
True when the socket has been closed.
Returns¶
- Bool val
get_so_rcvbuf¶
Get the OS receive buffer size for this socket. Returns (errno, value). On success errno is 0.
Returns¶
set_so_rcvbuf¶
Set the OS receive buffer size for this socket. Returns 0 on success, or a non-zero errno.
Parameters¶
- bufsize: U32 val
Returns¶
- U32 val
get_so_sndbuf¶
Get the OS send buffer size for this socket. Returns (errno, value). On success errno is 0.
Returns¶
set_so_sndbuf¶
Set the OS send buffer size for this socket. Returns 0 on success, or a non-zero errno.
Parameters¶
- bufsize: U32 val
Returns¶
- U32 val
join_multicast_group_v4¶
Join an IPv4 multicast group. group is a dotted-decimal multicast
address (e.g. "239.1.2.3"). interface_addr selects the local
interface; "0.0.0.0" lets the OS choose. Returns 0 on success, or a
non-zero errno.
fun box join_multicast_group_v4(
group: String val,
interface_addr: String val = "0.0.0.0")
: U32 val
Parameters¶
Returns¶
- U32 val
leave_multicast_group_v4¶
Leave an IPv4 multicast group previously joined with
join_multicast_group_v4. Returns 0 on success, or a non-zero errno.
fun box leave_multicast_group_v4(
group: String val,
interface_addr: String val = "0.0.0.0")
: U32 val
Parameters¶
Returns¶
- U32 val
join_multicast_group_v6¶
Join an IPv6 multicast group. group is an IPv6 multicast address
(e.g. "ff12::1"). interface_index selects the local
interface by its OS index; 0 lets the OS choose. Returns 0 on success,
or a non-zero errno.
Parameters¶
Returns¶
- U32 val
leave_multicast_group_v6¶
Leave an IPv6 multicast group previously joined with
join_multicast_group_v6. Returns 0 on success, or a non-zero errno.
Parameters¶
Returns¶
- U32 val
set_multicast_ttl¶
Set the IPv4 multicast time-to-live. The IPv6 counterpart is
set_multicast_hops. Returns 0 on success, or a non-zero errno.
Parameters¶
- ttl: U8 val
Returns¶
- U32 val
set_multicast_hops¶
Set the IPv6 multicast hop limit. The IPv4 counterpart is
set_multicast_ttl. Returns 0 on success, or a non-zero errno.
Parameters¶
- hops: U32 val
Returns¶
- U32 val
set_multicast_loopback_v4¶
Enable or disable IPv4 multicast loopback. When enabled, datagrams sent to a joined group are delivered back to this socket. Returns 0 on success, or a non-zero errno.
Parameters¶
- loopback: Bool val
Returns¶
- U32 val
set_multicast_loopback_v6¶
Enable or disable IPv6 multicast loopback. When enabled, datagrams sent to a joined group are delivered back to this socket. Returns 0 on success, or a non-zero errno.
Parameters¶
- loopback: Bool val
Returns¶
- U32 val
set_multicast_interface_v4¶
Set the default IPv4 interface for outgoing multicast datagrams.
interface_addr is a dotted-decimal address of the local interface.
Returns 0 on success, or a non-zero errno.
Parameters¶
- interface_addr: String val
Returns¶
- U32 val
set_multicast_interface_v6¶
Set the default IPv6 interface for outgoing multicast datagrams.
interface_index is the OS interface index (0 means the default
route on Linux but is rejected on macOS/BSD). Returns 0 on success,
or a non-zero errno.
Parameters¶
- interface_index: U32 val
Returns¶
- U32 val
getsockopt¶
General interface to getsockopt(2). Returns (0, data) on success or
(errno, undefined) on failure. Returns (1, empty) when the socket is
not open. For commonly-tuned options, prefer get_so_rcvbuf and
get_so_sndbuf.
fun box getsockopt(
level: I32 val,
option_name: I32 val,
option_max_size: USize val = 4)
: (U32 val , Array[U8 val] iso^)
Parameters¶
Returns¶
getsockopt_u32¶
Wrapper for getsockopt(2) where the kernel returns a C uint32_t.
Returns (0, value) on success or (errno, undefined) on failure.
Returns (1, 0) when the socket is not open.
Parameters¶
Returns¶
setsockopt¶
General interface to setsockopt(2). The caller is responsible for the
correct size, byte contents, and byte order of option. Returns 0 on
success, or a non-zero errno. Returns non-zero when the socket is not
open. For commonly-tuned options, prefer set_so_rcvbuf and
set_so_sndbuf.
Parameters¶
Returns¶
- U32 val
setsockopt_u32¶
Wrapper for setsockopt(2) where the kernel expects a C uint32_t.
Returns 0 on success, or a non-zero errno. Returns non-zero when the
socket is not open.
Parameters¶
Returns¶
- U32 val