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

NOMBRE

       tcp - Protocolo TCP.

SINOPSIS

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

DESCRIPCIÓN

       Ésta es una implementación del protocolo TCP definido en RFC793, RFC1122 y RFC2001 con las
       extensiones NewReno y SACK. Proporciona una conexión bidireccional, fiable y  orientada  a
       conexión  entre dos conectores (``sockets'') encima de ip(7), tanto para la versión 4 como
       para la versión 6.  TCP garantiza que los datos llegan en orden y retransmite los paquetes
       perdidos. Genera y comprueba una suma de verificación por paquete para detectar errores de
       transmisión. TCP no conserva los límites entre registros.

       Un conector TCP recién creado no tiene ni dirección remota ni local y no  está  totalmente
       especificado.  Para  crear  una  conexión TCP de salida use connect(2) para establecer una
       conexión con otro conector TCP. Para recibir nuevas conexiones de entrada, primero  enlace
       el  conector  a  una  dirección  local  y puerto mediante bind(2) y a continuación llame a
       listen(2) para colocar el conector en estado de escucha. Después de esto, se puede aceptar
       un  nuevo  conector  para cada conexión de entrada usando accept(2).  Un conector sobre el
       que se han ejecutado con éxito accept o  connect  está  totalmente  especificado  y  puede
       transmitir  datos.  No  se  pueden  transmitir  datos  a través de conectores en estado de
       escucha o no conectados todavía.

       La versión 2.2 de Linux soporta las extensiones RFC1323  para  TCP  de  alto  rendimiento.
       Estas incluyen protección contra la repetición de números de secuencia (PAWS, ``Protection
       Against Wrapped Sequence Numbers''), ampliación de ventana (``Window Scaling'') y fechados
       (``Timestamps'').  La ampliación de ventana permite el uso de grandes ventanas TCP (> 64K)
       para dar soporte a enlaces con una alta latencia o un gran ancho de banda.  Para  usarlas,
       se deben incrementar los tamaños de los buffers de envío y recepción. Se pueden configurar
       globalmente con las variables sysctls net.ipv4.tcp_wmem y net.ipv4.tcp_rmem, o  para  cada
       conector individual mediante las opciones de conector SO_SNDBUF y SO_RCVBUF con la llamada
       setsockopt(2).

       Los tamaños máximos de los buffers de los conectores declarados a través  de  SO_SNDBUF  y
       SO_RCVBUF  están limitados por las sysctls globales net.core.rmem_max y net.core.wmem_max.
       Dese cuenta que TCP realmente asigna dos veces el  tamaño  del  buffer  solicitado  en  la
       llamada  setsockopt(2),  por  lo que una llamada con éxito a getsockopt(2) no devolverá el
       mismo tamaño de buffer que el solicitado en la llamada setsockopt(2).  TCP usa  esto  para
       propósitos  administrativos  y  estructuras  internas  del  núcleo, y las variables sysctl
       reflejan los tamaños mayores comparados con las ventanas TCP actuales. Para las conexiones
       individuales,  el  tamaño del buffer del conector se debe establecer antes de las llamadas
       listen() o connect() para que tenga efecto. Vea socket(7) para más información.

       TCP soporta datos urgentes. Los datos urgentes se usan para indicar al receptor que  algún
       mensaje  importante  es  parte del flujo de datos y que debe ser procesado tan pronto como
       sea posible.  Para enviar datos  urgentes,  especifique  la  opción  MSG_OOB  en  send(2).
       Cuando  se reciben datos urgentes, el núcleo envía una señal SIGURG al proceso lector o al
       proceso o grupo de procesos que han sido configurados para el  conector  usando  la  ioctl
       SIOCSPGRP  o  FIOSETOWN.  Cuando la opción de conector SO_OOBINLINE está activa, los datos
       urgentes se colocan en el flujo normal de datos (y se pueden examinar  mediante  la  ioctl
       SIOCATMARK).   En  otro  caso,  sólo  se pueden recibir cuando se ha configurado la opción
       MSG_OOB en sendmsg(2).

       La versión 2.4 de Linux  introdujo  varios  cambios  para  mejorar  el  rendimiento  y  la
       escalabilidad,  además  de  una  funcionalidad mejorada.  Algunas de estas características
       incluyen soporte para llamadas sendfile(2) sin  copias  internas  de  datos,  Notificación
       Explícita  de Congestión, nueva gestión de conectores TIME_WAIT, opciones ``keep-alive'' y
       soporte para extensiones de SACK Duplicados.

