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-specific sock_types.h.

int sock_udp_create(sock/udp.h::sock_udp_t * sock, const sock/udp.h::sock_udp_ep_t * local, const sock/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 be sock.h::SOCK_ADDR_ANY_NETIF or equal to sock.h::_sock_tl_ep::netif of remote if remote != NULL. If NULL sock/udp.h::sock_udp_send() may bind implicitly. sock.h::_sock_tl_ep::port may also be 0 to bind the sock to an ephemeral port.
remote:Remote end point for the sock object. May be NULL but then the remote parameter of sock/udp.h::sock_udp_send() may not be NULL or it will always error with return value -ENOTCONN. sock.h::_sock_tl_ep::port must not be 0 if remote != NULL. sock.h::_sock_tl_ep::netif must either be sock.h::SOCK_ADDR_ANY_NETIF or equal to sock.h::_sock_tl_ep::netif of local if local != NULL.
flags:Flags for the sock object. See also . May be 0.

Return values

  • 0 on success.
  • -EADDRINUSE, if local != NULL and local is already used elsewhere or if local->port == 0 but the pool of ephemeral ports is depleted
  • -EAFNOSUPPORT, if local != NULL or remote != NULL and sock.h::_sock_tl_ep::family of local or remote is not supported.
  • -EINVAL, if sock.h::_sock_tl_ep::addr of remote is an invalid address.
  • -EINVAL, if sock.h::_sock_tl_ep::netif of local or remote 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 isNULL). @return -ENOMEM, if not enough resources can be provided forsock` 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 is 0 and no data is available.
  • -EINVAL, if remote is invalid or sock is not properly initialized (or closed while sock/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, const sock/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 if len == 0.
len:Maximum space available at data.
remote:Remote end point for the sent data. May be NULL, if sock has a remote end point. sock.h::_sock_tl_ep::family may be AF_UNSPEC, if local end point of sock 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 was NULL and the pool of available ephemeral ports is depleted.
  • -EAFNOSUPPORT, if remote != NULL and sock.h::_sock_tl_ep::family of remote is != AF_UNSPEC and not supported.
  • -EHOSTUNREACH, if remote or remote end point of sock is not reachable.
  • -EINVAL, if sock.h::_sock_tl_ep::addr of remote is an invalid address.
  • -EINVAL, if sock.h::_sock_tl_ep::netif of remote is not a valid interface or contradicts the given local interface (i.e. neither the local end point of sock nor remote are assigned to SOCK_ADDR_ANY_NETIF but are nevertheless different.
  • -EINVAL, if sock.h::_sock_tl_ep::port of remote is 0.
  • -ENOMEM, if no memory was available to send data.
  • -ENOTCONN, if remote == NULL, but sock has no remote end point.