udp(7P)
NAME
udp, UDP - Internet User Datagram Protocol
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
s = socket(AF_INET, SOCK_DGRAM, 0);
s = socket(AF_INET6, SOCK_DGRAM, 0);
t = t_open("/dev/udp", O_RDWR);
t = t_open("/dev/udp6", O_RDWR);
DESCRIPTION
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) and recv(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 end-
point 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 net-
work 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) or
ip6(7p).
There are a variety of ways that a UDP packet can be lost or
corrupted, including a failure of the underlying communica-
tion mechanism. UDP implements a checksum over the data por-
tion 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" mes-
sages 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 process.
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 are ignored.
SEE ALSO
read(2), write(2), bind(3SOCKET), connect(3SOCKET),
recv(3SOCKET), send(3SOCKET), icmp(7P), icmp6(7P), inet(7P),
inet6(7P), ip(7P), ip6(7P), tcp(7P)
Postel, Jon, RFC 768, User Datagram Protocol, Network Infor-
mation Center, SRI International, Menlo Park, Calif., August
1980
DIAGNOSTICS
A socket operation may fail if:
EISCONN
A connect() operation was attempted on a socket
on which a connect() operation had already been
performed, and the socket could not be success-
fully disconnected before making the new connec-
tion.
EISCONN
A sendto() or sendmsg() operation specifying an
address to which the message should be sent was
attempted on a socket on which a connect() opera-
tion had already been performed.
ENOTCONN
A send() or write() operation, or a sendto() or
sendmsg() operation not specifying an address to
which the message should be sent, was attempted
on a socket on which a connect() operation had
not already been performed.
EADDRINUSE
A bind() operation was attempted on a socket with
a network address/port pair that has already been
bound to another socket.
EADDRNOTAVAIL
A bind() operation was attempted on a socket with
a network address for which no network interface
exists.
EINVAL
A sendmsg() operation with a non-NULL
msg_accrights was attempted.
EACCES
A bind() operation was attempted with a
"reserved" port number and the effective user ID
of the process was not the privileged user.
ENOBUFS
The system ran out of memory for internal data
structures.
Man(1) output converted with
man2html