UDP is a simple datagram protocol
which is layered directly above the Internet Protocol ("IP") or the Internet Protocol Version 6 ("IPv6").
Programs may access UDP using the socket
interface, where it supports the SOCK_DGRAM socket type, or using the Transport
Level Interface ("TLI"), where it supports
the connectionless (T_CLTS) service type.
Within the socket interface, UDP
is normally used with the sendto(), sendmsg(), recvfrom(), and recvmsg()
calls (see send(3SOCKET)
If the connect(3SOCKET)
call is used to fix the destination for future packets, then the recv(3SOCKET)
or read(2) and send(3SOCKET)
or write(2) calls
may be used.
UDP address formats are identical
to those used by the Transmission Control Protocol ("TCP"). Like TCP, UDP uses a port number along with an IPor IPv6 address to identify the endpoint of communication. The UDP port number space is separate from the TCP port number space, that is, a UDP port may not be "connected" to a TCP port. The bind(3SOCKET)
call can be used to set the local address and port number of a UDP socket. The local IP or IPv6 address may be left unspecified in the bind() call by using the special value INADDR_ANY
for IP, or the unspecified address (all zeroes) for IPv6.
If the bind() call is not done, a local IP or IPv6 address and port number will be assigned to the endpoint
when the first packet is sent. Broadcast packets may be sent, assuming the
underlying network supports this, by using a reserved "broadcast address."
This address is network interface dependent. Broadcasts may only be sent
by the privileged user.
IPv6 does not support broadcast addresses; their function is supported
by IPv6 multicast addresses.
Options at the IP level may be used
with UDP; see ip(7P)
There are a variety of ways that a UDP
packet can be lost or corrupted, including a failure of the underlying communication
mechanism. UDP implements a checksum over
the data portion of the packet. If the checksum of a received packet is
in error, the packet will be dropped with no indication given to the user.
A queue of received packets is provided for each UDP socket. This queue has a limited capacity. Arriving datagrams
which will not fit within its high-water capacity
are silently discarded.
UDP processes Internet Control Message
Protocol ("ICMP") and Internet Control Message
Protocol Version 6 ("ICMP6") error messages
received in response to UDP packets it
has sent. See icmp(7P) and icmp6(7p).
ICMP "source quench"
messages are ignored. ICMP "destination
unreachable," "time exceeded" and "parameter problem"
messages disconnect the socket from its peer so that subsequent attempts
to send packets using that socket will return an error. UDP will not guarantee that packets are delivered in the order
they were sent. As well, duplicate packets may be generated in the communication
ICMP6 "destination unreachable"
packets are ignored unless the enclosed code indicates that the port is
not in use on the target host, in which case, the application is notified. ICMP6 "parameter problem" notifications
are similarly passed upstream. All other ICMP6 messages