Provided by:
manpages-es_1.55-10_all 
NOMBRE
ip - Implementacion 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'ON
Linux implementa el Protocolo de Internet (Internet Protocol, IP),
version 4, descrito en RFC791 y RFC1122. ip contiene una
implementacion de multidestino del Nivel 2 segun el RFC1112. Tambien
contiene un enrutador IP incluyendo un filtro de paquetes.
La interfaz del programador es compatible con la de los conectores BSD.
Para mas informacion sobre conectores, vea socket(7).
Un conector IP se crea llamando a la funcion socket(2) de la forma
socket(PF_INET, socket_type, protocol). Los tipos de conectores
validos 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 unicos valores
validos 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 valido del IANA definido por uno de los numeros asignados
en el RFC1700.
Cuando un proceso quiere recibir nuevos paquetes de entrada o
conexiones, debe enlazar un conector a una direccion de la interfaz
local usando bind(2). Solo se puede ligar un conector IP a un par
(direccion, puerto) dado. Cuando en la llamada a bind se especifica
INADDR_ANY, el conector sera ligado a todas las interfaces locales.
Cuando se llama a listen(2) o connect(2) con un conector no enlazado,
el conector sera automaticamente ligado a un puerto aleatorio libre
cuya direccion local sea INADDR_ANY. Una direccion local de conector
TCP que haya sido enlazada, no estara disponible durante un cierto
tiempo despues de que se cierre, a menos que se haya activado la opcion
SO_REUSEADDR. Se debe tener cuidado al usar esta opcion ya que hace
que TCP sea menos fiable.
FORMATO DE LAS DIRECCIONES
Una direccion de conector IP se define como una combinacion de una
direccion de interfaz IP y un numero de puerto. El protocolo IP basico
no proporciona numeros de puerto. Estos son implementados por
protocolos de un nivel mas 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; /* direccion de Internet */
};
/* Direccion de Internet. */
struct in_addr {
u_int32_t s_addr; /* direccion 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 mayoria 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 numeros de puerto por debajo de 1024
se llaman puertos reservados. Solo 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 direccion IP del anfitrion (host). El miembro s_addr de
struct in_addr contiene la direccion de la interfaz del anfitrion con
los bytes en orden de red. Solo se deberia 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 resolucion de
nombres (vea gethostbyname(3)). Las direcciones IPv4 se dividen en
direcciones unidestino, de difusion y multidestino. Las direcciones
unidestino especifican una unica interfaz de un anfitrion, las
direcciones de difusion especifican todos los anfitriones de una red y
las direcciones multidestino identifican a todos los anfitriones de un
grupo multidestino. Solo se pueden enviar datagramas a o recibir
datagramas de direcciones de difusion cuando esta activa la opcion de
conector SO_BROADCAST. En la implementacion actual, los conectores
orientados a conexion solo pueden usar direcciones unidestino.
Dese cuenta que la direccion y el puerto se almacenan siempre en orden
de red. En particular, esto significa que necesita llamar a htons(3)
con el numero que se ha asignado al puerto. Todas las funciones de
manipulacion de direccion/puerto en la biblioteca estandar trabajan en
orden de red.
Existen varias direcciones especiales: INADDR_LOOPBACK (127.0.0.1)
siempre se refiere al ordenador local a traves del dispositvo
`loopback'. INADDR_ANY (0.0.0.0) significa cualquier direccion para
enlazar. INADDR_BROADCAST (255.255.255.255) significa cualquier
ordenador y, por razones historicas, tiene el mismo efecto en el enlace
que INADDR_ANY.
OPCIONES DE LOS CONECTORES
IP soporta algunas opciones de conector especificas 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 opcion 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 tamano maximo de opcion para IPv4 es de 40
bytes. Vea RFC791 para las opciones permitidas. Cuando el
paquete inicial de peticion de conexion para un conector
SOCK_STREAM contiene opciones IP, las opciones IP se
configuraran automaticamente al valor de las opciones del
paquete inicial con las cabeceras de enrutamiento invertidas. No
se permite que los paquetes de entrada cambien las opciones
despues de que la conexion se haya establecido. El
procesamiento de todas las opciones de enrutamiento de la fuente
de entrada esta desactivado por defecto y se puede activar
usando la sysctl accept_source_route. Otras opciones, como las
marcas de tiempo, todavia se siguen manejando. Para los
conectores de datagramas, las opciones IP solo 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 informacion sobre los paquetes de
entrada. Esto solo funciona para conectores orientados a
datagramas. El argumento es un indicador que le dice al
conector si deberia pasar el mensaje IP_PKTINFO. El mensaje en
si mismo solo 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; /* Indice de la interfaz */
struct in_addr ipi_spec_dst; /* Direccion local */
struct in_addr ipi_addr; /* Direccion de destino en la
cabecera */
};
ipi_ifindex es el indice de la interfaz en la que se recibio el
paquete. ipi_spec_dst es la direccion local del paquete y
ipi_addr es la direccion de destino en la cabecera del paquete.
Si se pasa IP_PKTINFO a sendmsg(2), el paquete de salida se
enviara a traves de la interfaz especificada en ipi_ifindex con
la direccion de destino indicada en ipi_spec_dst.
IP_RECVTOS
Cuando esta 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 opcion entera booleana.
IP_RECVTTL
Cuando esta opcion esta 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 anfitrion 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 anfitrion.
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 estandares definidas:
IPTOS_LOWDELAY para minizar los retrasos en el caso de trafico
interactivo, IPTOS_THROUGHPUT para optimizar el rendimiento,
IPTOS_RELIABILITY para optimizar la fiabilidad e IPTOS_MINCOST,
que se deberia usar para "datos de relleno" donde no tenga
sentido una transmision lenta. Como mucho, se puede especificar
uno de estos valores TOS. Los otros bits son invalidos y se
limpiaran. Por defecto, Linux envia 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 tambien
se puede configurar de una manera independiente del protocolo
mediante la opcion de conector ( SOL_SOCKET, SO_PRIORITY) (vea
socket(7)).
IP_TTL Establece u obtiene el campo "tiempo de vida" actual que se
envia en cada paquete enviado desde este conector.
IP_HDRINCL
Cuando esta activa, el usuario proporciona una cabecera IP
delante de los datos de usuario. Solo valida para conectores
SOCK_RAW. Vea raw(7) para mas informacion. Cuando esta opcion
esta 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 encolaran en una cola de errores por conector.
Cuando el usuario recibe un errore procedente de una operacion
con un conector, se pueden recibir el errore llamando a
recvmsg(2) con la opcion MSG_ERRQUEUE activa. La estructura
sock_extended_err que describe el error se pasara en un mensaje
auxiliar con el tipo IP_RECVERR y el nivel SOL_IP. Esto es util
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; /* numero de error */
u_int8_t ee_origin; /* donde se origino el error */
u_int8_t ee_type; /* tipo */
u_int8_t ee_code; /* codigo */
u_int8_t ee_pad;
u_int32_t ee_info; /* informacion 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 numero de error del error puesto en cola.
ee_origin es el codigo de origen que identifica al origen del
error. Los otros campos son especificos del protocolo. La macro
SO_EE_OFFENDER devuelve un puntero a la direccion del objeto de
red donde se origino el error dado un puntero al mensaje
auxiliar. Si la direccion no es conocida, el miembro sa_family
de sockaddr valdra AF_UNSPEC y los otros campos de sockaddr
seran 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 codigo de la
cabecera ICMP. ee_info contiene la MTU descubierta para errores
EMSGSIZE. El mensaje contiene tambien la estructura sockaddr_in
del nodo que provoco el error, a la cual se puede acceder con la
macro SO_EE_OFFENDER. El campo sin_family de la direccion
devuelta por SO_EE_OFFENDER valdra AF_UNSPEC cuando la fuente
sea desconocida. Cuando el error se origino 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 util 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 solo 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 aplicacion. En otro caso,
solo se informa de los errores que se producen en conectores
conectados.
Esta opcion establece u obtiene un valor booleano entero. Por
defecto, IP_RECVERR esta desactivada.
IP_PMTU_DISCOVER
Establece o recibe la configuracion del "descubrimiento de la
MTU de la ruta" para el conector. Cuando se activa, Linux
realizara el descubrimiento de la MTU de la ruta en este
conector tal y como se define en RFC1191. La opcion 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 demas esta desactivado. Para conectores que no son
SOCK_STREAM es responsabilidad del usuario enpaquetar los datos
en trozos de tamano MTU y realizar la retransmision si es
necesario. El nucleo rechazara aquellos paquetes que sean mas
grandes que la MTU de ruta conocida si esta opcion esta activa
(con EMSGSIZE ).
Opciones del Significado
descubrimiento de la MTU
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
nucleo automaticamente memoriza la MTU de la ruta por anfitrion
de destino. Cuando se esta conectado a un extremo especifico
mediante connect(2), se puede obtener convenientemente la MTU de
la ruta conocida actualmente usando la opcion de conector IP_MTU
(por ejemplo, despues de que haya ocurrido un error EMSGSIZE).
La MTU puede cambiar con el tiempo. Para conectores no
orientados a conexion con muchos destinos, tambien se puede
acceder a la nueva MTU usando la cola de errores (vea
IP_RECVERR). Se encolara un nuevo error para cada actualizacion
que llegue de la MTU.
Mientras se esta 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
retransmision de paquetes.
Para iniciar el proceso de descubrimiento de la MTU de la ruta
en conectores no orientados a conexion, es posible comenzar con
un tamano 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 estimacion inicial de la MTU de la ruta,
conecte un conector de datagramas a una direccion de destino
usando connect(2) y obtenga la MTU llamando a getsockopt(2) con
la opcion IP_MTU.
IP_MTU Obtiene la MTU de la ruta conocida actualmente para el conector
actual. Solo valida cuando el conector ha sido conectado.
Devuelve un entero. Solo valida para getsockopt(2).
IP_ROUTER_ALERT
Pasar a este conector todos los paquetes "a reenviar" que tengan
activa la opcion "alarma del enrutador IP" (IP Router Alert).
Solo valida para conectores directos. Esto es util, por ejemplo,
para demonios RSVP en el espacio de usuario. Los paquetes
interceptados no son reenviados por el nucleo, es
responsabilidad de los usuarios envilarlos de nuevo. Se ignora
el enlace del conector, tales paquetes solo son filtrados por el
protocolo. Espera una opcion 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 mas
pequeno posible. El valor por defecto es 1 lo que significa que
los paquetes multidestino no abandonaran la red local a menos
que el programa de usuario lo solicite explicitamente. 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; /* Direccion IP del grupo
multidestino */
struct in_addr imr_address; /* Direccion IP de la
interfaz local */
int imr_ifindex; /* Indice de la interfaz */
};
imr_multiaddr contiene la direccion del grupo multidestino al
que la aplicacion se quiere unir o quiere dejar. Debe ser una
direccion multidestino valida. imr_address es la direccion 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 indice de la interfaz que
debe unirse a o dejar el grupo imr_multiaddr, o 0 para indicar
cualquier interfaz.
Por compatibilidad, todavia se soporta la antigua estructura
ip_mreq. Difiere de ip_mreqn solo en que no incluye el campo
imr_ifindex. Esta opcion solo es valida 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 opcion de conector invalida, 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. Este se puede cambiar para cada conector con
la opcion IP_TTL.
ip_forward
Activa el reenvio IP con una opcion booleana. Tambien se puede
configurar el reenvio IP interfaz a interfaz.
ip_dynaddr
Activa la reescritura dinamica de la direccion del conector y de
las entradas de enmascaramiento (masquerading) para cuando
cambie la direccion de la interfaz. Esto es util para interfaces
dialup (como las telefonicas) 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 numero y termina con el segundo. Dese cuenta que
estos no deben entrar en conflicto con los puertos usados por el
enmascaramiento (aunque se trate el caso). Tambien, las
elecciones arbitrarias pueden producir problemas con algunos
filtros de paquetes del cortafuegos que realizan suposiciones
sobre los puertos locales en uso. El primer numero 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 esta 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 numero de fragmentos IP encolados alcanza el valor
ipfrag_high_thresh, la cola se recorta al valor
ipfrag_low_thresh. Contiene un entero con el numero de bytes.
ip_always_defrag
[Nueva con la version 2.2.13 del nucleo. En anteriores versiones
del nucleo la caracteristica era controlada en tiempo de
compilacion por la opcion CONFIG_IP_ALWAYS_DEFRAG]
Cuanda esta opcion booleana se habilita (es distinta de 0) los
fragmentos de entrada (partes de paquetes IP que aparecen cuando
algun anfitrion entre el origen y el destino decidio que los
paquetes eran demasiado grandes y los dividio en pedazos) se
reensamblaran (desfragmentaran) antes de ser procesados, incluso
aunque vayan a ser reenviados.
Solo habilitelo cuando tenga en funcionamiento un cortafuegos
que sea el unico enlace de su red o un proxy transparente. Nunca
lo active para un enrutador u ordenador normal. En otro caso, se
puede perturbar la comunicacion fragmentada cuando los
fragmentos viajen a traves de diferentes enlaces. La
desfragmentacion tambien tiene un alto coste de tiempo de CPU y
de memoria.
Esto se activa automagicamente 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 pagina
ipfw(7) del paquete ipchains.
Las ioctls para configurar los parametros de los dispositivos genericos
se describen en netdevice(7).
OBSERVACIONES
Tenga mucho cuidado con la opcion SO_BROADCAST (no es privilegiada en
Linux). Es facil sobrecargar la red realizando difusiones sin tomar
precauciones. Para los nuevos protocolos de aplicacion es mejor usar un
grupo multidestino que usar la difusion. La difusion no esta
recomendada.
Otras implementaciones de conectores BSD proporcionan las opciones de
conector IP_RCVDSTADDR y IP_RECVIF para obtener la direccion de destino
y la interfaz de los datagramas recibidos. Linux posee la opcion mas
general IP_PKTINFO para la misma tarea.
ERRORES
ENOTCONN
La operacion solo esta definida en conectores conectados, pero
el conector no lo esta.
EINVAL Se ha pasado un argumento invalido. Para las operaciones de
envio, este 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 operacion sin los permisos
necesarios. Estos incluyen: enviar un paquete a una direccion
de difusion sin haber activado la opcion SO_BROADCAST, enviar un
paquete a traves de una ruta prohibida, modificar la
configuracion 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 direccion ya en uso.
ENOPROTOOPT y EOPNOTSUPP
Se han pasado una opcion de conector invalida.
EPERM El usuario no tiene permiso para establecer una prioridad alta,
cambiar la configuracion o enviar senales al proceso o grupo
solicitado.
EADDRNOTAVAIL
Se ha solicitado una interfaz inexistente o la direccion fuente
solicitada no es local.
EAGAIN La operacion se bloquearia en un conector bloqueante.
ESOCKTNOSUPPORT
El conector no esta 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 esta realizando una operacion de conexion sobre un
conector no bloqueante.
ECONNABORTED
Se ha cerrado la conexion durante un accept(2).
EPIPE La conexion 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 ningun paquete.
EHOSTUNREACH
Ninguna entrada valida de la tabla de enrutamiento coincide con
la direccion 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 nucleo.
ENOBUFS, ENOMEM
No hay suficiente memoria libre. Esto a menudo significa que la
reserva de memoria esta limitada por los limites del bufer 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 nucleo 2.2 de Linux. Tambien
son todas especificas de Linux y no deberian usarse en programas que
pretendan ser portables.
struct ip_mreqn es nueva en Linux 2.2. Linux 2.0 solo soportaba
ip_mreq.
Las sysctls se introdujeron en la version 2.2 de Linux.
COMPATIBILIDAD
Por compatibilidad con Linux 2.0, todavia se soporta la sintaxis
obsoleta socket(PF_INET, SOCK_RAW, protocol) para abrir un conector de
paquetes (packet(7)). Se recomienda no usar esta sintaxis y deberia
reemplazarse por socket(PF_PACKET, SOCK_RAW, protocol). La principal
diferencia es la nueva estructura de direcciones sockaddr_ll para la
informacion generica 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
especificas de IP y las tablas ARP.
Algunas versiones de glibc olvidan declarar in_pktinfo. Actualmente
esto se soluciona copiandolo en su programa desde esta pagina de
manual.
Recibir la direccion de destino original con MSG_ERRQUEUE en msg_name a
traves de recvmsg(2) no funciona bien en algunos nucleos de la serie
2.2.
AUTORES
Esta pagina de manual fue escrita por Andi Kleen.
V'EASE TAMBI'EN
sendmsg(2), recvmsg(2), socket(7), netlink(7), tcp(7), udp(7), raw(7),
ipfw(7)
RFC791 para la especificacion IP original.
RFC1122 para los requerimientos IPv4 para lo anfitriones.
RFC1812 para los requeremientos IPv4 para los enrutadores.
Pagina man de Linux 19 junio 2001 IP(7)