summaryrefslogtreecommitdiffstats
path: root/man7/udp.7
diff options
context:
space:
mode:
Diffstat (limited to 'man7/udp.7')
-rw-r--r--man7/udp.7161
1 files changed, 161 insertions, 0 deletions
diff --git a/man7/udp.7 b/man7/udp.7
new file mode 100644
index 000000000..7d1528681
--- /dev/null
+++ b/man7/udp.7
@@ -0,0 +1,161 @@
+.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
+.\" Permission is granted to distribute possibly modified copies
+.\" of this page provided the header is included verbatim,
+.\" and in case of nontrivial modification author and date
+.\" of the modification is added to the header.
+.\" $Id: udp.7,v 1.7 2000/01/22 01:55:05 freitag Exp $
+.TH UDP 7 1998-10-02 "Linux Man Page" "Linux Programmer's Manual"
+.SH NAME
+udp \- User Datagram Protocol for IPv4
+.SH SYNOPSIS
+.B #include <sys/socket.h>
+.br
+.B #include <netinet/in.h>
+.br
+.B udp_socket = socket(PF_INET, SOCK_DGRAM, 0);
+.SH DESCRIPTION
+This is an implemention of the User Datagram Protocol described in RFC768. It
+implements a connectionless, unreliable datagram packet service.
+Packets may be reordered or duplicated before they arrive. UDP
+generates and checks checksums to catch transmission errors.
+
+When a UDP socket is created, its local and remote addresses are unspecified.
+Datagrams can be sent immediately using
+.BR sendto (2)
+or
+.BR sendmsg (2)
+with a valid destination address as an argument. When
+.BR connect (2)
+is called on the socket the default destination address is set and datagrams
+can now be sent using
+.BR send (2)
+or
+.BR write (2)
+without specifying an destination address.
+It is still possible to send to other destinations by passing an address to
+.BR sendto (2)
+or
+.BR sendmsg (2).
+In order to receive packets the socket can be bound to an local
+address first by using
+.BR bind (2).
+Otherwise the socket layer will automatically assign
+a free local port out of the range defined by
+.I net.ipv4.ip_local_port_range
+and bind the socket to
+.IR INADDR_ANY .
+
+All receive operations return only one packet. When the packet is smaller
+than the passed buffer only that much data is returned, when it is bigger
+the packet is truncated and the
+.B MSG_TRUNC
+flag is set.
+.I MSG_WAITALL
+is not supported.
+
+IP options may be sent or received using the socket options described in
+.BR ip (7).
+They are only processed by the kernel when the appropriate sysctl
+is enabled (but still passed to the user even when it is turned off). See
+.BR ip (7).
+
+When the
+.B MSG_DONTROUTE
+flag is set on sending the destination address must refer to an local
+interface address and the packet is only sent to that interface.
+
+UDP fragments a packet when its total length exceeds the interface MTU
+(Maximum Transmission Unit).
+A more network friendly alternative is to use path MTU discovery
+as described in the
+.B IP_MTU_DISCOVER
+section of
+.BR ip (7).
+
+.SH "ADDRESS FORMAT"
+UDP uses the IPv4
+.B sockaddr_in
+address format described in
+.BR ip (7).
+
+.SH "ERROR HANDLING"
+All fatal errors will be passed to the user as an error return even
+when the socket is not connected. This includes asynchronous errors
+received from the network. You may get an error for an earlier packet
+that was sent on the same socket.
+This behaviour differs from many other BSD socket implementations
+which don't pass any errors unless the socket is connected.
+Linux's behaviour is mandated by
+.BR RFC1122 .
+
+For compatibility with legacy code it is possible to set the
+.B SO_BSDCOMPAT
+SOL_SOCKET option to receive remote errors only when the socket has been
+connected (except for
+.B EPROTO
+and
+.BR EMSGSIZE ).
+It is better to fix the
+code to handle errors properly than to enable this option.
+Locally generated errors are always passed.
+
+When the
+.B IP_RECVERR
+option is enabled all errors are stored in the socket error queue
+and can be received by
+.BR recvmsg (2)
+with the
+.B MSG_ERRQUEUE
+flag set.
+.SH IOCTLS
+These ioctls can be accessed using
+.BR ioctl (2).
+The correct syntax is:
+.PP
+.RS
+.nf
+.BI int " value";
+.IB error " = ioctl(" tcp_socket ", " ioctl_type ", &" value ");"
+.fi
+.RE
+.TP
+.BR FIONREAD " (" SIOCINQ )
+Gets a pointer to an integer as argument. Returns the size of the next
+pending datagram in the integer in bytes, or 0 when no datagram is pending.
+.TP
+.BR TIOCOUTQ " (" SIOCOUTQ )
+Returns the number of data bytes in the local send queue. Only supported
+with Linux 2.4 and above.
+.PP
+In addition all ioctls documented in
+.BR ip (7)
+and
+.BR socket (7)
+are supported.
+.SH ERRORS
+All errors documented for
+.BR socket (7)
+or
+.BR ip (7)
+may be returned by a send or receive on a UDP socket.
+
+.B ECONNREFUSED
+No receiver was associated with the destination address. This might be
+caused by a previous packet sent over the socket.
+
+.SH VERSIONS
+IP_RECVERR is a new feature in Linux 2.2.
+
+.SH CREDITS
+This man page was written by Andi Kleen.
+
+.SH "SEE ALSO"
+.BR ip (7),
+.BR raw (7),
+.BR socket (7)
+
+RFC768 for the User Datagram Protocol.
+.br
+RFC1122 for the host requirements.
+.br
+RFC1191 for a description of path MTU discovery.