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.

Página man de Linux                               20 abril 2002                                           TCP(7)