udp - User Datagram Protocol for IPv4


SYNOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>
       udp_socket = socket(PF_INET, SOCK_DGRAM, 0);


DESCRIPTION

       This  is  an  implemention  of  the User Datagram Protocol
       described in RFC768. It implements a connectionless, unre­
       liable  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  immedi­
       ately  using sendto(2) or sendmsg(2) with a valid destina­
       tion address as an argument.  When connect(2) is called on
       the  socket  the  default  destination  address is set and
       datagrams can now be sent using send(2) or write(2)  with­
       out specifying an destination address.  It is still possi­
       ble to send to other destinations by passing an address to
       sendto(2)  or sendmsg(2).  In order to receive packets the
       socket can be bound to an local  address  first  by  using
       bind(2).   Otherwise  the  socket layer will automatically
       assign a free local port  out  of  the  range  defined  by
       net.ipv4.ip_local_port_range   and   bind  the  socket  to
       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  trun­
       cated  and  the MSG_TRUNC flag is set.  MSG_WAITALL is not
       supported.

       IP options may  be  sent  or  received  using  the  socket
       options  described  in  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
       ip(7).

       When the MSG_DONTROUTE flag is set on sending the destina­
       tion  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 IP_PMTU_DISCOVER section of ip(7).


ADDRESS FORMAT

       UDP  uses the IPv4 sockaddr_in address format described in



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 RFC1122.

       For  compatibility  with legacy code it is possible to set
       the  SO_BSDCOMPAT  SOL_SOCKET  option  to  receive  remote
       errors only when the socket has been connected (except for
       EPROTO and 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 IP_RECVERR  option  is  enabled  all  errors  are
       stored  in  the  socket error queue and can be received by
       recvmsg(2) with the MSG_ERRQUEUE flag set.


IOCTLS

       These ioctls can be accessed using ioctl(2).  The  correct
       syntax is:

              int value;
              error = ioctl(tcp_socket, ioctl_type, &value);

       SIOCINQ
              Gets  a  pointer to an integer as argument. Returns
              the size of the next pending datagram in the  inte­
              ger in bytes, or 0 when no datagram is pending.

       SIOCOUTQ
              Returns  the number of data bytes in the local send
              queue. Only supported with Linux 2.4 and above.

       In addition all ioctls documented in ip(7)  and  socket(7)
       are supported.


ERRORS

       All  errors  documented  for  socket(7)  or  ip(7)  may be
       returned by a send or receive on a UDP socket.

       ECONNREFUSED No receiver was associated with the  destina­
       tion  address.   This might be caused by a previous packet
       sent over the socket.


VERSIONS

       IP_RECVERR is a new feature in Linux 2.2

       This man page was written by Andi Kleen.


SEE ALSO

       ip(7), socket(7), raw(7)

       RFC768 for the User Datagram protocol.
       RFC1122 for the host requirements.
       RFC1191 for a description of path MTU discovery.


Man(1) output converted with man2html