Поделиться через


Параметры сокета IPPROTO_TCP

В следующей таблице описаны параметры сокета IPPROTO_TCP, которые применяются к сокетам, созданным для семейств адресов IPv4 и IPv6 (AF_INET и AF_INET6) с параметром протокола для функции сокета, указанной как TCP (IPPROTO_TCP). Дополнительные сведения о получении и настройке параметров сокета см. на справочных страницах функций gets и setsockopt.

Чтобы перечислить протоколы и обнаружить поддерживаемые свойства для каждого установленного протокола, используйте функцию WSAEnumProtocols, WSCEnumProtocols или WSCEnumProtocols32.

Параметры

Вариант Получить Set Тип Optval Description
TCP_BSDURGENT yes yes DWORD (логический) Если значение TRUE, поставщик услуг реализует стиль распространения программного обеспечения Berkeley (BSD) (по умолчанию) для обработки ускоряемой обработки данных. Этот параметр является обратным параметром TCP_EXPEDITED_1122. Этот параметр можно задать только один раз. После установки этого параметра этот параметр не может быть отключен. Этот параметр не требуется реализовать поставщиками услуг. Параметр включен (задано значение TRUE) по умолчанию.
TCP_EXPEDITED_1122 yes yes DWORD (логический) Если значение TRUE, поставщик услуг реализует ускоряемые данные, указанные в RFC-1222. В противном случае используется стиль распространения программного обеспечения Berkeley (BSD) (по умолчанию). Этот параметр можно задать только один раз. После установки этого параметра этот параметр не может быть отключен. Этот параметр не требуется реализовать поставщиками услуг.
TCP_FAIL_CONNECT_ON_ICMP_ERROR yes yes DWORD (логический) Если значение TRUE, вызов API подключения возвращается после получения ошибки ICMP со значением WSAEHOSTUNREACH. Затем исходный адрес ошибки будет доступен с помощью параметра сокета TCP_ICMP_ERROR_INFO. Если значение FALSE, сокет работает нормально. Значение по умолчанию отключено (задано значение FALSE). Для обеспечения безопасности типов следует использовать функции WSAGetFailConnectOnIcmpError и WSASetFailConnectOnIcmpError вместо прямого использования параметра сокета.
TCP_ICMP_ERROR_INFO yes no ICMP_ERROR_INFO Извлекает сведения об ошибке ICMP, полученной сокетом TCP во время неудачного вызова подключения. Допустимо только в сокете TCP, где ранее была включена TCP_FAIL_CONNECT_ON_ICMP_ERROR, и подключение вернуло WSAEHOSTUNREACH. Запрос не блокируется. Если запрос выполнен успешно и возвращенное значение optlen равно 0, то с момента последнего вызова подключения не было получено сообщение об ошибке ICMP. Если сообщение об ошибке ICMP получено, его сведения будут доступны до вызова подключения . Сведения возвращаются в виде ICMP_ERROR_INFO структуры. Для обеспечения безопасности типов следует использовать функцию WSAGetIcmpErrorInfo , а не напрямую использовать параметр сокета.
TCP_KEEPCNT yes yes DWORD Возвращает или задает количество сеансов tcp,которые будут отправляться до завершения подключения. Недопустимо задать значение TCP_KEEPCNT больше 255.
TCP_MAXRT yes yes DWORD Если это значение не является отрицательным, оно представляет требуемое время ожидания подключения в секундах. Если значение равно -1, оно представляет запрос на отключение времени ожидания подключения (т. е. подключение будет повторно передаваться навсегда). Если время ожидания подключения отключено, время ожидания повторной передачи увеличивается экспоненциально для каждой повторной передачи до максимального значения 60sec, а затем остается там.
TCP_NODELAY yes yes DWORD (логический) Включает или отключает алгоритм Nagle для сокетов TCP. Этот параметр отключен (задано значение FALSE) по умолчанию.
TCP_TIMESTAMPS yes yes DWORD (логический) Включает или отключает метки времени RFC 1323. Обратите внимание, что существует также глобальная конфигурация меток времени (по умолчанию отключена), "Метки времени" в (set/get)-nettcpsetting. Установка этого параметра сокета переопределяет глобальный параметр конфигурации.
TCP_FASTOPEN yes yes DWORD (логический) Включает или отключает протокол RFC 7413 TCP Fast Open, что позволяет начать отправку данных во время трехстороннего подтверждения при открытии подключения. Обратите внимание, что для быстрого открытия следует использовать ConnectEx, чтобы сделать начальное подключение, и указать данные в параметре lpSendBuffer функции, который будет передаваться во время процесса подтверждения. Некоторые данные в lpSendBuffer будут переданы по протоколу Fast Open.
TCP_KEEPIDLE yes yes DWORD Возвращает или задает количество секунд, в течение которых tcp-подключение остается бездействующим, прежде чем пробы хранения отправляются в удаленный.

Примечание.
Этот параметр доступен начиная с Windows 10 версии 1709.


TCP_KEEPINTVL yes yes DWORD Возвращает или задает количество секунд, в течение которых TCP-подключение ожидает сохраняемого ответа перед отправкой другой пробы хранения.

Примечание.
Этот параметр доступен начиная с Windows 10 версии 1709.


Поддержка Windows для параметров IPPROTO_TCP

Вариант Windows 10 Windows 7 Windows Server 2008 Windows Vista
TCP_BSDURGENT yes yes yes yes
TCP_EXPEDITED_1122 yes yes yes yes
TCP_KEEPCNT Начиная с Windows 10 версии 1703
TCP_MAXRT yes yes yes yes
TCP_NODELAY yes yes yes yes
TCP_TIMESTAMPS yes yes yes yes
TCP_FASTOPEN Начиная с Windows 10 версии 1607

  Вариант Windows Server 2003 Windows XP Windows 2000 Windows NT4 Windows 9x/Me
TCP_BSDURGENT yes yes yes yes
TCP_EXPEDITED_1122 yes yes yes
TCP_KEEPCNT
TCP_MAXRT
TCP_NODELAY yes yes yes yes
TCP_TIMESTAMPS
TCP_FASTOPEN

Замечания

В пакете SDK, выпущенном для Windows Vista и более поздних версий, организация файлов заголовков изменилась и IPPROTO_TCP уровень определяется в файле заголовка Ws2def.h, который автоматически входит в файл заголовка Winsock2.h. Параметры сокета IPPROTO_TCP, за исключением TCP_BSDURGENT, определяются в файле заголовка Ws2ipdef.h, который автоматически входит в файл заголовка Ws2tcpip.h. Параметр TCP_BSDURGENT по историческим причинам определен в файле заголовка Mswsock.h . Файлы заголовков Ws2def.h и Ws2ipdef.h никогда не должны использоваться напрямую.

Требования

Требование Значение
Верхний колонтитул
Ws2def.h (включая Winsock2.h);
Winsock2.h в Windows Server 2003, Windows XP и Windows 2000