sock/udp.h¶
UDP sock definitions.
-
struct _sock_tl_ep
sock_udp_ep_t
¶ An end point for a UDP sock object.
-
struct sock_udp
sock_udp_t
¶ Type for a UDP sock object.
Note
API implementors:
struct sock_udp
needs to be defined by implementation-specificsock_types.h
.
-
int
sock_udp_create
(sock/udp.h::sock_udp_t
* sock, constsock/udp.h::sock_udp_ep_t
* local, constsock/udp.h::sock_udp_ep_t
* remote, uint16_t flags)¶ Creates a new UDP sock object.
Parameters
sock: The resulting sock object. local: Local end point for the sock object. May be NULL. sock.h::_sock_tl_ep::netif
must either besock.h::SOCK_ADDR_ANY_NETIF
or equal tosock.h::_sock_tl_ep::netif
ofremote
ifremote != NULL
. If NULLsock/udp.h::sock_udp_send()
may bind implicitly.sock.h::_sock_tl_ep::port
may also be 0 to bind thesock
to an ephemeral port.remote: Remote end point for the sock object. May be NULL
but then theremote
parameter ofsock/udp.h::sock_udp_send()
may not beNULL
or it will always error with return value -ENOTCONN.sock.h::_sock_tl_ep::port
must not be 0 ifremote != NULL
.sock.h::_sock_tl_ep::netif
must either besock.h::SOCK_ADDR_ANY_NETIF
or equal tosock.h::_sock_tl_ep::netif
oflocal
iflocal != NULL
.flags: Flags for the sock object. See also . May be 0. Return values
- 0 on success.
- -EADDRINUSE, if
local != NULL
andlocal
is already used elsewhere or iflocal->port == 0
but the pool of ephemeral ports is depleted - -EAFNOSUPPORT, if
local != NULL
orremote != NULL
andsock.h::_sock_tl_ep::family
oflocal
orremote
is not supported. - -EINVAL, if
sock.h::_sock_tl_ep::addr
ofremote
is an invalid address. - -EINVAL, if
sock.h::_sock_tl_ep::netif
oflocal
orremote
are not a valid interfaces or contradict each other (i.e. `(local->netif != remote->netif) && ((local->netif != SOCK_ADDR_ANY_NETIF) || (remote->netif != SOCK_ADDR_ANY_NETIF))if neither is
NULL). @return -ENOMEM, if not enough resources can be provided for
sock` to be created.
-
void
sock_udp_close
(sock/udp.h::sock_udp_t
* sock)¶ Closes a UDP sock object.
Parameters
sock: A UDP sock object.
-
int
sock_udp_get_local
(sock/udp.h::sock_udp_t
* sock,sock/udp.h::sock_udp_ep_t
* ep)¶ Gets the local end point of a UDP sock object.
Parameters
sock: A UDP sock object. ep: The local end point. Return values
- 0 on success.
- -EADDRNOTAVAIL, when
sock
has no local end point.
-
int
sock_udp_get_remote
(sock/udp.h::sock_udp_t
* sock,sock/udp.h::sock_udp_ep_t
* ep)¶ Gets the remote end point of a UDP sock object.
Parameters
sock: A UDP sock object. ep: The remote end point. Return values
- 0 on success.
- -ENOTCONN, when
sock
has no remote end point bound to it.
-
msp430_types.h::ssize_t
sock_udp_recv
(sock/udp.h::sock_udp_t
* sock, void * data,msp430_types.h::size_t
max_len, uint32_t timeout,sock/udp.h::sock_udp_ep_t
* remote)¶ Receives a UDP message from a remote end point.
Parameters
sock: A raw IPv4/IPv6 sock object. data: Pointer where the received data should be stored. max_len: Maximum space available at data
.timeout: Timeout for receive in microseconds. If 0 and no data is available, the function returns immediately. May be sock.h::SOCK_NO_TIMEOUT
for no timeout (wait until data is available).remote: Remote end point of the received data. May be NULL
, if it is not required by the application.Note
Function blocks if no packet is currently waiting.
Return values
- The number of bytes received on success.
- 0, if no received data is available, but everything is in order.
- -EADDRNOTAVAIL, if local of
sock
is not given. - -EAGAIN, if
timeout
is0
and no data is available. - -EINVAL, if
remote
is invalid orsock
is not properly initialized (or closed whilesock/udp.h::sock_udp_recv()
blocks). - -ENOBUFS, if buffer space is not large enough to store received data.
- -ENOMEM, if no memory was available to receive
data
. - -EPROTO, if source address of received packet did not equal the remote of
sock
. - -ETIMEDOUT, if
timeout
expired.
-
msp430_types.h::ssize_t
sock_udp_send
(sock/udp.h::sock_udp_t
* sock, const void * data,msp430_types.h::size_t
len, constsock/udp.h::sock_udp_ep_t
* remote)¶ Sends a UDP message to remote end point.
Parameters
sock: A raw IPv4/IPv6 sock object. May be NULL
. A sensible local end point should be selected by the implementation in that case.data: Pointer where the received data should be stored. May be NULL
iflen == 0
.len: Maximum space available at data
.remote: Remote end point for the sent data. May be NULL
, ifsock
has a remote end point.sock.h::_sock_tl_ep::family
may be AF_UNSPEC, if local end point ofsock
provides this information.sock.h::_sock_tl_ep::port
may not be 0.Return values
- The number of bytes sent on success.
- -EADDRINUSE, if
sock
has no local end-point or wasNULL
and the pool of available ephemeral ports is depleted. - -EAFNOSUPPORT, if
remote != NULL
andsock.h::_sock_tl_ep::family
ofremote
is != AF_UNSPEC and not supported. - -EHOSTUNREACH, if
remote
or remote end point ofsock
is not reachable. - -EINVAL, if
sock.h::_sock_tl_ep::addr
ofremote
is an invalid address. - -EINVAL, if
sock.h::_sock_tl_ep::netif
ofremote
is not a valid interface or contradicts the given local interface (i.e. neither the local end point ofsock
nor remote are assigned toSOCK_ADDR_ANY_NETIF
but are nevertheless different. - -EINVAL, if
sock.h::_sock_tl_ep::port
ofremote
is 0. - -ENOMEM, if no memory was available to send
data
. - -ENOTCONN, if
remote == NULL
, butsock
has no remote end point.