bionic (7) udp.7.gz

Provided by: manpages-es_1.55-10_all bug

NOMBRE

       udp - Protocolo UDP sobre IPv4.

SINOPSIS

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

DESCRIPCIÓN

       Ésta  es  una implementación del protocolo UDP (User Datagram Protocol) descrito en RFC768. Implementa un
       servicio de paquetes de datagramas no fiable y sin  conexión.  Los  paquetes  pueden  ser  reordenados  o
       duplicados  antes  de que lleguen. UDP genera y comprueba sumas de verificación (checksums) para detectar
       errores de transmisión.

       Cuando se crea un conector (socket) UDP, sus direcciones local y remota están sin especificar. Se  pueden
       enviar  datagramas  inmediatamente usando sendto(2) o sendmsg(2) con una dirección de destino válida como
       argumento. Cuando se llama a connect(2) sobre el conector, se envía la dirección de destino por defecto y
       a  partir  de  ese  momento  se  pueden  enviar  datagramas usando send(2) o write(2) sin especificar una
       dirección de destino.  Todavía es posible realizar envíos  a  otros  destinos  pasando  una  dirección  a
       sendto(2)  o  sendmsg(2).  Para poder recibir paquetes, se debe ligar primero el conector a una dirección
       local usando bind(2).  De otra manera la capa de conector asignará automáticamente un puerto local  libre
       fuera del rango definido por net.ipv4.ip_local_port_range y ligará el conector a INADDR_ANY.

       Todas  las  operaciones  de  recepción sólo devuelven un paquete. Cuando el paquete es más pequeño que el
       buffer pasado, sólo se devuelven los datos del paquete y, cuando es mayor, el  paquete  se  trunca  y  la
       bandera MSG_TRUNC se activa.  MSG_WAITALL no está soportada.

       Se  pueden  enviar o recibir opciones IP usando las opciones de conectores descritas en ip(7).  Estas son
       procesadas por el núcleo sólo cuando está activa la sysctl adecuada (pero todavía  se  pasan  al  usuario
       incluso cuando está desactivada). Vea ip(7).

       Cuando  en  un  envío  está  activa  la opción MSG_DONTROUTE, la dirección de destino debe referirse a la
       dirección de una interfaz local y el paquete sólo se envía a esa interfaz.

       UDP fragmenta un paquete cuando su longitud total excede la MTU (Unidad  de  Transmisión  Máxima)  de  la
       interfaz.  Una  alternativa  de  red  más amigable es usar el descubrimiento de la MTU de la ruta como se
       describe en la sección IP_PMTU_DISCOVER de ip(7).

FORMATO DE DIRECCIÓN

       UDP usa el formato de dirección sockaddr_in de IPv4 descrito en ip(7).

MANEJO DE ERRORES

       Todos los errores fatales serán pasados al usuario como un resultado de error incluso cuando el  conector
       no  esté  conectado. Ésto incluye errores asíncronos recibidos de la red. Puede obtenerse un error por un
       paquete anterior que fue enviado por el mismo conector.  Este  comportamiento  difiere  de  muchas  otras
       implementaciones de conectores BSD que no pasan ningún error al menos que el conector esté conectado.  El
       comportamiento de Linux viene mandado por el RFC1122.

       Por compatibilidad con código anterior es posible activar  la  opción  SO_BSDCOMPAT  de  SOL_SOCKET  para
       recibir  errores  remotos  (excepto EPROTO y EMSGSIZE) sólo cuando el conector se ha conectado.  Es mejor
       arreglar el código para manejar adecuadamente  los  errores  que  habilitar  esta  opción.   Los  errores
       generados localmente siempre se pasan.

       Cuando  se activa la opción IP_RECVERR todos los errores se almacenan en la cola de errores de conector y
       se pueden recibir mediante recvmsg(2) con la opción MSG_ERRQUEUE activa.

IOCTLS

       Estos ioctls pueden ser utilizados con ioctl(2).  La sintaxis correcta es:

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

       SIOCINQ
              Recibe un puntero a un entero como argumento. Devuelve el tamaño del siguiente datagrama pendiente
              en el entero en bytes, ó 0 cuando no quedan datagramas pendientes.

       SIOCOUTQ
              Devuelve  el  número  de  bytes de datos en la cola de envío local. Sólo disponible en Linux 2.4 o
              superior.

       Además todos los ioctls documentados en ip(7) y socket(7) están soportados.

ERRORES

       Una operación de enviar o recibir sobre un conector UDP puede devolver  cualquier  error  documentado  en
       socket(7) o ip(7).

       ECONNREFUSED  No  se  ha asociado un receptor a la dirección de destino. Esto podría ser provocado por un
       paquete anterior enviado por el conector.

VERSIONES

       IP_RECVERR es una nueva característica de la versión 2.2 de Linux.

CREDITOS

       Esta página de manual fue escrita por Andi Kleen.

VÉASE TAMBIÉN

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

       RFC768 para el protocolo UDP.
       RFC1122 para los requisitos del anfitrión (host).
       RFC1191 para una descripción del descubrimiento de la MTU de la ruta.