Provided by: manpages-ru_4.18.1-1_all bug

ИМЯ

       tcp - протокол TCP

СИНТАКСИС

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

       tcp_socket = socket(AF_INET, SOCK_STREAM, 0);

ОПИСАНИЕ

       Эта  реализация  протокола  TCP,  описанного в RFC 793, RFC 1122 и RFC 2001 с расширениями
       NewReno и  SACK.  Данный  протокол  предоставляет  пользователю  надёжное  полнодуплексное
       соединение  двух  сокетов  для  потоковой  передачи  поверх  ip(7)  версий  v4  и  v6. TCP
       гарантирует доставку данных в правильном порядке и повторно передаёт потерявшиеся  пакеты.
       Для  выявления  ошибок  передачи  протоколом  генерируются и проверяются контрольные суммы
       пакетов. TCP не сохраняет границы записей.

       Только что созданный сокет TCP не имеет локального или удалённого  адреса  и  не  является
       полностью  определённым.  Для  создания  исходящего  соединения  TCP  с другим сокетом TCP
       используйте connect(2). Для приёма новых входящих соединений сперва  подключите   сокет  к
       локальному  адресу  и  порту  с  помощью  bind(2), а затем вызовите listen(2) для перевода
       сокета в режим прослушивания.  После  этого  через  новый  сокет  можно  принимать  каждое
       входящее  соединение с помощью accept(2). Сокет, для которого успешно отработали accept(2)
       или connect(2), является полностью определённым и может передавать данные. Данные не могут
       быть переданы через слушающий или ещё не соединённый сокет.

       Linux  поддерживает  высокопроизводительные  расширения TCP RFC 1323. Они включают в себя:
       защиту против оборотной последовательности номеров (PAWS), масштабирование  окна  и  метки
       времени.  Масштабирование  окна  позволяет  использовать  большие  (>  64 КБ) окна TCP для
       поддержки соединений с большой задержкой  или  высокой  пропускной  способностью.  Для  их
       использования  необходимо  увеличить  размеры буферов приёма и передачи. Это можно сделать
       глобально через файлы /proc/sys/net/ipv4/tcp_wmem и /proc/sys/net/ipv4/tcp_rmem,  или  для
       отдельных   сокетов,   используя   параметры   сокетов  SO_SNDBUF  и  SO_RCVBUF  в  вызове
       setsockopt(2).

       Максимальный размер буферов сокета объявляется, используя механизмы SO_SNDBUF и  SO_RCVBUF
       и ограничен значениями в файлах /proc/sys/net/core/rmem_max и /proc/sys/net/core/wmem_max.
       Заметим, что TCP в действительности бронирует в два раза больше места, чем размер  буфера,
       запрошенный  в  вызове setsockopt(2), поэтому последующий вызов getsockopt(2) не возвратит
       тот  же  размер  буфера,  что  был  запрошен  в  вызове  setsockopt(2).   TCP   использует
       дополнительное  пространство  в  административных  целях и для внутренних структур ядра, а
       значения в файлах в /proc отражают большие размеры, по сравнению с действительными  окнами
       TCP.  Для  отдельных  соединений  размер  буфера  сокета  должен быть установлен до вызова
       listen(2) или connect(2). Дополнительную информацию смотрите в socket(7).

       TCP поддерживает срочные данные. Срочные данные используются для  уведомления  принимающей
       стороны  о  том,  что  частью  потока  данных является некоторое важное сообщение, которое
       должно быть обработано как можно скорее. Для  отправки  срочных  данных  укажите  параметр
       MSG_OOB  в  вызове  send(2).  При  поступлении  срочных данных ядро посылает сигнал SIGURG
       процессу  или  группе  процессов,  который  указан  как  «владелец»   сокета   с   помощью
       ioctl-вызовов  SIOCSPGRP  или  FIOSETOWN  (или  с  помощью определённой в POSIX.1 операции
       F_SETOWN для fcntl(2)). Если задан параметр сокета SO_OOBINLINE, то срочные  данные  будут
       помещены  в  обычный  поток  данных  (программа  может  проверить его размещение с помощью
       ioctl-вызова SIOCATMARK, описанного далее), в противном случае они  могут  быть  получены,
       только если для recv(2) или recvmsg(2) установлен флаг MSG_OOB.

       При  наличии  внеполосных  данных  select(2)  помечает  файловый  дескриптор  как  имеющий
       исключительное условие, а poll (2) отмечает это событием POLLPRI.

       В Linux 2.4  представлено  несколько  изменений  по  улучшению  пропускной  способности  и
       масштабирования,  а  также  дополнительные  возможности:  поддержка «нулевого» копирования
       (zero-copy) в sendfile(2), явное  уведомление  о  перегрузке,  новое  управление  сокетами
       TIME_WAIT,  параметры  поддержки  сокетов  в  рабочем  состоянии  и  поддержка  расширений
       Duplicate SACK.

   Форматы адресов
       Протокол TCP построен поверх протокола IP (смотрите ip(7)). Форматы адресов,  определённые
       в  ip(7),  относятся  и  к  TCP.  TCP  поддерживает  только  соединения  типа  точка-точка
       (point-to-point); широковещательная и многоадресная передача не поддерживаются.

   Интерфейс /proc
       Системные  настройки  параметров  TCP  хранятся  в  каталоге  /proc/sys/net/ipv4/.  Также,
       большинство интерфейсов /proc для IP также применимы и к TCP (смотрите ip(7)). Переменные,
       описанные как Boolean, являются целочисленными, где ненулевое  значение  («истина,  true»)
       означает,  что  соответствующий  параметр  включён,  а  нулевое  значение  («ложь, false»)
       означает, что параметр включён.

       tcp_abc (Integer; по умолчанию: 0; в Linux 2.6.15 по Linux 3.8)
              Control the Appropriate Byte Count (ABC), defined in RFC 3465.  ABC  is  a  way  of
              increasing  the  congestion  window  (cwnd)   more  slowly  in  response to partial
              acknowledgements.  Possible values are:

              0      increase cwnd once per acknowledgement (no ABC)

              1      increase cwnd once per acknowledgement of full sized segment

              2      allow increase cwnd  by  two  if  acknowledgement  is  of  two  segments  to
                     compensate for delayed acknowledgements.

       tcp_abort_on_overflow (Boolean;  по умолчанию: выключен; начиная с Linux 2.4)
              Включает  сброс  (resetting)  соединений,  если  слушающий  сервис слишком медленно
              работает и не может поддержать  существующие  или  принять  новые  соединения.  Это
              означает,  что  при  возникновении переполнения из-за всплеска подключений (burst),
              соединение  будет  восстановлено.  Включайте  этот   параметр   только,   если   вы
              действительно  уверены,  что  слушающая  программа  не  может  быть настроена более
              быстрый приём соединений. Включение этого параметра может нарушить работу  клиентов
              вашего сервера.

       tcp_adv_win_scale (integer; по умолчанию: 2; начиная с Linux 2.4)
              Count  buffering  overhead  as  bytes/2^tcp_adv_win_scale,  if tcp_adv_win_scale is
              greater than 0; or bytes-bytes/2^(-tcp_adv_win_scale), if tcp_adv_win_scale is less
              than or equal to zero.

              Пространство  буфера  приёма  сокета  является  общим  для  приложения  и ядра. TCP
              обслуживает часть буфера как окно TCP,  о  размере  этого  окна  приёма  извещается
              другая   сторона.   Остаток   пространства  используется  как  «буфер  приложения»,
              используемый  для  изолирования  сети  от  задержек  планирования  или  приложения.
              Значение  по  умолчанию tcp_adv_win_scale — 2 — означает, что для буфера приложения
              используется четверть всего пространства.

       tcp_allowed_congestion_control (String; по умолчанию: смотрите описание; начиная  с  Linux
       2.4.20)
              Показывает/назначает  алгоритм  управления  перегрузкой  из  списка  доступных  для
              непривилегированных процессов (смотрите описание параметра сокета  TCP_CONGESTION).
              Элементы  списка разделяются пробелом и завершаются символом новой строки. В списке
              содержатся несколько значений из перечисленных в  tcp_available_congestion_control.
              Значением   по   умолчанию   является   «reno»   плюс   значение  по  умолчанию  из
              tcp_congestion_control.

       tcp_autocorking (Boolean; по умолчанию: включено; начиная с Linux 3.14)
              Если тот параметр установлен, то ядро пытается объединить вместе как  можно  больше
              маленьких  частей записываемых данных (от следующих друг за другом вызовов write(2)
              и sendmsg(2)), чтобы уменьшить общее  количество  посылаемых  пакетов.  Объединение
              (coalescing)  выполняется,  если,  как минимум, один предыдущий пакет потока ждёт в
              очередях Qdisc или очереди отправки на  устройство.  Приложения  по-прежнему  могут
              использовать  параметр  сокета TCP_CORK для получения оптимального поведения, когда
              они знают как/когда включать вывод (uncork) из своих сокетов.

       tcp_available_congestion_control (String; только для чтения; начиная с Linux 2.4.20)
              Показывает список зарегистрированных алгоритмов  управления  перегрузкой.  Элементы
              списка   разделяются   пробелом   и   завершаются  символом  новой  строки.  Список
              представляет   собой   сокращённый   набор    из    tcp_allowed_congestion_control.
              Дополнительные алгоритмы управления перегрузкой могут быть доступны в виде модулей,
              но они не загружены.

       tcp_app_win (integer; по умолчанию: 31; начиная с Linux 2.4)
              Эта переменная определяет, сколько байтов окна TCP зарезервировано для  буферизации
              издержек (overhead).

              A  maximum  of (window/2^tcp_app_win, mss) bytes in the window are reserved for the
              application buffer.  A value of 0 implies that no amount is reserved.

       tcp_base_mss (Integer; по умолчанию: 512; начиная с Linux 2.6.17)
              Начальное значение для search_low, которое будет использовано уровнем упаковки  при
              обнаружении  Path MTU (зондирование MTU). Если зондирование (probing) MTU включено,
              то в соединении для этого используется начальное значение MSS.

       tcp_bic (Boolean; default: disabled; Linux 2.4.27/2.6.6 to Linux 2.6.13)
              Включает алгоритм управления перегрузкой BIC TCP. Алгоритм BIC-TCP действует только
              на  стороне  отправляющего, при этом обеспечивается линейная справедливость RTT при
              больших окнах и предлагается масштабируемость и  дружественность  к  TCP.  Протокол
              объединяет  две  схемы,  называемые  аддитивное  увеличение  (additive  increase) и
              увеличение дихотомическим поиском (binary search increase). Когда  окно  перегрузки
              велико,   аддитивное   увеличение   с  большим  приращением  обеспечивает  линейную
              справедливость  RTT,  а  также  хорошую  масштабируемость.  При   маленьких   окнах
              перегрузки, увеличение дихотомическим поиском предоставляет дружественность к TCP.

       tcp_bic_low_window (integer; default: 14; Linux 2.4.27/2.6.6 to Linux 2.6.13)
              Устанавливает  порог  окна  (в  пакетах)  после  которого  запускается  BIC TCP для
              регулировки окна перегрузки. Ниже этого порога BIC TCP действует  как  алгоритм  по
              умолчанию — TCP Reno.

       tcp_bic_fast_convergence (Boolean; default: enabled; Linux 2.4.27/2.6.6 to Linux 2.6.13)
              Заставляет BIC TCP реагировать на изменения окна перегрузки более быстро. Позволяет
              двум потокам сообща использовать одно соединение для более быстрой сходимости.

       tcp_congestion_control (String; по умолчанию: смотрите описание; начиная с Linux 2.4.13)
              Включает  алгоритм  управления  перегрузкой  по  умолчанию  для  новых  соединений.
              Алгоритм  «reno»  доступен  всегда,  но в зависимости от настроек ядра могут быть и
              другие. Значение по умолчанию для этого файла задаётся в настройке ядра.

       tcp_dma_copybreak (integer; по умолчанию: 4096; начиная с Linux 2.6.24)
              Нижний предел (в байтах) на количество читаемых из  сокета  данных,  которое  будет
              снято  из механизма копирования DMA, если он есть в системе и ядро было настроено с
              параметром CONFIG_NET_DMA.

       tcp_dsack (Boolean; по умолчанию: включено; начиная с Linux 2.4)
              Включает поддержку RFC 2883 TCP Duplicate SACK.

       tcp_fastopen (Bitmask; default: 0x1; since Linux 3.7)
              Enables RFC 7413 Fast Open support.   The  flag  is  used  as  a  bitmap  with  the
              following values:

              0x1    Enables client side Fast Open support

              0x2    Enables server side Fast Open support

              0x4    Allows client side to transmit data in SYN without Fast Open option

              0x200  Allows server side to accept SYN data without Fast Open option

              0x400  Enables Fast Open on all listeners without TCP_FASTOPEN socket option

       tcp_fastopen_key (since Linux 3.7)
              Set  server  side  RFC  7413 Fast Open key to generate Fast Open cookie when server
              side Fast Open support is enabled.

       tcp_ecn (Integer; по умолчанию: смотрите далее; начиная с Linux 2.4)
              Включает  RFC 3168  —  уведомление  о   явной   перегрузке   (Explicit   Congestion
              Notification).

              В этом файле могут быть следующие значения:

              0      Отключить ECN. Не посылать и не принимать ECN. Было включено по умолчанию до
                     Linux 2.6.30 включительно.

              1      Включать ECN при запросе входящими соединениями, а также запрашивать ECN при
                     попытках исходящих соединений.

              2      Включать  ECN  при запросе входящими соединениями, но не запрашивать ECN при
                     попытках исходящих соединений. Данное значение поддерживается и включено  по
                     умолчанию начиная с Linux 2.6.31.

              При  включении  может  пропасть  возможность  установления  соединений с некоторыми
              узлами  из-за  некорректно  работающих  маршрутизаторов  по  пути  следования,  что
              выражается  в  обрыве  (dropped)  соединения.  Однако  для  улучшения  и содействия
              внедрению со значением 1 и для обхода такого некорректного оборудования был  введён
              параметр tcp_ecn_fallback.

       tcp_ecn_fallback (Boolean; по умолчанию: включено; начиная с Linux 4.1)
              Включает  переход  на  резервный  вариант  RFC 3168, Section 6.1.1.1. При включении
              исходящие устанавливающие ECN SYNы, на которые не  было  ответа  за  обычное  время
              перепосылки SYN, будут перепосланы со сброшенными CWR и ECE.

       tcp_fack (Boolean; по умолчанию: включено; начиная с Linux 2.2)
              Включает поддержку TCP Forward Acknowledgement (подтверждение передачи).

       tcp_fin_timeout (integer; по умолчанию: 60; начиная с Linux 2.2)
              Устанавливает количество секунд, в течение которых необходимо ждать последний пакет
              FIN  перед  принудительным  закрытием  сокета.   Строго   говоря,   это   нарушение
              спецификации  TCP,  но оно необходимо для предотвращения атак отказа в обслуживании
              (DoS). Значение по умолчанию в ядрах 2.2 равно 180.

       tcp_frto (integer; по умолчанию: смотрите далее; начиная с Linux 2.4.21/2.6)
              Включает F-RTO — расширенный алгоритм восстановления пауз при  повторных  передачах
              TCP (RTO). В частности, он полезен в беспроводных средах, где потеря пакетов обычно
              происходит из-за  произвольного  возникающих  радиопомех,  а  не  из-за  перегрузки
              промежуточного маршрутизатора. Подробности смотрите в RFC 4138.

              В этом файле могут быть следующие значения:

              0      Отключено. Было включено по умолчанию до Linux 2.6.23 включительно.

              1      Включить базовую версию алгоритма F-RTO.

              2      Включить  расширенный SACK алгоритм F-RTO, если поток использует SACK. Когда
                     используется SACK, также может использоваться и  базовая  версия,  хотя  при
                     этом  возникают  случаи,  где  F-RTO  сработает плохо при подсчёте пакетов в
                     потоке TCP с включённым SACK. Данное значение введено по умолчанию начиная с
                     Linux 2.6.24.

              До  Linux  2.6.22  этот  параметр имел тип Boolean, в котором поддерживаются только
              значения 0 и 1.

       tcp_frto_response (integer; по умолчанию: 0; начиная с Linux 2.6.22)
              Если F-RTO обнаруживает, что пауза при повторной передаче  TCP  не  типична  (т.е.,
              паузы можно было бы избежать, если в TCP была бы установлена более длительная пауза
              повторной передачи), то  у  TCP  есть  несколько  вариантов,  что  сделать  дальше.
              Возможные значения:

              0      Уменьшение  скорости  (rate)  вдвое;  плавный и осторожный ответ, приводит к
                     уменьшению окна перегрузки (cwnd) вдвое  и  предельной  величине  медленного
                     старта (ssthresh) после одного RTT.

              1      Очень  осторожный  ответ;  не  рекомендуется, так как хотя и допускается, но
                     плохо взаимодействует с остальным Linux TCP;  немедленно  уменьшает  cwnd  и
                     ssthresh вдвое.

              2      Активный  ответ;  отменяет  оценки управления перегрузкой, которые теперь не
                     нужны  (игнорируется  возможность  потери  повторной  передачи,  которая  бы
                     требовала   от   TCP   большей   бережливости);  значения  cwnd  и  ssthresh
                     восстанавливаются в значения до паузы.

       tcp_keepalive_intvl (integer; по умолчанию: 75; начиная с Linux 2.4)
              Количество  секунд  между  отправкой  «поддерживающих»   (keep-alive)   проверочных
              пакетов.

       tcp_keepalive_probes (integer; по умолчанию: 9; начиная с Linux 2.2)
              Максимальное  количество  отправляемых «поддерживающих» (keep-alive) пакетов TCP до
              разрыва соединения, если не будет получено ответа от другой стороны.

       tcp_keepalive_time (integer; по умолчанию: 7200; начиная с Linux 2.2)
              Количество  секунд  между  отсутствием  передаваемых  данных  и   отправкой   через
              соединение  «поддерживающих»  пакетов.  Эти  пакеты будут отправляться, только если
              установлен параметра сокета SO_KEEPALIVE. Значение по умолчанию равно  7200  секунд
              (2 часа). Бездействующее соединение разрывается примерно через 11 минут (9 пакетов,
              с интервалом 75 секунд) при включённом режиме keep-alive.

              Заметим, что механизмы слежения за  соединением  более  низкого  уровня  и  периоды
              ожидания приложений могут быть гораздо короче.

       tcp_low_latency  (Boolean; default: disabled; since Linux 2.4.21/2.6; obsolete since Linux
       4.14)
              If enabled, the TCP stack makes decisions that prefer lower latency as  opposed  to
              higher  throughput.   It  this  option  is  disabled,  then  higher  throughput  is
              preferred.  An example of an application where this default should be changed would
              be  a  Beowulf  compute cluster.  Since Linux 4.14, this file still exists, but its
              value is ignored.

       tcp_max_orphans (integer; по умолчанию: смотрите далее; начиная с Linux 2.4)
              The maximum number of orphaned (not attached to any user file handle)  TCP  sockets
              allowed  in  the  system.  When this number is exceeded, the orphaned connection is
              reset and a  warning  is  printed.   This  limit  exists  only  to  prevent  simple
              denial-of-service  attacks.   Lowering  this  limit  is  not  recommended.  Network
              conditions might require you to increase the number of orphans  allowed,  but  note
              that  each  orphan can eat up to ~64 kB of unswappable memory.  The default initial
              value is set equal to the  kernel  parameter  NR_FILE.   This  initial  default  is
              adjusted depending on the memory in the system.

       tcp_max_syn_backlog (integer; по умолчанию: смотрите далее; начиная с Linux 2.2)
              Максимальное  количество запросов на соединение в очереди, которые пока не получили
              подтверждения  от  клиентов.  Если  это  количество  превышается,  то  ядро  начнёт
              отбрасывать  запросы.  Значение  по  умолчанию  (256) увеличивается до 1024, если в
              системе достаточно памяти (>= 128 МБ) и уменьшается до 128, если  памяти  мало  (<=
              32 МБ).

              Before  Linux  2.6.20, it was recommended that if this needed to be increased above
              1024, the size of the SYNACK  hash  table  (TCP_SYNQ_HSIZE)   in  include/net/tcp.h
              should be modified to keep

                  TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog

              и  пересобрать ядро. В Linux 2.6.20 постоянный размер TCP_SYNQ_HSIZE был заменён на
              динамически изменяемый.

       tcp_max_tw_buckets (integer; по умолчанию: смотрите далее; начиная с Linux 2.4)
              Максимальное количество сокетов в состоянии TIME_WAIT, разрешённое в  системе.  Это
              ограничение  существует только для предотвращения простейших атак DoS. По умолчанию
              равно NR_FILE*2 и изменяется в зависимости от количества памяти в системе. Если это
              значение превышено, то сокет закрывается и выводится предупреждение.

       tcp_moderate_rcvbuf (Boolean; по умолчанию: включено; начиная с Linux 2.4.17/2.6.7)
              Если  включён, то для TCP включается автоматическая настройка приёмного буфера; при
              этом размер буфера (не более чем tcp_rmem[2]) автоматически подгоняется под размер,
              используемый   на   пути  прохождения  трафика,  в  целях  достижения  максимальной
              пропускной способности.

       tcp_mem (начиная с Linux 2.4)
              Вектор из 3 целочисленных  значений:  [low,  pressure,  high].  Представляют  собой
              границы,   измеряемые   в  системных  страницах  памяти,  используются  в  TCP  для
              отслеживания использования памяти. По умолчанию рассчитываются  во  время  загрузки
              ОС,  зависят  от  количества памяти в системе (для этого в TCP может использоваться
              только нижняя память (low memory), которая в 32-битных системах  ограничена  900-ми
              мегабайтами. В 64-битных системах этого ограничения нет).

              low    TCP не регулирует распределение своей памяти, если число страниц, выделенных
                     глобально, ниже этого значения.

              pressure
                     Когда количество страниц, размещённых TCP,  превышает это значение,  то  TCP
                     изменяет  свой  метод  использования  памяти.  Это  состояние отменяется при
                     падении количества размещённых страниц ниже значения low.

              high   Глобальное  (общее)   максимальное   количество   страниц,   которое   может
                     использовать  TCP.  Это  значение  переопределяет  все  другие  ограничения,
                     накладываемые ядром.

       tcp_mtu_probing (integer; по умолчанию: 0; начиная с Linux 2.6.17)
              Этот параметр контролирует TCP Packetization-Layer  Path  MTU  Discovery.  В  файле
              могут указываться следующие значения:

              0      Выключен

              1      Включать при обнаружении чёрной дыры (black hole) ICMP

              2      Всегда включено, использовать начальное значение MSS из tcp_base_mss.

       tcp_no_metrics_save (Boolean; по умолчанию: выключено; начиная с Linux 2.6.6)
              По  умолчанию,  TCP  сохраняет  различные  метрики  соединения в кэше маршрутов при
              закрытии  соединения  для  того,  чтобы  соединения,  устанавливаемые  в  ближайшем
              будущем, могли использовать этот набор начальных состояний. Обычно, это увеличивает
              общую производительность, но иногда может и уменьшить её. Если  tcp_no_metrics_save
              включено, то TCP не кэширует метрики при закрытии соединений.

       tcp_orphan_retries (integer; по умолчанию: 8; начиная с Linux 2.4)
              Максимальное  количество попыток проверки другой стороны соединения перед закрытием
              с нашей стороны.

       tcp_reordering (integer; по умолчанию: 3; начиная с Linux 2.4)
              Максимальное количество пакетов, которое может быть переупорядочено в  потоке  TCP,
              при  котором  TCP  ещё  не  считает что произошли потери и не переходит в состояние
              медленного запуска (slow start).  Не  рекомендуется  менять  это  значение.  Данная
              метрика   обнаружения  переупорядочивания  пакетов  предназначена  для  минимизации
              повторных передач, обусловленных переупорядочиванием пакетов в соединении.

       tcp_retrans_collapse (Boolean; по умолчанию: включено; начиная с Linux 2.2)
              При повторной передаче пробовать посылать полноразмерные пакеты.

       tcp_retries1 (integer; по умолчанию: 3; начиная с Linux 2.2)
              Количество попыток повторной передачи  пакетов  по  установленному  соединению  без
              привлечения  других  сетевых  уровней.  При  превышении данного количества, сетевой
              уровень обновляет  маршрут  перед  каждым  повтором  (если  это  возможно).  В  RFC
              установлено минимальное значение по умолчанию: 3.

       tcp_retries2 (integer; по умолчанию: 15; начиная с Linux 2.2)
              Максимальное  количество  попыток  повторной передачи пакетов TCP по установленному
              соединению до того, как оно будет считаться разорванным. По умолчанию равно 15, что
              соответствует времени примерно от 13 до 30 минут, в зависимости от значения таймера
              повторной передачи. В  RFC 1122  установлена  минимальная  граница  в  100  секунд,
              которая обычно считается слишком маленькой.

       tcp_rfc1337 (Boolean; по умолчанию: выключено; начиная с Linux 2.2)
              Включает  поведение  TCP,  совместимое  с  RFC 1337.  Если  выключено,  то:  если в
              состоянии TIME_WAIT принимается RST, то сокет закрывается немедленно, не  дожидаясь
              конца периода TIME_WAIT.

       tcp_rmem (начиная с Linux 2.4)
              Вектор из 3 целочисленных значений: [min, default, max]. Эти параметры используются
              TCP для регулирования размера буфера приёма. TCP  динамически  корректирует  размер
              буфера приёма от значений по умолчанию, указанных ниже, в диапазоне этих переменных
              и в зависимости от количества памяти в системе.

              min    Минимальный размер  буфера  приёма,  используемый  каждым  сокетом  TCP.  По
                     умолчанию  равен  размеру системной страницы (в Linux 2.4 равно 4 КБ и может
                     уменьшаться до PAGE_SIZE байт в системах с малым  количеством  памяти).  Это
                     значение используется для того, чтобы размещение страниц памяти меньше этого
                     значения в режиме давления (pressure) все равно выполнялось. Не ограничивает
                     размер буфера приёма, объявленного для сокета с помощью SO_RCVBUF.

              default
                     Размер   буфера   приёма   по   умолчанию  для  сокетов  TCP.  Это  значение
                     переопределяет  начальный  размер  буфера  по  умолчанию,  взятый  из  общей
                     глобальной   переменной   net.core.rmem_default,   определённой   для   всех
                     протоколов. По умолчанию равен 87380 байт (в Linux 2.4  это  значение  может
                     уменьшаться до 43689 в системах с малым количеством памяти). Если желательны
                     большие размеры буфера приёма, то это значение должно быть увеличено (влияет
                     на  все  сокеты).  Для  разрешения  больших  размеров  окон  TCP должно быть
                     включено net.ipv4.tcp_window_scaling (по умолчанию).

              max    Максимальный размер буфера приёма,  используемый  каждым  сокетом  TCP.  Это
                     значение не переопределяет значение глобальной переменной net.core.rmem_max.
                     Не используется для ограничения  размера  буфера  приёма,  объявленного  для
                     сокета  через  SO_RCVBUF.  Значение по умолчанию рассчитывается по следующей
                     формуле

                         max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

                     (в Linux 2.4 значение по умолчанию равно 87380*2 байт, уменьшается до  87380
                     в системах с малым количеством памяти).

       tcp_sack (Boolean; по умолчанию: включено; начиная с Linux 2.2)
              Включает выборочные подтверждения TCP (TCP Selective Acknowledgements), описанные в
              RFC 2018.

       tcp_slow_start_after_idle (Boolean; по умолчанию: включено; начиная с Linux 2.6.18)
              Если включено, то разрешается поведение согласно RFC 2861 и таймаут окна перегрузки
              после  периода  простоя. Период простоя определяется текущим значением RTO (таймаут
              повторной передачи). Если выключено, то после окна перегрузки  не  следует  таймаут
              после периода простоя.

       tcp_stdurg (Boolean; по умолчанию: выключено; начиная с Linux 2.2)
              Если  значение  включено,  то  для  поля  указателя срочных данных TCP используется
              интерпретация RFC 1122. Согласно этому указатель срочности указывает  на  последний
              байт  срочных  данных.  Если  это  значение  выключено, то для указателя на срочные
              данные применяется интерпретация, совместимая с BSD: указатель срочности  указывает
              на  первый  байт  после  срочных  данных. Включение этого значения может привести к
              проблемам с взаимодействием сетей.

       tcp_syn_retries (integer; default: 6; since Linux 2.2)
              The maximum number of times initial SYNs for an active TCP connection attempt  will
              be  retransmitted.  This value should not be higher than 255.  The default value is
              6, which corresponds to retrying for up to approximately 127 seconds.  Before Linux
              3.7, the default value was 5, which (in conjunction with calculation based on other
              kernel parameters) corresponded to approximately 180 seconds.

       tcp_synack_retries (integer; по умолчанию: 5; начиная с Linux 2.2)
              Максимальное количество попыток повторной передачи сегмента  SYN/ACK  у  пассивного
              соединения TCP. Значение должно быть меньше 255.

       tcp_syncookies (integer; default: 1; since Linux 2.2)
              Enable  TCP  syncookies.  The kernel must be compiled with CONFIG_SYN_COOKIES.  The
              syncookies feature attempts to protect a socket from  a  SYN  flood  attack.   This
              should  be  used  as  a  last  resort,  if  at all.  This is a violation of the TCP
              protocol, and conflicts with other areas of TCP such as  TCP  extensions.   It  can
              cause problems for clients and relays.  It is not recommended as a tuning mechanism
              for heavily loaded servers to help with  overloaded  or  misconfigured  conditions.
              For  recommended  alternatives  see  tcp_max_syn_backlog,  tcp_synack_retries,  and
              tcp_abort_on_overflow.  Set to one of the following values:

              0      Disable TCP syncookies.

              1      Send out syncookies when the syn backlog queue of a socket overflows.

              2      (since Linux 3.12)  Send out syncookies unconditionally.  This can be useful
                     for network testing.

       tcp_timestamps (integer; по умолчанию: 1; начиная с Linux 2.2)
              Устанавливается  в  одно из следующих значений для включения меток времени RFC 1323
              TCP:

              0      Отключить метки времени.

              1      Включить метки времени, определённые в  RFC1323,  и  использовать  случайное
                     смещение для каждого соединения, а не просто использовать текущее время.

              2      Как  при  значении  1,  но без случайных смещений. Назначение tcp_timestamps
                     этого значения работает начиная с Linux 4.10.

       tcp_tso_win_divisor (integer; по умолчанию: 3; начиная с Linux 2.6.9)
              Контролирует процент окна перегрузки,  который  может  быть  использован  одиночным
              кадром  TCP Segmentation Offload (TSO). Значение этого параметра — компромисс между
              временной нагрузкой (burstiness) и построением больших кадров TSO.

       tcp_tw_recycle (Boolean; default: disabled; Linux 2.4 to Linux 4.11)
              Включает быстрое повторное использование сокетов  с  TIME_WAIT.  Включение  данного
              параметра  не  рекомендуется,  так как удалённый IP может не использовать монотонно
              увеличивающиеся метки времени  (устройства за  NAT,  устройства  с  выделенными  на
              подключение смещёнными метками времени). Смотрите RFC 1323 (PAWS) и RFC 6191.

       tcp_tw_reuse (Boolean; по умолчанию: выключено; начиная с Linux 2.4.19/2.6)
              Позволяет  повторно  использовать  сокеты  TIME_WAIT для новых соединений, если это
              безопасно  с  точки  зрения  протокола.   Значение   не   должно   изменяться   без
              совета/запроса технических специалистов.

       tcp_vegas_cong_avoid (Boolean; default: disabled; Linux 2.2 to Linux 2.6.13)
              Включает  алгоритм  избежания  перегрузок TCP Vegas. TCP Vegas действует на стороне
              отправителя; он ожидает начала перегрузки,  оценивая  пропускную  способность.  TCP
              Vegas подгоняет частоту отправки, изменяя окно перегрузки. При включённом TCP Vegas
              обеспечиваются меньшие потери пакетов, но он не так стремителен как TCP Reno.

       tcp_westwood (Boolean; default: disabled; Linux 2.4.26/2.6.3 to Linux 2.6.13)
              Включает алгоритм управления перегрузками TCP Westwood+. TCP Westwood+ действует на
              стороне   отправителя   и   является   модификацией   стека   протокола  TCP  Reno,
              ориентированной на производительность управления перегрузками TCP.  Он  основан  на
              оценке  полосы  пропускания  от  точки  передачи до точки приёма при изменении окна
              перегрузки и порога медленного старта после возникновения перегрузки. Используя эту
              оценку  TCP  Westwood+  подстраивает  порог  медленного  старта  и окно перегрузки,
              принимая во внимание пропускную способность, полученную во  время  перегрузки.  TCP
              Westwood+  значительно увеличивает плавность (fairness), по сравнению с TCP Reno, в
              проводных сетях и пропускную способность в беспроводных сетях.

       tcp_window_scaling (Boolean; по умолчанию: включено; начиная с Linux 2.2)
              Включает изменение размера окна TCP, описанное в RFC 1323 Эта возможность позволяет
              использовать  большие  (>  64 КБ)  окна  для  соединений  TCP,  но она должна также
              поддерживаться на другой стороне соединения.  Обычно,  16-ти  битовый  размер  поля
              длины  окна в заголовке TCP ограничивает его размер до 64 КБ. Если нужно обеспечить
              больший размер окна, то приложение должно увеличить размер своих буферов сокетов  и
              включить    возможность  масштабирования  окна.  Если  значение  tcp_window_scaling
              выключено, то TCP не  будет  согласовывать  использование  масштабирования  окон  с
              другой стороной во время установки соединения.

       tcp_wmem (начиная с Linux 2.4)
              Вектор из 3 целочисленных значений: [min, default, max]. Эти параметры используются
              TCP для управления размером буфера отправления. TCP динамически корректирует размер
              буфера  отправления  от  значений  по  умолчанию,  указанных ниже, в диапазоне этих
              переменных и в зависимости от количества доступной памяти.

              min    Минимальный размер буфера отправления, используемый каждым  сокетом  TCP  По
                     умолчанию  равен  размеру  системной  страницы  (в  Linux 2.4 значение равно
                     4 КБ). Это значение используется для того, чтобы размещение  страниц  памяти
                     меньше этого значения в режиме давления (pressure) все равно выполнялось. Не
                     ограничивает размер буфера отправления, объявленного для  сокета  с  помощью
                     SO_SNDBUF.

              default
                     Размер  буфера  отправления  по  умолчанию  для  сокетов  TCP  Это  значение
                     переопределяет  начальный  размер  буфера  по  умолчанию,  взятый  из  общей
                     глобальной переменной /proc/sys/net/core/wmem_default, определённой для всех
                     протоколов. По  умолчанию  равно  16 КБ.  Если  желательны  большие  размеры
                     буферов  отправления,  то  это значение должно быть увеличено (влияет на все
                     сокеты).   Для   разрешения   больших    размеров    окон    TCP    значение
                     /proc/sys/net/ipv4/tcp_window_scaling должно быть ненулевым (по умолчанию).

              max    Максимальный размер буфера отправления, используемый каждым сокетом TCP. Это
                     значение не переопределяет значение переменной  /proc/sys/net/core/wmem_max.
                     Не используется для ограничения размера буфера отправления, объявленного для
                     сокета через SO_SNDBUF. Значение по умолчанию  рассчитывается  по  следующей
                     формуле

                         max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128))

                     (в  Linux  2.4  значение  по  умолчанию равно 128 КБ, уменьшается до 64 КБ в
                     системах с малым количеством памяти).

       tcp_workaround_signed_windows (Boolean; по умолчанию: выключено; начиная с Linux 2.6.26)
              Если включено, то предполагать,  что  неполучение  параметра  окна  масштабирования
              означает,  что  удалённый  TCP повреждён и считать размер окна как число со знаком.
              Если выключено, то предполагается, что удалённый TCP не повреждён, даже если мы  не
              получаем от него параметр окна масштабирования.

   Параметры сокета
       Для  получения  и  задания  параметров  сокетов  TCP  используйте  вызов  getsockopt(2)  и
       setsockopt(2), соответственно.  Значение аргумента уровня  параметров  должно  быть  равно
       IPPROTO_TCP.  Если не указано обратное, optval — это указатель на int. Кроме того, сокетам
       TCP доступно большинство параметров сокета IPPROTO_IP. Дополнительная информация приведена
       в ip(7).

       В  следующем  списке  представлены  параметры только для сокетов TCP. О других параметрах,
       применимых к сокетам TCP, читайте в socket(7).

       TCP_CONGESTION (начиная с Linux 2.6.13)
              Аргументом этого параметра является строка. Данный параметр  позволяет  вызывающему
              задать  используемый  алгоритм  управления перегрузкой TCP, для каждого сокета. Для
              непривилегированных    процессов    выбор    ограничен    одним    из    алгоритмов
              tcp_allowed_congestion_control    (описано    выше).   Привилегированные   процессы
              (CAP_NET_ADMIN) могут выбирать любой из доступных  алгоритмов  контроля  перегрузки
              (смотрите описание tcp_available_congestion_control выше).

       TCP_CORK (начиная с Linux 2.2)
              Если  установлен,  то  не  посылать  частичные  кадры.  Все  поставленные в очередь
              частичные кадры будут отосланы, когда этот параметр будет очищен. Это  полезно  для
              подготовки  заголовков  перед  вызовом  sendfile(2)  или для оптимизации пропускной
              способности. В текущей реализации отводится максимум (ceiling) 200  миллисекунд,  в
              течение  которых  вывод  закупоривается (corked) из-за TCP_CORK. Если этот максимум
              достигнут, то данные  в  очереди  передаются  автоматически.  Этот  параметр  можно
              совмещать  с  TCP_NODELAY  только начиная с Linux 2.5.71. Данный параметр не должен
              использоваться, если требуется переносимость кода.

       TCP_DEFER_ACCEPT (начиная с Linux 2.4)
              Позволяет слушающему просыпаться только при поступлении данных на сокет.  Принимает
              целое  значение  (секунды),  может  ограничить  максимальное количество попыток TCP
              закрытия этого соединения. Данный параметр не должен использоваться, если требуется
              переносимость кода.

       TCP_INFO (начиная с Linux 2.4)
              Используется  для сбора информации об этом сокете. Ядро возвращает структуру struct
              tcp_info, определённую в файле /usr/include/linux/tcp.h. Данный параметр не  должен
              использоваться, если требуется переносимость кода.

       TCP_KEEPCNT (начиная с Linux 2.4)
              Максимальное  число  проверок  (keepalive  probes)  TCP, отправляемых перед сбросом
              соединения. Данный параметр не должен использоваться, если требуется  переносимость
              кода.

       TCP_KEEPIDLE (начиная с Linux 2.4)
              Время  (в  секундах)  простоя  (idle) соединения, по прошествии которого TCP начнёт
              отправлять проверочные пакеты (keepalive probes), если для сокета включён  параметр
              SO_KEEPALIVE.   Данный   параметр   не   должен   использоваться,   если  требуется
              переносимость кода.

       TCP_KEEPINTVL (начиная с Linux 2.4)
              Время в секундах между отправками отдельных проверочных пакетов (keepalive probes).
              Данный параметр не должен использоваться, если требуется переносимость кода.

       TCP_LINGER2 (начиная с Linux 2.4)
              Время жизни брошенных (orphaned) сокетов в состоянии FIN_WAIT2. Этот параметр может
              использоваться   для   переопределения   общесистемного    параметра    из    файла
              /proc/sys/net/ipv4/tcp_fin_timeout данного сокета. Значение не должно противоречить
              параметру  SO_LINGER  уровня  сокета   socket(7).   Данный   параметр   не   должен
              использоваться, если требуется переносимость кода.

       TCP_MAXSEG
              Максимальный  размер  сегмента  для исходящих пакетов TCP. В Linux 2.2 и ранее, и в
              Linux 2.6.28 и новее, если этот  параметр  задан  до  установления  соединения,  то
              меняется  также  и  значение  MSS,  сообщаемое  другой  стороне в начальном пакете.
              Значения, превышающие MTU интерфейса,  игнорируются.  TCP  также  будет  определять
              минимальную и максимальную границу поверх этих значений.

       TCP_NODELAY
              Если  включён, то отменяется выполнение алгоритма Nagle. Это означает, что сегменты
              всегда отсылаются при  первой  же  возможности,  даже  если  к  отправке  назначено
              небольшое  количество  данных.  Если  выключен,  то  данные  буферизируются и будут
              отправлены только после  набора  достаточно  большого  количества  данных,  поэтому
              небольшие   пакеты  с  данными  не  отправляются.  Этот  параметр  переопределяется
              TCP_CORK; однако, установка данного  параметра  вызывает  явную  очистку  ожидающих
              вывода данных, даже если установлен TCP_CORK.

       TCP_QUICKACK (начиная с Linux 2.4.4)
              Включает  режим  quickack при установке или выключает при сбросе. В этом режиме все
              уведомления отправляются немедленно, а не с некоторой задержкой  в  соответствии  с
              обычной  работой  TCP.  Этот  флаг  не постоянный, он только включает или выключает
              режим  quickack.  Последующие  операции  с   протоколом   TCP   будут   по   своему
              включать/выключать  этот  режим  в  зависимости  от  своих  внутренних  протоколов,
              настроек и факторов. Данный  параметр  не  должен  использоваться,  если  требуется
              переносимость кода.

       TCP_SYNCNT (начиная с Linux 2.4)
              Устанавливает  количество  повторных  передач  SYN,  которое  должен послать TCP до
              отмены попытки установки соединения. Не должно превышать 255.  Данный  параметр  не
              должен использоваться, если требуется переносимость кода.

       TCP_USER_TIMEOUT (начиная с Linux 2.6.37)
              This  option  takes an unsigned int as an argument.  When the value is greater than
              0, it specifies the maximum amount of time in milliseconds  that  transmitted  data
              may  remain  unacknowledged, or buffered data may remain untransmitted (due to zero
              window size) before TCP will forcibly close the corresponding connection and return
              ETIMEDOUT  to the application.  If the option value is specified as 0, TCP will use
              the system default.

              Увеличение пользовательского времени задержки позволяет соединению  TCP  продолжать
              существовать    дополнительные    периоды    при   отсутствии   связи.   Уменьшение
              пользовательского времени задержки позволяет приложениям «быстро упасть», если  это
              нужно.  В  противном  случае  ошибка  может  быть  отложена до 20 минут при текущих
              системных значениях по умолчанию в обычной среде WAN.

              Этот параметр может быть  задан  при  любом  состоянии  соединения  TCP,  но  будет
              задействован   только   при   синхронизации   состояний   соединения  (ESTABLISHED,
              FIN-WAIT-1,  FIN-WAIT-2,  CLOSE-WAIT,  CLOSING  и  LAST-ACK).  Кроме  этого,  когда
              используется  параметр  поддержания  TCP  (SO_KEEPALIVE),  TCP_USER_TIMEOUT отменит
              действие поддержания для определения нужно ли  закрывать  соединение  из-за  ошибки
              поддержания.

              Этот  параметр  не  действует,  если  TCP  перепосылает пакет, или посылается проба
              поддержания.

              Этот параметр, как и многие другие, наследуется  сокетом,  возвращаемым  accept(2),
              если он установлен у прослушивающего сокета.

              Подробней о свойстве пользовательского времени задержки смотрите RFC 793 и RFC 5482
              («TCP User Timeout Option»).

       TCP_WINDOW_CLAMP (начиная с Linux 2.4)
              Ограничивает  размер  предлагаемого  окна   указанным   значением.   Ядро   считает
              минимальный размер как SOCK_MIN_RCVBUF/2. Данный параметр не должен использоваться,
              если требуется переносимость кода.

       TCP_FASTOPEN (since Linux 3.6)
              This option enables Fast Open  (RFC  7413)  on  the  listener  socket.   The  value
              specifies  the  maximum  length of pending SYNs (similar to the backlog argument in
              listen(2)).  Once enabled, the listener socket grants the TCP Fast Open  cookie  on
              incoming SYN with TCP Fast Open option.

              More  importantly  it  accepts  the  data  in SYN with a valid Fast Open cookie and
              responds SYN-ACK acknowledging both the  data  and  the  SYN  sequence.   accept(2)
              returns  a  socket  that is available for read and write when the handshake has not
              completed yet.  Thus the data exchange can commence before the handshake completes.
              This    option    requires    enabling    the   server-side   support   on   sysctl
              net.ipv4.tcp_fastopen (see above).  For TCP  Fast  Open  client-side  support,  see
              send(2)  MSG_FASTOPEN or TCP_FASTOPEN_CONNECT below.

       TCP_FASTOPEN_CONNECT (since Linux 4.11)
              This  option  enables  an  alternative  way to perform Fast Open on the active side
              (client).  When this  option  is  enabled,  connect(2)   would  behave  differently
              depending on if a Fast Open cookie is available for the destination.

              If  a  cookie  is not available (i.e. first contact to the destination), connect(2)
              behaves as usual by sending a SYN immediately, except  the  SYN  would  include  an
              empty Fast Open cookie option to solicit a cookie.

              If  a  cookie  is  available,  connect(2)   would  return 0 immediately but the SYN
              transmission is deferred.  A subsequent write(2)  or sendmsg(2) would trigger a SYN
              with  data plus cookie in the Fast Open option.  In other words, the actual connect
              operation is deferred until data is supplied.

              Note: While this option is designed for convenience, enabling it  does  change  the
              behaviors  and  certain system calls might set different errno values.  With cookie
              present, write(2)  or sendmsg(2)  must be called right after connect(2)   in  order
              to  send  out  SYN+data to complete 3WHS and establish connection.  Calling read(2)
              right after connect(2) without write(2)  will  cause  the  blocking  socket  to  be
              blocked forever.

              The  application  should  either  set  TCP_FASTOPEN_CONNECT  socket  option  before
              write(2)  or sendmsg(2), or call write(2)  or  sendmsg(2)  with  MSG_FASTOPEN  flag
              directly, instead of both on the same connection.

              Here is the typical call flow with this new option:

                  s = socket();
                  setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
                  connect(s);
                  write(s); /* write() should always follow connect()
                             * in order to trigger SYN to go out. */
                  read(s)/write(s);
                  /* ... */
                  close(s);

   Программный интерфейс сокетов
       TCP  предоставляет ограниченную поддержку внеполосных данных в виде (одного байта) срочных
       данных. В Linux это означает, что если другая сторона посылает новые  внеполосные  данные,
       то  старые  срочные данные вставляются как обычные данные в поток (даже когда SO_OOBINLINE
       не установлен). В этом отличие от реализации стека в BSD.

       По умолчанию в Linux используется совместимая с BSD интерпретация поля срочного указателя.
       Это  нарушает RFC 1122, но требуется для правильного взаимодействия с другими стеками. Это
       можно изменить через /proc/sys/net/ipv4/tcp_stdurg.

       Возможно получить внеполосные данные с помощью recv(2) и флага MSG_PEEK.

       Since Linux 2.4, Linux supports the use of MSG_TRUNC in  the  flags  argument  of  recv(2)
       (and  recvmsg(2)).   This  flag  causes the received bytes of data to be discarded, rather
       than passed back in a caller-supplied buffer.  Since Linux 2.4.4, MSG_TRUNC also has  this
       effect when used in conjunction with MSG_OOB to receive out-of-band data.

   Вызовы ioctl
       Следующие вызовы ioctl(2) возвращают информацию в аргументе value. Корректный синтаксис:

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

       Значением ioctl_type может быть одно из:

       SIOCINQ
              Возвращает  количество  непрочитанных  данных в очереди в приёмном буфере. Сокет не
              должен быть в  состоянии  LISTEN,  иначе  возвращается  ошибка  (EINVAL).  Значение
              SIOCINQ   определено   в  <linux/sockios.h>.  В  качестве  альтернативы  вы  можете
              использовать синоним FIONREAD, определённый в <sys/ioctl.h>.

       SIOCATMARK
              Возвращает истинное значение (т.е., value отличное от нуля), если  входящие  данные
              потока отмечены как срочные.

              Если  установлен  параметр  сокета  SO_OOBINLINE  и  SIOCATMARK возвращает истинное
              значение, то при следующем чтении из сокета будут  получены  срочные  данные.  Если
              параметр  сокета  SO_OOBINLINE  не  установлен  и  SIOCATMARK  возвращает  истинное
              значение, то при следующем чтении из сокета будут получены байты, размещённые после
              срочных (для действительного чтения срочных данных требуется флаг recv(MSG_OOB)).

              Заметим,  что  при  чтении  никогда  не происходит чтения за меткой срочности. Если
              приложение проинформировано  о  наличии  срочных  данных  с  помощью  select(2)  (с
              аргументом  exceptfds) или доставкой сигнала SIGURG, то оно может переместить метку
              дальше с помощью цикла, в котором постоянно  проверяется  SIOCATMARK,  и  выполнить
              чтение (запросив любое количество байт) пока SIOCATMARK возвращает ложь.

       SIOCOUTQ
              Возвращает  количество  не  отправленных данных в очереди отправки сокета. Сокет не
              должен быть в состоянии прослушивания LISTEN, иначе  возвратится  ошибка  (EINVAL).
              Значение SIOCOUTQ определено в <linux/sockios.h>. Или же вы можете использовать его
              аналог TIOCOUTQ, определённый в <sys/ioctl.h>.

   Обработка ошибок
       При возникновении сетевой ошибки TCP пытается отправить пакет  повторно.  Если  в  течение
       некоторого  времени  этого  сделать  не  удаётся,  то  возвращается  либо  ETIMEDOUT, либо
       последняя ошибка, произошедшая в этом соединении.

       Some applications require a quicker error notification.  This  can  be  enabled  with  the
       IPPROTO_IP  level  IP_RECVERR  socket  option.   When this option is enabled, all incoming
       errors are immediately passed to the user program.  Use this option with care —  it  makes
       TCP less tolerant to routing changes and other normal network conditions.