FORMATO DE LAS DIRECCIONES

       TCP está construido encima de IP (vea ip(7)).  Los formatos  de  dirección  definidos  por
       ip(7)  se  aplican  a TCP. TCP sólo soporta comunicaciones punto a punto. La difusión y el
       envío multidestino no están soportados.

SYSCTLS

       Estas variables pueden ser accedidas mediante los ficheros /proc/sys/net/ipv4/* o  con  la
       interfaz  sysctl(2).   Además,  las mayoría de las sysctls de IP también se aplican a TCP.
       Vea ip(7).

       tcp_abort_on_overflow
              Activa el reinicio de conexiones si el servicio que escucha es demasiado lento y es
              incapaz  de continuar y aceptarlas. No está activo por omisión. Significa que si se
              produjera  un  desbordamiento  debido  a  una  ráfaga  de  datos,  la  conexión  se
              recuperará.  Active  esta  opción  «sólo»  si  verdaderamente está seguro de que el
              demonio que escucha no puede ser ajustado para aceptar conexiones más  rápidamente.
              Activar esta opción puede perjudicar a los clientes de su servidor.

       tcp_adv_win_scale
              Considera que el gasto del almacenamiento temporal es bytes/2^tcp_adv_win_scale (si
              tcp_adv_win_scale > 0) o bytes-bytes/2^(-tcp_adv_win_scale) si el valor es <= 0. El
              valor por omisión es 2.

              El  espacio  del buffer de recepción del conector se comparte entre la aplicación y
              el núcleo. TCP mantiene parte del buffer como ventana TCP; éste es el tamaño de  la
              ventana  de  recepción que se comunica al otro extremo. El resto del espacio se usa
              como ``buffer de  aplicación'',  usado  para  aislar  a  la  red  de  latencias  de
              planificación  y  de  la  aplicación.  El  valor 2 por omisión de tcp_adv_win_scale
              implica que el espacio usado para el buffer de aplicación es un cuarto del total.

       tcp_app_win
              Esta variable define cuántos bytes de la ventana TCP se reservan para el gasto  del
              almacenamiento temporal.

              La  cantidad de bytes de la ventana que se reservan para el buffer de la aplicación
              es el máximo de (window/2^tcp_app_win, mss). 0 significa que no se reserva  ninguna
              cantidad. El valor por omisión es 31.

       tcp_dsack
              Activa  el  soporte  para  SACK  Duplicados TCP según se describen en RFC2883. Está
              activo por omisión.

       tcp_ecn
              Activa  la  Notificación  Explícita  de  Congestión   (ECN,   Explicit   Congestion
              Notification),  descrita  en  el  RFC2884.  No está activa por omisión. Cuando está
              activa, se podría ver afectada la conectividad  a  algunos  destinos  debido  a  la
              existencia  a  lo  largo  de  la ruta de enrutadores antiguos con un comportamiento
              defectuoso, los cuales provocarían la pérdida de conexiones.

       tcp_fack
              Activa el soporte para el Reconocimiento Adelantado  (``Forward  Acknowledgement'')
              TCP. Por omisión, está activo.

       tcp_fin_timeout
              Cantidad  de  segundos  a  esperar un paquete FIN final antes de que el conector se
              cierre por la fuerza. Éstas es estrictamente una  violación  de  la  especificación
              TCP, pero se necesita para evitar ataques de denegación de servicio (DoS). El valor
              por omisión en los núcleos 2.4 es 60, por debajo de los 180 segundos de la  versión
              2.2.

       tcp_keepalive_intvl
              Número  de segundos entre dos sondas ``keep-alive'' TCP. El valor por omisión es 75
              segundos.

       tcp_keepalive_probes
              Número máximo de sondas ``keep-alive'' TCP a enviar antes de abandonar y acabar con
              la  conexión si no se obtiene respuesta desde el otro extremo. El valor por omisión
              es 9.

       tcp_keepalive_time
              Número de segundos que una conexión  necesita  estar  inactiva  antes  de  que  TCP
              comience  a  enviar  sondas  ``keep-alive''.  Estas sondas sólo se envían cuando la
              opción de conector SO_KEEPALIVE está activa. El valor por omisión es 7200  segundos
              (2  horas).  Una  conexión  inactiva se termina después de aproximadamente otros 11
              minutos (9 sondas a intervalos de 75 segundos)  cuando  está  activo  el  envío  de
              sondas ``keep-alive''.

              Dese  cuenta  que  los  mecanismos  subyacentes  de seguimiento de conexiones y los
              plazos de tiempo de las aplicaciones pueden ser mucho más pequeños.

       tcp_max_orphans
              Número máximo de conectores TCP huérfanos (no  conectados  a  ningún  manejador  de
              fichero de usuario) que se permiten en el sistema. Cuando se sobrepasa este número,
              la conexión huérfana se reinicia y se muestra un aviso.  Este  límite  existe  sólo
              para  evitar  ataques  DoS  sencillos.  No  se  recomienda reducir este límite. Las
              condiciones de la red podría hacer necesario que incremente el número de  huérfanos
              permitidos, pero dese cuenta que cada huérfano puede gasta hasta ~64K de memoria no
              intercambiable. El valor por omisión inicial  es  igual  al  parámetro  del  núcleo
              NR_FILE. Este valor se ajusta dependiendo de la memoria del sistema.

       tcp_max_syn_backlog
              Número  máximo  de  peticiones de conexión encoladas que todavía no han recibido un
              reconocimiento desde el cliente que se está conectando. Si este número  se  supera,
              el  núcleo  comenzará  a  eliminar  peticiones.  El  valor  por  omisión  de 256 se
              incrementa a 1024 cuando la memoría que hay en el sistema es adecuada o grande  (>=
              128Mb) y se reduce a 128 en aquellos sistemas con muy poca memoria (<= 32Mb). Si se
              necesita incrementar este valor por encima de 1024, se recomienda que se  modifique
              TCP_SYNQ_HSIZE   para  mantener  TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog  y  que  se
              recompile el núcleo.

       tcp_max_tw_buckets
              Número máximo de conectores en el estado TIME_WAIT admitidos por el  sistema.  Este
              límite  existe  sólo  para  evitar  ataques  DoS sencillos. El valor por omisión de
              NR_FILE*2 se ajusta dependiendo de la memoria que  haya  en  el  sistema.  Si  este
              número se supera, se cierra el conector y se muestra una aviso.

       tcp_mem
              Este  es  un vector de 3 enteros: [low, pressure, high].  Estos límites los usa TCP
              para hacer un seguimiento de su uso de memoria. Los valores por omisión se calculan
              durante el arranque a partir de la cantidad de memoria disponible.

              low  -  TCP  no  regula su asignación de memoria cuando el número de páginas que ha
              asignado globalmente está por debajo de este número.

              pressure - cuando la cantidad de memoria asignada por TCP  supera  este  número  de
              páginas,  TCP  modera  su  consumo de memoria. Este estado de presión de memoria se
              termina una vez que el número de páginas asignadas cae por debajo de la marca low.

              high - número máximo de páginas que  TCP  asignará  de  forma  global.  Este  valor
              invalida cualquier otro límite impuesto por el núcleo.

       tcp_orphan_retries
              Número  máximo  de intentos realizados para sondear el otro extremo de una conexión
              que ha sido cerrada por nuestro extremo. El valor por omisión es 8.

       tcp_reordering
              El máximo que un paquete puede ser reorganizado en un flujo de paquetes TCP sin que
              TCP  asuma pérdida de paquetes y sin que se ponga a hacer un lento inicio. El valor
              por omisión es 3. No es aconsejable cambiar este número. Ésta  es  una  métrica  de
              detección  de  reorganización  de  paquetes  diseñada  para  minimizar retrocesos y
              retransmisiones innecesarios provocados por la reorganización de  paquetes  en  una
              conexión.

       tcp_retrans_collapse
              Intentar  enviar  paquetes de tamaño máximo durante las retransmisiones.  Esto está
              activo por defecto.

       tcp_retries1
              Número de  veces  que  TCP  intentará  retransmitir  un  paquete  en  una  conexión
              establecida  normalmente,  sin  el esfuerzo extra de que se involucren las capas de
              red. Una vez se supera este número de retransmisiones, primero hacemos que la  capa
              de  red actualice la ruta si es posible antes de cada nueva retransmisión. El valor
              por omisión es 3, el mínimo especificado en el RFC.

       tcp_retries2
              Número máximo de veces que un paquete TCP se retransmite con estado ``establecido''
              antes  de  abandonarlo. El valor por omisión es 15, que corresponde a una duracción
              de, aproximadamente, entre 13 y 30 minutos, dependiendo del plazo de retransmisión.
              El  límite mínimo de 100 segundos especificado por RFC1122 normalmente se considera
              demasiado pequeño.

       tcp_rfc1337
              Activa el comportamiento TCP que se ajusta al RFC 1337. Esto  no  está  activo  por
              omisión.  Cuando  no  está  activo,  si  se  recibe  un RST en un estado TIME_WAIT,
              cerramos el conector inmediatamente sin esperar el fin del periodo TIME_WAIT.

       tcp_rmem
              Éste es un vector de 3 enteros: [min, default, max]. Estos parámetros los  usa  TCP
              para  regular  los tamaños de los buffers de recepción. TCP ajusta dinámicamente el
              tamaño del buffer de recepción a partir de los valores  por  omisión  listados  más
              abajo,  en el rango de estas variables sysctl, dependiendo de la memoria disponible
              en el sistema.

              min - tamaño mínimo del buffer de recepción usado por cada conector TCP.  El  valor
              por  omisión es 4K y se reduce a PAGE_SIZE bytes en sistemas con poca memoria. Este
              valor se usa para asegurar que, en el modo de presión de memoria, las  asignaciones
              de  memoria  por  debajo  de este tamaño todavía tendrán éxito. Esto no se usa para
              limitar el tamaño  del  buffer  de  recepción  declarado  usando  SO_RCVBUF  en  un
              conector.

              default  -  el tamaño por omisión del buffer de recepción de un conector TCP.  Este
              valor sobrescribe el tamaño por omisión inicial del buffer que viene  dado  por  el
              valor genérico global net.core.rmem_default, definido para todos los protocolos. El
              valor por omisión es de 87380 bytes y se  reduce  a  43689  en  sistemas  con  poca
              memoria.  Si  se  desean  tamaños  de  buffers  de  recepción  mayores,  se debería
              incrementar este valor (para que afecte  a  todos  los  conectores).  Para  que  se
              empleen   ventanas   TCP   grandes,   se   debe   activar   (valor   por   omisión)
              net.ipv4.tcp_window_scaling.

              max - tamaño máximo del buffer de recepción usado  por  cada  conector  TCP.   Este
              valor  no  invalida el valor global net.core.rmem_max.  Esto no se usa para limitar
              el tamaño del buffer de recepción declarado usando SO_RCVBUF sobre un conector.  El
              valor por omisión de 87380*2 bytes se reduce a 87380 en sistemas con poca memoria.

       tcp_sack
              Activa  los  Reconocimientos  Selectivos  TCP  descritos por el RFC2018.  Esto está
              activo por omisión.

       tcp_stdurg
              Activa la interpretación estricta RFC793 del campo puntero-urgente de TCP. El valor
              por  omisión  es usar la interpretación compatible con BSD del puntero urgente, que
              apunta al primer byte tras los datos urgentes. La interpretación  RFC793  es  hacer
              que apunte al último byte de los datos urgentes. Activar esta opción puede conducir
              a problemas de interoperatividad.

       tcp_synack_retries
              Número máximo de veces que se retransmitirá un segmento SYN/ACK para  una  conexión
              TCP pasiva. Este número no debería ser mayor que 255. El valor por omisión es 5.

       tcp_syncookies
              Activa  los  ``syncookies'' TCP. Se debe compilar el núcleo con CONFIG_SYN_COOKIES.
              Envía ``syncookies'' cuando la cola de paquetes syn pendientes de  un  conector  se
              desborda.  Los  ``syncookies''  intentan proteger a un conector de un ataque por la
              llegada en avalancha de paquetes SYN.  Esto se debería usar como último  recurso  o
              nunca. Esto es una violación del protocolo TCP y entra en conflicto con otras áreas
              de TCP como las extensiones TCP. Puede producir problemas  para  clientes  y  nodos
              repetidores. No se recomienda como mecanismo de ajuste para ayudar a servidores muy
              cargados en condiciones de sobrecarga o de mala  configuración.  Para  alternativas
              recomendadas, vea tcp_max_syn_backlog, tcp_synack_retries, tcp_abort_on_overflow.

       tcp_syn_retries
              Número  máximo de veces que se retransmitirán SYNs iniciales para un intento activo
              de conexión TCP. Este valor no debería ser mayor que 255. El valor por  omisión  es
              5, que se corresponde a, aproximadamente, 180 segundos.

       tcp_timestamps
              Activa fechados TCP según el RFC1323. Esto está activo por omisión.

       tcp_tw_recycle
              Activa  el reciclado rápido de conectores TIME-WAIT. No está activo por omisión. No
              se recomienda activar esta opción ya que produce problemas cuando  se  trabaja  con
              NAT (Network Address Translation).

       tcp_window_scaling
              Activa  la  ampliación  de  ventanas  TCP  según  el  RFC1323. Esto está activo por
              omisión. Esta característica permite el uso  de  una  ventana  grande  (>  64K)  en
              conexiones TCP, aunque el otro extremo debería soportarla. Normalmente, el campo de
              16 bit de longitud de ventana en la cabecera TCP limita  el  tamaño  de  ventana  a
              menos  de  64K  bytes.  Si  se  desean  ventanas  mayores,  las aplicaciones pueden
              incrementar el tamaño de sus buffers de conectores  y  se  empleará  la  opción  de
              ampliación de ventanas. Si tcp_window_scaling se desactiva, TCP no negociará el uso
              de la ampliación de ventanas con el otro extremo durante el establecimiento  de  la
              conexión.

       tcp_wmem
              Éste  es  un vector de 3 enteros: [min, default, max]. Estos parámetros los usa TCP
              para regular los tamaños de los buffers  de  envío.  TCP  ajusta  dinámicamente  el
              tamaño  del buffer de envío a partir de los valores por omisión listados más abajo,
              en el rango de estas variables sysctl, dependiendo de la memoria disponible  en  el
              sistema.

              min  -  tamaño mínimo del buffer de envío usado por cada conector TCP. El valor por
              omisión es de 4K bytes. Este valor se usa para asegurar que, en el modo de  presión
              de  memoria,  las asignaciones de memoria por debajo de este tamaño todavía tendrán
              éxito. Esto no se usa para limitar el tamaño del buffer de envío  declarado  usando
              SO_SNDBUF en un conector.

              default  -  el  tamaño por omisión del buffer de envío un conector TCP.  Este valor
              sobrescribe el tamaño por omisión inicial del buffer que viene dado  por  el  valor
              genérico global net.core.wmem_default, definido para todos los protocolos. El valor
              por omisión es de 16K.  Si se desean  tamaños  de  buffers  de  envío  mayores,  se
              debería  incrementar  este valor (para que afecte a todos los conectores). Para que
              se empleen ventanas TCP grandes, se debe activar (valor por  omisión)  la  variable
              sysctl.  net.ipv4.tcp_window_scaling.

              max - tamaño máximo del buffer de envío usado por cada conector TCP.  Este valor no
              invalida el valor global net.core.wmem_max.  Esto no se usa para limitar el  tamaño
              del  buffer  de  envío  declarado usando SO_SNDBUF sobre un conector.  El valor por
              omisión de 128K bytes. Se reduce a 64K dependiendo de la memoria disponible  en  el
              sistema.

OPCIONES DE LOS CONECTORES

       Para  establecer u obtener la opción de un conector TCP, llame a getsockopt(2) para leerla
       o a setsockopt(2) para escribirla, asignando SOL_TCP.  al argumento del nivel  de  opción.
       Además,  la  mayoría  de  las opciones de conector SOL_IP son válidas para conectores TCP.
       Para más información vea ip(7).

       TCP_CORK
              Si se activa, no se envían tramas parciales. Todas las tramas  parciales  encoladas
              se  envían  cuando esta opción se desactiva de nuevo. Es útil para añadir cabeceras
              antes de llamar a sendfile(2) o para optmizar el rendimiento.  Esta  opción  no  se
              puede combinar con TCP_NODELAY.  No debería usar esta opción si desea que su código
              sea transportable.

       TCP_DEFER_ACCEPT
              Permite despertar a un proceso oyente sólo cuando lleguen datos al  conector.  Toma
              un valor entero (segundos). Puede limitar el número máximo de intentos que hará TCP
              para terminar de establecer la conexión. No debería usar esta opción si  desea  que
              su código sea transportable.

       TCP_INFO
              Se  usa  para  recoger  información  sobre  este  conector.  El núcleo devuelve una
              estructura tcp_info como la que se define en el  fichero  /usr/include/linux/tcp.h.
              No debería usar esta opción si desea que su código sea transportable.

       TCP_KEEPCNT
              Número máximo de sondas ``keep-alive'' que TCP debería enviar antes de abandonar la
              conexión.  No debería usar esta opción si desea que su código sea transportable.

       TCP_KEEPIDLE
              Tiempo (en segundos) que la conexión necesita estar ociosa antes de que TCP empiece
              a enviar sondas ``keep-alive'' si la opción de conector SO_KEEPALIVE se ha activado
              en este conector.  No  debería  usar  esta  opción  si  desea  que  su  código  sea
              transportable.

       TCP_KEEPINTVL
              Tiempo  (en  segundos) entre sondas ``keep-alive''.  No debería usar esta opción si
              desea que su código sea transportable.

       TCP_LINGER2
              Tiempo de vida de conectores que han quedado huérfanos en  estado  FIN_WAIT2.  Esta
              opción se puede usar para invalidar la sysctl global del sistema tcp_fin_timeout en
              este conector. No confundir  con  la  opción  SO_LINGER  del  nivel  de  conectores
              (socket(7)).  No debería usar esta opción si desea que su código sea transportable.

       TCP_MAXSEG
              Tamaño  máximo  de  segmento  para los paquetes TCP de salida. Si se establece esta
              opción antes del  establecimiento  de  conexiones,  también  cambia  el  valor  MSS
              anunciado  al otro extremo en el paquete inicial.  Valores mayores que la MTU de la
              interfaz que finalmente se use no tienen efecto. TCP también impondrá  sus  límites
              mínimo y máximo sobre el valor dado.

       TCP_NODELAY
              Si  se  usa,  desactiva  el  algoritmo  de  Nagle. Esto significa que los segmentos
              siempre se envían tan pronto  como  sea  posible,  aunque  sólo  haya  una  pequeña
              cantidad de datos. Cuando no se usa, los datos se almacenan temporalmente hasta que
              haya una cantidad suficiente para ser enviada, evitando así el envío  frecuente  de
              pequeños  paquetes  que ocasiona una pobre utilización de la red. Esta opción no se
              puede usar a la misma vez que la opción TCP_CORK.

       TCP_QUICKACK
              Activa el modo ``quickack'' cuando se pone a 1 y lo desactiva cuando se pone  a  0.
              En  el  modo  ``quickack'',  los reconocimientos se envían inmediatamente, antes de
              retrasarlos si es necesario conforme a un funcionamiento normal de TCP. Esta opción
              no  es  permanente,  sólo  permite  un  cambio  a o desde el modo ``quickack''. Las
              operaciones posteriores del  protocolo  TCP  entrarán/saldrán  otra  vez  del  modo
              ``quickack''  dependiendo  del  procesamiento  interno  del protocolo y de factores
              tales como la expiración de plazos de reconocimientos retrasados y la transferencia
              de datos.  No debería usar esta opción si desea que su código sea transportable.

       TCP_SYNCNT
              Establece  el número de retransmisiones SYN que debe enviar TCP antes de abortar el
              intento de conexión. No puede exceder de 255.  No debería usar esta opción si desea
              que su código sea transportable.

       TCP_WINDOW_CLAMP
              Limita  el  tamaño de la ventana anunciada a este valor. El núcleo impone un tamaño
              mínimo de SOCK_MIN_RCVBUF/2.  No debería usar esta opción si desea  que  su  código
              sea transportable.

IOCTLS

       Estas ioctls pueden ser accedidas usando ioctl(2).  La sintaxis correcta es:

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

       SIOCINQ
              Devuelve  la  cantidad  de  datos encolados sin leer en el buffer de recepción.  El
              argumento es un puntero a un entero. El conector no debe estar en estado LISTEN, de
              lo contrario se devolverá un error (EINVAL).

       SIOCATMARK
              Devuelve  cierto  cuando  el  programa  de  usuario  ya ha recibido todos los datos
              urgentes. Esto se usa junto con SO_OOBINLINE.  El argumento  es  un  puntero  a  un
              entero para el resultado de la comprobación.

       SIOCOUTQ
              Devuelve  la  cantidad  de  datos sin enviar en la cola de envío del conector en el
              puntero a un valor entero pasado. El conector no debe estar en estado LISTEN, de lo
              contrario se devolverá un error (EINVAL).

MANEJO DE ERRORES

       Cuando  se  produce  un  error  de red, TCP intenta reenviar el paquete. Si no tiene éxito
       después de un cierto tiempo, informa o bien de un error ETIMEDOUT o bien del último  error
       recibido sobre esta conexión.

       Algunas  aplicaciones necesitan una notificación más rápida del error. Esto se puede hacer
       con la opción de conector IP_RECVERR del nivel SOL_IP.   Cuando  se  activa  esta  opción,
       todos  los  errores  de entrada son pasado inmediatamente al programa de usuario. Use esta
       opción con cuidado (hace que TCP sea menos tolerante a cambios de enrutamiento y  a  otras
       condiciones de red normales).

OBSERVACIONES

       Cuando  se  produce  un  error,  al  configurar  una  conexión, durante la escritura en un
       conector, sólo se produce una señal SIGPIPE cuando  está  activa  la  opción  de  conector
       SO_KEEPALIVE.

       TCP  no  posee  verdaderos  datos  fuera  de  orden,  posee  datos urgentes. En Linux esto
       significa que si el otro extremo envía datos fuera  de  orden  recientes,  los  anteriores
       datos  urgentes se insertarán como datos normales en el flujo (incluso cuando SO_OOBINLINE
       no está activa). Esto difiere de las pilas de protocolo basadas en BSD.

       Linux usa por defecto una interpretación del campo puntero  urgente  compatible  con  BSD.
       Esto  viola  el  RFC1122  pero se necesita por interoperatividad con otras pilas. Se puede
       cambiar con la sysctl tcp_stdurg.

ERRORES

       EPIPE  El otro extremo ha cerrado el conector inesperadamente o se ha intentado leer de un
              conector desconectado.

       ETIMEDOUT
              El otro extremo no ha reconocido los datos retransmitidos después de cierto tiempo.

       EAFNOTSUPPORT
              El tipo de dirección de conector pasado en sin_family no es AF_INET.

       TCP  también  puede  devolver  cualquier  error definido por ip(7) o la capa de conectores
       genéricos.

FALLOS

       No se han documentado todos los errores.
       No se ha descrito IPv6.

VERSIONES

       El soporte para la Notificación Explícita de la Congestión, sendfile sin  copias  internas
       de datos, la reorganización de paquetes y algunas extensiones SACK (DSACK) se introdujo en
       la versión 2.4.  El soporte para el Reconocimiento  Adelantado  (FACK),  el  reciclado  de
       conectores en estado TIME_WAIT, opciones ``keep-alive'' para conexiones individuales y las
       sysctls se introdujo en la versión 2.3.

       Los valores por omisión y las descripciones de la variables sysctl dados  más  arriba  son
       aplicables para la versión 2.4 del núcleo.

AUTORES

       Esta  página  de  manual  fue escrita originariamente por Andi Kleen.  Nivedita Singhvi la
       actualizó  para  la  versión   2.4   de   Linux   con   la   información   del   documento
       Documentation/networking/ip-sysctls.txt de Alexey Kuznetsov.

VÉASE TAMBIÉN

       socket(7),  socket(2),  ip(7),  bind(2),  listen(2),  accept(2),  connect(2),  sendmsg(2),
       recvmsg(2), sendfile(2), sysctl(2), getsockopt(2).

       RFC793 para la especificación de TCP.
       RFC1122 para los requisitos de TCP y una descripción del algoritmo Nagle.
       RFC1323 para las opciones TCP de fechado y de ampliación de ventana.
       RFC1644 para una descripción  de  los  peligros  que  conlleva  el  ``asesinato''  de  los
       conectores TIME_WAIT.
       RFC2481 para una descripción de la Notificación Explícita de la Congestión.
       RFC2581 para los algoritmos TCP de control de la congestión.
       RFC2018 y RFC2883 para SACK y sus extensiones.