Provided by: manpages-es_1.55-9_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.