ОШИБКИ

       EAFNOTSUPPORT
              Переданный в sin_family тип адреса сокета не равен AF_INET.

       EPIPE  Другая  сторона  неожиданно  закрыла  сокет,  или была произведена попытка чтения в
              отключённом сокете.

       ETIMEDOUT
              Другая сторона не подтвердила передачу данных через определённое время.

       Все ошибки, определённые для ip(7) или общего слоя сокетов, также могут быть возвращены  и
       для TCP.

ВЕРСИИ

       Support  for  Explicit  Congestion Notification, zero-copy sendfile(2), reordering support
       and some SACK extensions (DSACK) were  introduced  in  Linux  2.4.   Support  for  forward
       acknowledgement  (FACK),  TIME_WAIT recycling, and per-connection keepalive socket options
       were introduced in Linux 2.3.

ДЕФЕКТЫ

       Не все ошибки описаны.

       Протокол IPv6 не описан.

СМ. ТАКЖЕ

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

       The kernel source file Documentation/networking/ip-sysctl.txt.

       В RFC 793 описан TCP.
       В RFC 1122 перечислены требования TCP и дано описание алгоритма Нагла (Nagle).
       В RFC 1323 описаны метки времени TCP и параметры масштабирования окна.
       В RFC 1337 описаны факторы риска TIME_WAIT.
       В RFC 3168 описано уведомление о явной перегрузке (Explicit Congestion Notification).
       В RFC 2581 описаны алгоритмы управления перегрузками TCP.
       В RFC 2018 и RFC 2883 описан SACK и расширения к SACK.

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства    был    сделан   Azamat   Hackimov
       <azamat.hackimov@gmail.com>,  Dmitry  Bolkhovskikh  <d20052005@yandex.ru>,   Yuri   Kozlov
       <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.