bionic (7) ip.7.gz

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

NOMBRE

       ip - Implementación Linux del protocolo IPv4

SINOPSIS

       #include <sys/socket.h>
       #include <netinet/in.h>

       tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
       raw_socket = socket(PF_INET, SOCK_RAW, protocol);
       udp_socket = socket(PF_INET, SOCK_DGRAM, protocol);

DESCRIPCIÓN

       Linux  implementa  el  Protocolo  de  Internet  (Internet  Protocol, IP), version 4, descrito en RFC791 y
       RFC1122.  ip contiene una implementación de multidestino del Nivel 2 según el RFC1112.  También  contiene
       un enrutador IP incluyendo un filtro de paquetes.

       La  interfaz  del  programador  es  compatible  con  la de los conectores BSD. Para más información sobre
       conectores, vea socket(7).

       Un conector IP se crea  llamando  a  la  función  socket(2)  de  la  forma  socket(PF_INET,  socket_type,
       protocol).   Los  tipos  de  conectores válidos son SOCK_STREAM para abrir un conector tcp(7), SOCK_DGRAM
       para abrir un conector udp(7) o SOCK_RAW para abrir  un  conector  directo  (  raw(7))  para  acceder  al
       protocolo  IP directamente.  protocol es el protocolo IP en la cabecera IP a enviar o recibir. Los únicos
       valores válidos para protocol son 0 y IPPROTO_TCP para conectores TCP, y 0 y IPPROTO_UDP para  conectores
       UDP.  Para  SOCK_RAW  debe  especificar  un  protocolo IP válido del IANA definido por uno de los números
       asignados en el RFC1700.

       Cuando un proceso quiere recibir nuevos paquetes de entrada o conexiones, debe enlazar un conector a  una
       dirección  de  la interfaz local usando bind(2).  Sólo se puede ligar un conector IP a un par (dirección,
       puerto) dado.  Cuando en la llamada a bind se especifica INADDR_ANY, el conector será ligado a todas  las
       interfaces  locales.  Cuando  se  llama a listen(2) o connect(2) con un conector no enlazado, el conector
       será automáticamente ligado a un puerto  aleatorio  libre  cuya  dirección  local  sea  INADDR_ANY.   Una
       dirección  local  de  conector  TCP que haya sido enlazada, no estará disponible durante un cierto tiempo
       después de que se cierre, a menos que se haya activado la opción SO_REUSEADDR.  Se debe tener cuidado  al
       usar esta opción ya que hace que TCP sea menos fiable.

FORMATO DE LAS DIRECCIONES

       Una  dirección  de conector IP se define como una combinación de una dirección de interfaz IP y un número
       de puerto. El protocolo IP  básico  no  proporciona  números  de  puerto.  Estos  son  implementados  por
       protocolos  de  un  nivel  más  alto  como udp(7) y tcp(7).  En los conectores directos, a sin_port se le
       asigna el protocolo IP.

              struct sockaddr_in {
                  sa_family_t    sin_family; /* familia de direcciones:
                                                AF_INET */
                  u_int16_t      sin_port;   /* puerto con los bytes en el
                                                orden de red */
                  struct in_addr  sin_addr;  /* dirección de Internet */
              };

              /* Dirección de Internet. */
              struct in_addr {
                  u_int32_t      s_addr;     /* dirección con los bytes en
                                                el orden de red */
              };

       A sin_family siempre se le asigna el valor AF_INET.  Este valor es necesario. En Linux 2.2, la mayoría de
       las  funciones  de red devuelven EINVAL cuando se ha omitido este valor.  sin_port contiene el puerto con
       los bytes en orden de red. Los números de puerto por debajo de 1024 se llaman puertos  reservados.   Sólo
       los  procesos con identificador de usuario efectivo 0 o la capacidad CAP_NET_BIND_SERVICE pueden realizar
       enlaces mediante bind(2) a estos conectores. Dese cuenta que el protocolo IPv4 puro no posee como tal  el
       concepto de puerto. Estos son implementados por protocolos superiores como tcp(7) y udp(7).

       sin_addr  es  la  dirección  IP  del  anfitrión  (host).  El miembro s_addr de struct in_addr contiene la
       dirección de la interfaz del anfitrión con los bytes en orden de red.  Sólo se debería acceder a  in_addr
       usando las funciones de biblioteca inet_aton(3), inet_addr(3) y inet_makeaddr(3), o directamente mediante
       el mecanismo de resolución de nombres  (vea  gethostbyname(3)).   Las  direcciones  IPv4  se  dividen  en
       direcciones  unidestino,  de  difusión  y  multidestino. Las direcciones unidestino especifican una única
       interfaz de un anfitrión, las direcciones de difusión especifican todos los anfitriones de una red y  las
       direcciones  multidestino  identifican  a  todos los anfitriones de un grupo multidestino. Sólo se pueden
       enviar datagramas a o recibir datagramas de direcciones de difusión  cuando  está  activa  la  opción  de
       conector  SO_BROADCAST.   En  la  implementación actual, los conectores orientados a conexión sólo pueden
       usar direcciones unidestino.

       Dese cuenta que la dirección y el puerto se almacenan siempre  en  orden  de  red.  En  particular,  esto
       significa  que necesita llamar a htons(3) con el número que se ha asignado al puerto. Todas las funciones
       de manipulación de dirección/puerto en la biblioteca estándar trabajan en orden de red.

       Existen varias direcciones especiales: INADDR_LOOPBACK (127.0.0.1) siempre se refiere al ordenador  local
       a  través  del  dispositvo  `loopback'.  INADDR_ANY (0.0.0.0) significa cualquier dirección para enlazar.
       INADDR_BROADCAST (255.255.255.255) significa cualquier ordenador y,  por  razones  históricas,  tiene  el
       mismo efecto en el enlace que INADDR_ANY.

OPCIONES DE LOS CONECTORES

       IP  soporta  algunas  opciones  de  conector  específicas  del  protocolo  que  se  pueden configurar con
       setsockopt(2) y leer con getsockopt(2).  El nivel de opciones de conector para IP es SOL_IP.  Una  opción
       entera booleana es cero cuando es falsa y cualquier otra cosa cuando es cierta.

       IP_OPTIONS
              Establece  u obtiene las opciones IP a enviar con cada paquete desde este conector. Los argumentos
              son punteros a un buffer de memoria que contiene las opciones y la longitud de las  opciones.   La
              llamada  setsockopt(2)  establece  las  opciones  IP  asociadas a un conector. El tamaño máximo de
              opción para IPv4 es de 40 bytes. Vea RFC791 para  las  opciones  permitidas.   Cuando  el  paquete
              inicial de petición de conexión para un conector SOCK_STREAM contiene opciones IP, las opciones IP
              se configurarán automáticamente al valor de las opciónes del paquete inicial con las cabeceras  de
              enrutamiento invertidas. No se permite que los paquetes de entrada cambien las opciones después de
              que la conexión se haya establecido.  El procesamiento de todas las opciones de enrutamiento de la
              fuente   de   entrada   está  desactivado  por  defecto  y  se  puede  activar  usando  la  sysctl
              accept_source_route.  Otras opciones, como las marcas de tiempo, todavía se siguen manejando. Para
              los  conectores  de datagramas, las opciones IP sólo pueden ser configuradas por el usuario local.
              Llamar a getsockopt(2) con IP_OPTIONS coloca en el buffer proporcionado las opciones  IP  actuales
              usadas para enviar.

       IP_PKTINFO
              Pasa  un  mensaje  auxiliar  IP_PKTINFO que contiene una estructura pktinfo que proporciona alguna
              información sobre los paquetes de  entrada.  Esto  sólo  funciona  para  conectores  orientados  a
              datagramas.   El  argumento  es  un  indicador que le dice al conector si debería pasar el mensaje
              IP_PKTINFO. El mensaje en sí mismo sólo puede ser enviado/obtenido como un mensaje de control  con
              un paquete usando recvmsg(2) o sendmsg(2).

              struct in_pktinfo {
                  unsigned int   ipi_ifindex;  /* Índice de la interfaz */
                  struct in_addr ipi_spec_dst; /* Dirección local */
                  struct in_addr ipi_addr;     /* Dirección de destino en la
                                                  cabecera */
              };

              ipi_ifindex  es  el  índice  de  la  interfaz en la que se recibió el paquete.  ipi_spec_dst es la
              dirección local del paquete y ipi_addr es la dirección de destino en la cabecera del paquete.   Si
              se  pasa  IP_PKTINFO  a  sendmsg(2),  el  paquete  de  salida  se  enviará a través de la interfaz
              especificada en ipi_ifindex con la dirección de destino indicada en ipi_spec_dst.

       IP_RECVTOS
              Cuando está activa, se pasa el mensaje auxiliar IP_TOS con los paquetes de  entrada.  Contiene  un
              byte  que especifica el campo Tipo de Servicio/Precedencia de la cabecera del paquete.  Espera una
              opción entera booleana.

       IP_RECVTTL
              Cuando esta opción está activa, pasa un mensaje de control IP_RECVTTL  con  el  campo  "tiempo  de
              vida"  (time  to  live)  del  paquete  recibido  dado  por  un  byte.  No soportada por conectores
              SOCK_STREAM.

       IP_RECVOPTS
              Pasa todas las opciones IP de entrada al usuario en un mensaje de control IP_OPTIONS.  La cabecera
              de  enrutamiento y otras opciones ya las completa el anfitrión local. No soportada para conectores
              SOCK_STREAM.

       IP_RETOPTS
              Identica a IP_RECVOPTS pero devuelve opciones directas sin  procesar  cuyas  marcas  de  tiempo  y
              opciones del registro de ruta no son completadas por este anfitrión.

       IP_TOS Establece o devuelve el campo Tipo de Servicio (Type-Of-Service, TOS) a enviar con cada paquete IP
              creado desde este conector. Se usa para priorizar los paquetes en la red. TOS es un byte.  Existen
              algunas  opciones TOS estándares definidas: IPTOS_LOWDELAY para minizar los retrasos en el caso de
              tráfico interactivo,  IPTOS_THROUGHPUT  para  optimizar  el  rendimiento,  IPTOS_RELIABILITY  para
              optimizar  la  fiabilidad  e  IPTOS_MINCOST,  que se debería usar para "datos de relleno" donde no
              tenga sentido una transmisión lenta. Como mucho, se puede especificar uno de  estos  valores  TOS.
              Los  otros  bits  son  inválidos  y  se  limpiarán.   Por  defecto, Linux envía primero datagramas
              IPTOS_LOWDELAY pero el comportamiento exacto depende de la disciplina de encolamiento configurada.
              Algunos  niveles  de  prioridad  alta pueden necesitar un identificador de usuario efectivo 0 o la
              capacidad CAP_NET_ADMIN.  La prioridad también se puede configurar de una manera independiente del
              protocolo mediante la opción de conector ( SOL_SOCKET, SO_PRIORITY) (vea socket(7)).

       IP_TTL Establece  u  obtiene  el campo "tiempo de vida" actual que se envía en cada paquete enviado desde
              este conector.

       IP_HDRINCL
              Cuando está activa, el usuario proporciona una cabecera IP delante de los datos de  usuario.  Sólo
              válida  para conectores SOCK_RAW.  Vea raw(7) para más información. Cuando esta opción está activa
              los valores configurados mediante IP_OPTIONS, IP_TTL y IP_TOS se ignoran.

       IP_RECVERR (definido en <linux/errqueue.h>)
              Habilita el paso adicional fiable de mensajes de  error.  Cuando  se  activa  en  un  conector  de
              datagramas todos los errores generados se encolarán en una cola de errores por conector. Cuando el
              usuario recibe un errore procedente de una operación con un conector, se pueden recibir el  errore
              llamando  a  recvmsg(2)  con  la  opción  MSG_ERRQUEUE activa. La estructura sock_extended_err que
              describe el error se pasará en un mensaje auxiliar con el tipo IP_RECVERR y el nivel SOL_IP.  Esto
              es  útil para el manejo fiable de errores en conectores no conectados.  La parte de datos recibida
              de la cola de errores contiene el paquete de error.

              El mensaje de control IP_RECVERR contiene una estructura sock_extended_err:

              #define SO_EE_ORIGIN_NONE       0
              #define SO_EE_ORIGIN_LOCAL      1
              #define SO_EE_ORIGIN_ICMP       2
              #define SO_EE_ORIGIN_ICMP6      3

              struct sock_extended_err {
                  u_int32_t       ee_errno;   /* número de error */
                  u_int8_t        ee_origin;  /* dónde se originó el error */
                  u_int8_t        ee_type;    /* tipo */
                  u_int8_t        ee_code;    /* código */
                  u_int8_t        ee_pad;
                  u_int32_t       ee_info;    /* información adicional */
                  u_int32_t       ee_data;    /* otros datos */
                  /* More data may follow */
              };

              struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);

              ee_errno contiene el número de error del error puesto en cola.  ee_origin es el código  de  origen
              que  identifica  al  origen  del  error.  Los otros campos son específicos del protocolo. La macro
              SO_EE_OFFENDER devuelve un puntero a la dirección del objeto de red dónde se originó el error dado
              un  puntero al mensaje auxiliar.  Si la dirección no es conocida, el miembro sa_family de sockaddr
              valdrá AF_UNSPEC y los otros campos de sockaddr serán indefinidos.

              IP  usa  la  estructura  sock_extended_err  como  sigue:  a  ee_origin  se  le  asigna  el   valor
              SO_EE_ORIGIN_ICMP  para  errores  recibidos  en  un paquete ICMP o SO_EE_ORIGIN_LOCAL para errores
              generados localmente. Los valores desconocidos deben ser ignorados.  A ee_type y  ee_code  se  les
              asignan  los  campos  tipo y código de la cabecera ICMP.  ee_info contiene la MTU descubierta para
              errores EMSGSIZE.  El mensaje contiene también la estructura sockaddr_in del nodo que  provocó  el
              error,  a  la  cual  se  puede  acceder  con  la  macro SO_EE_OFFENDER.  El campo sin_family de la
              dirección devuelta por SO_EE_OFFENDER valdrá AF_UNSPEC cuando la fuente sea  desconocida.   Cuando
              el  error  se  originó  en  la red, todas las opciones IP (IP_OPTIONS, IP_TTL, etc.) activas en el
              conector y contenidas en el paquete de error, se pasan como mensajes de control. El contenido útil
              del paquete que ha provocado el error se devuelve como datos normales.

              Dese  cuenta  que  TCP  no  posee  una  cola  de  errores.   MSG_ERRQUEUE  es ilegal en conectores
              SOCK_STREAM.  Por tanto, todos los errores son devueltos sólo por funciones de conector o mediante
              SO_ERROR.

              Para conectores directos (raw), IP_RECVERR activa el paso de todos los errores ICMP recibidos a la
              aplicación. En otro caso, sólo se informa de los errores que se producen en conectores conectados.

              Esta opción  establece  u  obtiene  un  valor  booleano  entero.   Por  defecto,  IP_RECVERR  está
              desactivada.

       IP_PMTU_DISCOVER
              Establece  o  recibe  la configuración del "descubrimiento de la MTU de la ruta" para el conector.
              Cuando se activa, Linux realizará el descubrimiento de la MTU de la ruta en este  conector  tal  y
              como  se  define  en  RFC1191.  La  opción de "no fragmentar" se activa en todos los datagramas de
              salida. El valor global por defecto del sistema se controla  mediante  la  sysctl  ip_no_pmtu_disc
              para  los  conectores  SOCK_STREAM y para todos los demás está desactivado. Para conectores que no
              son SOCK_STREAM es responsabilidad del usuario enpaquetar los datos en  trozos  de  tamaño  MTU  y
              realizar  la  retransmisión  si  es  necesario. El núcleo rechazará aquellos paquetes que sean más
              grandes que la MTU de ruta conocida si esta opción está activa (con EMSGSIZE ).

              Opciones del descubrimiento de la MTU   Significado
              de la ruta
              IP_PMTUDISC_WANT                        Usar configuraciones por ruta.
              IP_PMTUDISC_DONT                        Nunca  realizar  el descubrimiento de
                                                      la MTU de la ruta.
              IP_PMTUDISC_DO                          Realizar siempre el descubrimiento de
                                                      la MTU de la ruta.

              Cuando se activa el descubrimiento de la MTU de la ruta, el núcleo automáticamente memoriza la MTU
              de la ruta por anfitrión de destino.  Cuando se está conectado a un  extremo  específico  mediante
              connect(2),  se  puede  obtener  convenientemente la MTU de la ruta conocida actualmente usando la
              opción de conector IP_MTU (por ejemplo, después de que haya ocurrido un error EMSGSIZE).   La  MTU
              puede cambiar con el tiempo. Para conectores no orientados a conexión con muchos destinos, también
              se puede acceder a la nueva MTU usando la cola de errores (vea IP_RECVERR).  Se encolará un  nuevo
              error para cada actualización que llegue de la MTU.

              Mientras  se  está  realizando el descubrimiento de la MTU, se pueden perder paquetes iniciales de
              los conectores de datagramas. Las aplicaciones que usan UDP deben se  conscientes  de  esto  y  no
              tenerlo en cuenta para sus estrategias de retransmisión de paquetes.

              Para  iniciar  el  proceso  de  descubrimiento  de la MTU de la ruta en conectores no orientados a
              conexión, es posible comenzar con un tamaño grande de datagramas (con logitudes de bytes de  hasta
              64KB en las cabeceras) y dejar que se reduzca mediante actualizaciones de la MTU de la ruta.

              Para  obtener una estimación inicial de la MTU de la ruta, conecte un conector de datagramas a una
              dirección de destino usando connect(2) y obtenga la MTU llamando a  getsockopt(2)  con  la  opción
              IP_MTU.

       IP_MTU Obtiene  la  MTU  de  la  ruta conocida actualmente para el conector actual. Sólo válida cuando el
              conector ha sido conectado. Devuelve un entero.  Sólo válida para getsockopt(2).

       IP_ROUTER_ALERT
              Pasar a este conector todos los paquetes "a reenviar" que tengan  activa  la  opción  "alarma  del
              enrutador IP" (IP Router Alert).  Sólo válida para conectores directos. Esto es útil, por ejemplo,
              para demonios RSVP en el espacio de usuario. Los paquetes interceptados no son reenviados  por  el
              núcleo,  es responsabilidad de los usuarios envilarlos de nuevo. Se ignora el enlace del conector,
              tales paquetes sólo son filtrados por el protocolo. Espera una opción entera.

       IP_MULTICAST_TTL
              Establece o lee el valor "tiempo de vida" (time-to-live, TTL)  de  los  paquetes  multidestino  de
              salida  para  este  conector. Es muy importante para los paquetes multidestino utilizar el TTL más
              pequeño posible. El valor por defecto es 1 lo que  significa  que  los  paquetes  multidestino  no
              abandonarán  la  red  local  a  menos  que  el  programa de usuario lo solicite explícitamente. El
              argumento es un entero.

       IP_MULTICAST_LOOP
              Establece o lee un argumento entero booleano que indica  si  los  paquetes  multidestino  enviados
              deben o no ser devueltos a los conectores locales.

       IP_ADD_MEMBERSHIP
              Unirse a un grupo multidestino. El argumento es una estructura struct ip_mreqn.

              struct ip_mreqn {
                  struct in_addr imr_multiaddr; /* Dirección IP del grupo
                                                   multidestino */
                  struct in_addr imr_address;   /* Dirección IP de la
                                                   interfaz local */
                  int            imr_ifindex;   /* Índice de la interfaz */
              };

              imr_multiaddr  contiene  la dirección del grupo multidestino al que la aplicación se quiere unir o
              quiere dejar. Debe ser una dirección multidestino válida.   imr_address  es  la  dirección  de  la
              interfaz  local  con la que el sistema debe unirse al grupo multidestino. Si es igual a INADDR_ANY
              el sistema elige una interfaz adecuada.  imr_ifindex es el índice de la interfaz que debe unirse a
              o dejar el grupo imr_multiaddr, o 0 para indicar cualquier interfaz.

              Por compatibilidad, todavía se soporta la antigua estructura ip_mreq.  Difiere de ip_mreqn sólo en
              que no incluye el campo imr_ifindex.  Ésta opción sólo es válida para setsockopt(2).

       IP_DROP_MEMBERSHIP
              Dejar un grupo multidestino. El argumento es una estructura ip_mreqn o ip_mreq  similar  a  la  de
              IP_ADD_MEMBERSHIP.

       IP_MULTICAST_IF
              Establece  el  dispositivo  local  para  un  conector multidestino. El argumento es una estructura
              ip_mreqn o ip_mreq similar a la de IP_ADD_MEMBERSHIP.

              Cuando se pasa una opción de conector inválida, se devuelve el error ENOPROTOOPT.

SYSCTLS

       El protocolo IP soporta la interfaz sysctl para configurar algunas opciones globales. Se puede acceder  a
       las sysctls leyendo o escribiendo los ficheros /proc/sys/net/ipv4/* o usando la interfaz sysctl(2).

       ip_default_ttl
              Establece  el  valor  "tiempo  de vida" (TTL) por defecto de los paquetes de salida. Éste se puede
              cambiar para cada conector con la opción IP_TTL.

       ip_forward
              Activa el reenvío IP con una opción booleana. También se puede configurar el reenvío IP interfaz a
              interfaz.

       ip_dynaddr
              Activa  la  reescritura dinámica de la dirección del conector y de las entradas de enmascaramiento
              (masquerading) para cuando cambie la dirección de la interfaz. Esto es útil para interfaces dialup
              (como  las telefónicas) con direcciones IP cambiantes. 0 significa no reescritura, 1 la activa y 2
              activa el modo verboso.

       ip_autoconfig
              No documentado.

       ip_local_port_range
              Contiene dos enteros que definen el intervalo de puertos locales por defecto reservados  para  los
              conectores.  La  reserva  comienza  con el primer número y termina con el segundo. Dése cuenta que
              estos no deben entrar en conflicto con los puertos usados por el enmascaramiento (aunque se  trate
              el  caso).   También,  las elecciones arbitrarias pueden producir problemas con algunos filtros de
              paquetes del cortafuegos que realizan suposiciones sobre los puertos locales  en  uso.  El  primer
              número  debe  ser  al menos >1024, mejor >4096 para evitar conflictos con puertos bien conocidos y
              para minimizar los problemas con el cortafuegos.

       ip_no_pmtu_disc
              Si está activa, por defecto no realiza el descubrimiento de la MTU de la ruta para los  conectores
              TCP.  El  descubrimiento de la MTU de la ruta puede fallar si se encuentran en la ruta cortafuegos
              mal configurados (como los que pierden todos los paquetes ICMP) o interfaces mal configuradas (por
              ejemplo,  un  enlace  punto  a punto en donde ambos extremos no se ponen de acuerdo en la MTU). Es
              mejor arreglar los enrutadores defectuosos de la ruta que desactivar globalmente el descubrimiento
              de la MTU de la ruta ya que el no realizarlo incurre en un alto coste para la red.

       ipfrag_high_thresh, ipfrag_low_thresh
              Si el número de fragmentos IP encolados alcanza el valor ipfrag_high_thresh, la cola se recorta al
              valor ipfrag_low_thresh.  Contiene un entero con el número de bytes.

       ip_always_defrag
              [Nueva con la versión 2.2.13 del núcleo. En anteriores versiones del núcleo la característica  era
              controlada en tiempo de compilación por la opción CONFIG_IP_ALWAYS_DEFRAG]

              Cuanda  esta  opción  booleana se habilita (es distinta de 0) los fragmentos de entrada (partes de
              paquetes IP que aparecen cuando algún anfitrión entre el origen  y  el  destino  decidió  que  los
              paquetes eran demasiado grandes y los dividió en pedazos) se reensamblarán (desfragmentarán) antes
              de ser procesados, incluso aunque vayan a ser reenviados.

              Sólo habilítelo cuando tenga en funcionamiento un cortafuegos que sea el único enlace de su red  o
              un  proxy  transparente.  Nunca  lo  active para un enrutador u ordenador normal. En otro caso, se
              puede perturbar la comunicación fragmentada cuando los fragmentos viajen a  través  de  diferentes
              enlaces. La desfragmentación también tiene un alto coste de tiempo de CPU y de memoria.

              Esto se activa automágicamente cuando se configura un enmascaramiento o un proxy transparente.

       neigh/*
              Vea arp(7).

IOCTLS

       Todas las ioctls descritas en socket(7) se aplican a IP.

       Las ioctls para configurar el cortafuegos se documentan en la página ipfw(7) del paquete ipchains.

       Las ioctls para configurar los parámetros de los dispositivos genéricos se describen en netdevice(7).

OBSERVACIONES

       Tenga mucho cuidado con la opción SO_BROADCAST (no es privilegiada en Linux). Es fácil sobrecargar la red
       realizando difusiones sin tomar precauciones. Para los nuevos protocolos de aplicación es mejor  usar  un
       grupo multidestino que usar la difusión. La difusión no está recomendada.

       Otras  implementaciones de conectores BSD proporcionan las opciones de conector IP_RCVDSTADDR y IP_RECVIF
       para obtener la dirección de destino y la interfaz de los datagramas recibidos. Linux posee la opción más
       general IP_PKTINFO para la misma tarea.

ERRORES

       ENOTCONN
              La operación sólo está definida en conectores conectados, pero el conector no lo está.

       EINVAL Se  ha  pasado  un  argumento  inválido.  Para las operaciones de envío, éste se puede producir al
              enviar a una ruta blackhole.

       EMSGSIZE
              El datagrama es mayor que una MTU de la ruta y no puede ser fragmentado.

       EACCES El usuario ha intentado ejecutar una operación  sin  los  permisos  necesarios.   Estos  incluyen:
              enviar un paquete a una dirección de difusión sin haber activado la opción SO_BROADCAST, enviar un
              paquete a través de una ruta prohibida, modificar la configuración del cortafuegos  sin  tener  la
              capacidad  CAP_NET_ADMIN  ni  un  identificador  de  usuario efectivo 0, y realizar un enlace a un
              puerto reservado sin la capacidad CAP_NET_BIND_SERVICE ni un identificador de usuario efectivo 0.

       EADDRINUSE
              Se ha intentado el enlace a una dirección ya en uso.

       ENOPROTOOPT y EOPNOTSUPP
              Se han pasado una opción de conector inválida.

       EPERM  El usuario no tiene permiso para establecer una prioridad alta, cambiar la configuración o  enviar
              señales al proceso o grupo solicitado.

       EADDRNOTAVAIL
              Se ha solicitado una interfaz inexistente o la dirección fuente solicitada no es local.

       EAGAIN La operación se bloquearía en un conector bloqueante.

       ESOCKTNOSUPPORT
              El conector no está configurado o se ha solicitado un tipo de conector desconocido.

       EISCONN
              Se ha llamado a connect(2) con un conector ya conectado.

       EALREADY
              Ya se está realizando una operación de conexión sobre un conector no bloqueante.

       ECONNABORTED
              Se ha cerrado la conexión durante un accept(2).

       EPIPE  La conexión se ha cerrado inesperadamente o el otro extremo la ha cancelado.

       ENOENT Se ha llamado a SIOCGSTAMP con un conector en donde no ha llegado ningún paquete.

       EHOSTUNREACH
              Ninguna  entrada  válida  de  la  tabla de enrutamiento coincide con la dirección de destino. Este
              error puede ser provocado por un mensaje ICMP procedente de un enrutador remoto  o  por  la  tabla
              local de enrutamiento.

       ENODEV Dispositivo de red no disponible o incapaz de enviar paquetes IP.

       ENOPKG No se ha configurado un subsistema del núcleo.

       ENOBUFS, ENOMEM
              No  hay  suficiente memoria libre. Esto a menudo significa que la reserva de memoria está limitada
              por los límites del búfer de conectores, no  por  la  memoria  del  sistema,  aunque  esto  no  es
              coherente al 100%.

       Los protocolos superpuestos pueden generar otros errores. Vea tcp(7), raw(7), udp(7) y socket(7).

VERSIONES

       IP_PKTINFO,  IP_MTU,  IP_PMTU_DISCOVER,  IP_PKTINFO, IP_RECVERR y IP_ROUTER_ALERT son opciones nuevas del
       núcleo 2.2 de Linux.  También son todas específicas de Linux  y  no  deberían  usarse  en  programas  que
       pretendan ser portables.

       struct ip_mreqn es nueva en Linux 2.2.  Linux 2.0 sólo soportaba ip_mreq.

       Las sysctls se introdujeron en la versión 2.2 de Linux.

COMPATIBILIDAD

       Por  compatibilidad  con  Linux  2.0,  todavía  se soporta la sintáxis obsoleta socket(PF_INET, SOCK_RAW,
       protocol) para abrir un conector de paquetes (packet(7)).  Se recomienda no usar esta sintaxis y  debería
       reemplazarse  por  socket(PF_PACKET, SOCK_RAW, protocol).  La principal diferencia es la nueva estructura
       de direcciones sockaddr_ll para la información genérica de la capa de  enlace  en  lugar  de  la  antigua
       sockaddr_pkt.

FALLOS

       Existen demasiados valores de error inconsistentes.

       No  se  han  descrito  las ioctls para configurar las opciones de interfaz específicas de IP y las tablas
       ARP.

       Algunas versiones de glibc olvidan declarar in_pktinfo.  Actualmente ésto se soluciona copiándolo  en  su
       programa desde esta página de manual.

       Recibir  la dirección de destino original con MSG_ERRQUEUE en msg_name a través de recvmsg(2) no funciona
       bien en algunos núcleos de la serie 2.2.

AUTORES

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

VÉASE TAMBIÉN

       sendmsg(2), recvmsg(2), socket(7), netlink(7), tcp(7), udp(7), raw(7), ipfw(7)

       RFC791 para la especificación IP original.
       RFC1122 para los requerimientos IPv4 para lo anfitriones.
       RFC1812 para los requeremientos IPv4 para los enrutadores.