Списки операций ввода-вывода Winsock

В этом разделе описываются элементы управления вводом и выводом сокета Winsock для различных выпусков операционных систем Windows. Используйте функцию WSAIoctl или WSPIoctl для выдачи IOCTL Winsock для управления режимом сокета, транспортного протокола или подсистемы связи.

Некоторые ICTL Winsock требуют больше объяснений, чем может передать эта таблица; такие параметры содержат ссылки на дополнительные разделы.

Можно использовать схему кодирования, которая сохраняет определенные в настоящее время операционные коды ioctlsocket , предоставляя удобный способ секционирования пространства идентификаторов кода операций на столько, сколько параметр dwIoControlCode теперь является 32-разрядной сущностью. Параметр dwIoControlCode создан для обеспечения независимости протокола и поставщика при добавлении новых кодов элементов управления при сохранении обратной совместимости с сокетами Windows 1.1 и кодами элементов управления Unix. Параметр dwIoControlCode имеет следующую форму.

I O V T Семейство поставщиков или адресов Код
3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0

Примечание

Биты в параметре dwIoControlCode , отображаемые в таблице, должны считываться по вертикали сверху вниз по столбцу. Таким образом, самый левый бит — бит 31, следующий бит — бит 30, а самый правый бит — бит 0.

Значение I задано, если входной буфер действителен для кода, как и в случае с IOC_IN.

O устанавливается, если выходной буфер действителен для кода, как и в случае с IOC_OUT. Коды управления с помощью входных и выходных буферов задают как I, так и O.

V устанавливается, если для кода нет параметров, как в случае с IOC_VOID.

T — это 2-битовое количество, определяющее тип IOCTL. Определяются следующие значения:

0 IOCTL — это стандартный код IOCTL Unix, как и FIONREAD и FIONBIO.

1 IOCTL — это универсальный код IOCTL windows Sockets 2. Новые коды IOCTL, определенные для сокетов Windows 2, будут иметь T == 1.

2 IOCTL применяется только к определенному семейству адресов.

3 IOCTL применяется только к поставщику определенного поставщика, как и IOC_VENDOR. Этот тип позволяет назначить компаниям номер поставщика, который отображается в параметре семейства "Поставщик/адрес ". Затем поставщик может определить новые ioCTL, относящиеся к этому поставщику, без необходимости регистрировать IOCTL в клиринговом центре, обеспечивая тем самым гибкость и конфиденциальность поставщика.

Семейство поставщиков и адресов 11-битовое количество, определяющее поставщика, которому принадлежит код (если T == 3) или содержит семейство адресов, к которому применяется код (если T == 2). Если это код IOCTL Unix (T == 0), то этот параметр имеет то же значение, что и код в Unix. Если это универсальный IOCTL сокетов Windows 2 (T == 1), этот параметр можно использовать в качестве расширения параметра кода для предоставления дополнительных значений кода.

Код 16-разрядное количество, содержащее конкретный код IOCTL для операции.

Коды IOCTL Unix

Поддерживаются следующие коды IOCTL Unix (команды).

FIONBIO

Включите или отключите неблокирующий режим для сокетов. Параметр lpvInBuffer указывает на беззнаковый длинный (QoS), который является ненулевым, если неблокирующий режим должен быть включен, и нуль, если он должен быть отключен. При создании сокета он работает в режиме блокировки (то есть неблокирующий режим отключен). Это согласуется с сокетами BSD.

Подпрограмма WSAsyncSelect или WSAEventSelect автоматически устанавливает для сокета режим неблокировки. Если WSAsyncSelect или WSAEventSelect был выдан для сокета, любая попытка использовать WSAIoctl для возврата сокета в режим блокировки завершится ошибкой WSAEINVAL. Чтобы вернуть сокет в режим блокировки, приложение должно сначала отключить WSAsyncSelect , вызвав WSAAsyncSelect с параметром lEvent , равным нулю, или отключить WSAEventSelect , вызвав WSAEventSelect с параметром lNetworkEvents , равным нулю.

FIONREAD

Определите объем данных, которые можно считывать атомарным образом из сокетов. Параметр lpvOutBuffer указывает на длину без знака , в которой WSAIoctl сохраняет результат.

Если сокет, передаваемый в параметре s , ориентирован на поток (например, тип SOCK_STREAM), функция FIONREAD возвращает общий объем данных, которые можно считать в одной операции получения; Обычно это то же самое, что и общий объем данных, помещенных в очередь в сокете (так как поток данных ориентирован на байты, это не гарантируется).

Если сокет, передаваемый в параметре s , ориентирован на сообщения (например, тип SOCK_DGRAM), функция FIONREAD возвращает в отчете общее количество байтов, доступных для чтения, а не размер первой датаграммы (сообщения), помещенной в очередь в сокете.

SIOCATMARK

Определите, были ли прочитаны все данные OOB. Это относится только к сокету в стиле потока (например, типу SOCK_STREAM), который настроен для встроенного приема любых данных OOB (SO_OOBINLINE). Если данные OOB не ожидают чтения, операция возвращает значение TRUE. В противном случае возвращается значение FALSE, а следующая операция получения, выполненная в сокете, извлекает некоторые или все данные, предшествующие метке; приложение должно использовать операцию SIOCATMARK , чтобы определить, остается ли какая-либо. Если есть какие-либо обычные данные, предшествующие срочным (внеполосным) данным, они будут получены в порядке. (Обратите внимание, что операции recv никогда не будут смешивать OOB и обычные данные в одном вызове.) lpvOutBuffer указывает на BOOL, в котором WSAIoctl сохраняет результат.

Команды Windows Sockets 2

Поддерживаются следующие команды Windows Sockets 2.

SIO_ACQUIRE_PORT_RESERVATION (параметр кода операции: I, T==3)

Запрос резервирования среды выполнения для блока портов TCP или UDP. Для резервирования портов среды выполнения пул портов требует, чтобы резервирования были использованы из процесса, в сокете которого было предоставлено резервирование. Резервирование портов среды выполнения выполняется только до тех пор, пока время существования сокета, в котором был вызван SIO_ACQUIRE_PORT_RESERVATION IOCTL. В отличие от этого, резервирования постоянных портов, созданные с помощью функции CreatePersistentTcpPortReservation или CreatePersistentUdpPortReservation , могут использоваться любым процессом с возможностью получения постоянных резервирований.

Дополнительные сведения см. в справочнике по SIO_ACQUIRE_PORT_RESERVATION .

SIO_ACQUIRE_PORT_RESERVATION поддерживается в Windows Vista и более поздних версиях операционной системы.

SIO_ADDRESS_LIST_CHANGE (параметр кода операции: V, T==1)

Получение уведомлений об изменениях в списке локальных транспортных адресов семейства протоколов сокета, к которым может привязаться приложение. После завершения этого IOCTL выходные данные не предоставляются; завершение просто указывает, что список доступных локальных адресов изменился, и его следует запросить снова через SIO_ADDRESS_LIST_QUERY.

Предполагается (хотя и не обязательно), что приложение использует перекрывающиеся операции ввода-вывода для уведомления об изменениях путем выполнения запроса SIO_ADDRESS_LIST_CHANGE . Кроме того, если SIO_ADDRESS_LIST_CHANGE IOCTL выдается в неблокирующем сокете без перекрывающихся параметров (для lpOverlapped/ lpCompletionRoutine задано значение NULL), он немедленно завершится с ошибкой WSAEWOULDBLOCK. Затем приложение может ожидать событий изменения списка адресов с помощью вызова WSAEventSelect или WSAAsyncSelect с FD_ADDRESS_LIST_CHANGE битом, заданным в битовой маске сетевых событий.

SIO_ADDRESS_LIST_QUERY (параметр opcode: O, T==1)

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

Примечание

В средах Windows Plug-n-Play адреса можно добавлять и удалять динамически. Поэтому приложения не могут полагаться на сведения, возвращаемые SIO_ADDRESS_LIST_QUERY , быть постоянными. Приложения могут регистрироваться для получения уведомлений об изменении адреса через SIO_ADDRESS_LIST_CHANGE IOCTL, который предоставляет уведомления через перекрывающиеся операции ввода-вывода или события FD_ADDRESS_LIST_CHANGE. Чтобы гарантировать, что в приложении всегда есть текущие сведения о списке адресов, можно использовать следующую последовательность действий:

  • Проблема SIO_ADDRESS_LIST_CHANGE IOCTL
  • Проблема SIO_ADDRESS_LIST_QUERY IOCTL
  • Всякий раз , когда SIO_ADDRESS_LIST_CHANGE IOCTL уведомляет об изменении списка адресов (путем перекрывающихся операций ввода-вывода или путем передачи сигналов FD_ADDRESS_LIST_CHANGE событию), вся последовательность действий должна повторяться.

Дополнительные сведения см. в справочнике по SIO_ADDRESS_LIST_QUERY . SIO_ADDRESS_LIST_QUERY поддерживается в Windows 2000 и более поздних версиях.

SIO_APPLY_TRANSPORT_SETTING (параметр opcode: I, T==3)

Применяет параметр транспорта к сокету. Применяемый параметр транспорта основан на TRANSPORT_SETTING_ID , передаваемых в параметре lpvInBuffer .

Единственный параметр транспорта в настоящее время определяется для возможности REAL_TIME_NOTIFICATION_CAPABILITY в сокете TCP.

Если для переданного TRANSPORT_SETTING_ID член Guid имеет значение REAL_TIME_NOTIFICATION_CAPABILITY, это запрос на применение параметров уведомлений в режиме реального времени для сокета TCP, используемого с ControlChannelTrigger для получения фоновых сетевых уведомлений в приложении Магазина Windows.

Дополнительные сведения см. в справочнике по SIO_APPLY_TRANSPORT_SETTING . SIO_APPLY_TRANSPORT_SETTING поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_ASSOCIATE_HANDLE (параметр кода операции: I, T==1)

Связывает этот сокет с указанным дескриптором сопутствующего интерфейса. Входной буфер содержит целочисленное значение, соответствующее константе манифеста для интерфейса-компаньона (например, TH_NETDEV и TH_TAPI.), за которым следует значение, являющееся дескриптором указанного интерфейса-компаньона, а также любые другие необходимые сведения. Дополнительные сведения, относящиеся к конкретному интерфейсу-компаньону, см. в соответствующем разделе в приложении Winsock . Общий размер отражается в длине входного буфера. Выходной буфер не требуется. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают этот IOCTL. Дескриптор, связанный с этим IOCTL, можно получить с помощью SIO_TRANSLATE_HANDLE.

Можно использовать сопутствующий интерфейс, например, если конкретный поставщик предоставляет (1) большое количество дополнительных элементов управления для поведения сокета, и (2) элементы управления достаточно зависят от поставщика, чтобы они не сопоставлялись с существующими функциями сокетов Windows или функциями, которые, вероятно, будут определены в будущем. Рекомендуется использовать компонентную объектную модель (COM) вместо этого IOCTL для обнаружения и отслеживания других интерфейсов, которые могут поддерживаться сокетом. Этот IOCTL используется для (обратной) совместимости с системами, в которых COM недоступен или не может использоваться по какой-либо другой причине.

SIO_ASSOCIATE_PORT_RESERVATION (параметр кода операции: I, T==3)

Свяжите сокет с постоянным резервированием или резервированием среды выполнения для блока портов TCP или UDP, определенного маркером резервирования портов. Перед привязкой сокета необходимо выдать SIO_ASSOCIATE_PORT_RESERVATION IOCTL. Если и когда сокет привязан, назначенный ему порт будет выбран из резервирования портов, определенного заданным токеном. Если из указанного резервирования нет доступных портов, вызов функции привязки завершится ошибкой.

Дополнительные сведения см. в справочнике по SIO_ASSOCIATE_PORT_RESERVATION .

SIO_ASSOCIATE_PORT_RESERVATION поддерживается в Windows Vista и более поздних версиях операционной системы.

SIO_BASE_HANDLE (параметр opcode: O, T==1)

Извлекает базовый дескриптор поставщика услуг для заданного сокета. Возвращаемое значение — SOCKET.

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

Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAEFAULT.

SIO_BASE_HANDLE определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.

SIO_BSP_HANDLE (параметр кода операции: O, T==1)

Извлекает базовый дескриптор поставщика услуг для сокета, используемого функцией WSASendMsg . Возвращаемое значение — SOCKET.

Этот Ioctl используется многоуровневым поставщиком услуг, чтобы убедиться, что поставщик перехватывает функцию WSASendMsg .

Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAEFAULT.

SIO_BSP_HANDLE определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.

SIO_BSP_HANDLE_SELECT (параметр кода операции: O, T==1)

Извлекает базовый дескриптор поставщика услуг для сокета, используемого функцией select . Возвращаемое значение — SOCKET.

Этот Ioctl используется многоуровневой службой, чтобы убедиться, что поставщик перехватывает функцию select .

Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAEFAULT.

SIO_BSP_HANDLE_SELECT определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.

SIO_BSP_HANDLE_POLL (параметр кода операции: O, T==1)

Извлекает базовый дескриптор поставщика услуг для сокета, используемого функцией WSAPoll . Параметр lpOverlapped должен быть указателем NULL . Возвращаемое значение — SOCKET.

Этот Ioctl используется многоуровневым поставщиком услуг, чтобы убедиться, что поставщик перехватывает функцию WSAPoll .

Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET), параметр lpvOutBuffer является указателем NULL или параметр lpOverlapped не является указателем NULL , SOCKET_ERROR возвращается в результате выполнения этого IOCTL, а WSAGetLastError возвращает WSAEFAULT.

SIO_BSP_HANDLE_POLL определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.

SIO_CHK_QOS (параметр кода операции: I, O, T==3)

Извлекает сведения о характеристиках трафика QoS. На переходном этапе системы отправки между настройкой потока и получением сообщения RESV (дополнительные сведения о переходном этапе см. в разделе Как служба RSVP вызывает TC ), трафик, связанный с потоком RSVP, формируется на основе типа службы (BEST EFFORT, CONTROLLED LOAD или GUARANTEED). Дополнительные сведения см. в разделе Использование SIO_CHK_QOS в разделе Качество обслуживания пакета SDK для платформы.

SIO_CPU_AFFINITY (параметр кода операции: I, T==3)

Включает совместное использование портов и параллелизацию с указанием получения. Если приложение использует этот параметр для связывания сокетов с разными процессорами, а затем привязывает сокеты к одному и тому же адресу, индикаторы получения будут распределяться между сокетами на основе хэша масштабирования на стороне приема (RSS). Параметры RSS не изменяются, поэтому любой поток (локальная конечная точка, пара удаленных конечных точек) всегда будет указан на одном процессоре. В результате все пакеты, принадлежащие данному потоку, будут указаны в одном сокете. Этот IOCTL должен вызываться до привязки, в противном случае будет возвращен WSAEINVAL. Входной буфер — это индекс процессора (на основе 0) типа USHORT. IOCTL несовместим с SO_REUSEADDR и SO_REUSE_MULTICASTPORT. Поддерживается только для сокетов UDP.

Примечание

Если вы используете windows SDK версии 10.0.19041.0 (Windows 10 версии 2004), используйте значение 0x98000015 вместо имени SIO_CPU_AFFINITY.

SIO_ENABLE_CIRCULAR_QUEUEING (параметр кода операции: V, T==1)

Указывает базовому поставщику услуг, ориентированного на сообщения, что новое сообщение никогда не должно быть удалено из-за переполнения очереди буфера. Вместо этого следует исключить самое старое сообщение в очереди, чтобы вместить новое сообщение. Входные и выходные буферы не требуются. Обратите внимание, что этот IOCTL действителен только для сокетов, связанных с ненадежными протоколами, ориентированными на сообщения. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают этот IOCTL.

SIO_FIND_ROUTE (параметр opcode: O, T==1)

При выдаче этот IOCTL запрашивает обнаружение маршрута на удаленный адрес, указанный в качестве sockaddr во входном буфере. Если адрес уже существует в локальном кэше, его запись становится недействительной. В случае с IPX Novell этот вызов инициирует IPX GetLocalTarget (GLT), который запрашивает в сети заданный удаленный адрес.

SIO_FLUSH (параметр opcode: V, T==1)

Удаляет текущее содержимое очереди отправки, связанной с этим сокетом. Входные и выходные буферы не требуются. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают этот IOCTL.

SIO_GET_BROADCAST_ADDRESS (параметр opcode: O, T==1)

Этот IOCTL заполняет выходной буфер структурой sockaddr , содержащей подходящий широковещательный адрес для использования с sendto/ WSASendTo. Этот IOCTL не поддерживается для сокетов IPv6 и возвращает код ошибки WSAENOPROTOOPT .

SIO_GET_EXTENSION_FUNCTION_POINTER (параметр opcode: O, I, T==1)

Получение указателя на указанную функцию расширения, поддерживаемую связанным поставщиком услуг. Входной буфер содержит глобальный уникальный идентификатор (GUID), значение которого определяет функцию расширения. Указатель на нужную функцию возвращается в выходном буфере. Идентификаторы функций расширения устанавливаются поставщиками услуг и должны быть включены в документацию поставщика, которая описывает возможности и семантику функций расширения.

Значения GUID для функций расширений, поддерживаемых поставщиком услуг WINDOWS TCP/IP, определяются в файле заголовка Mswsock.h . Ниже приведены возможные значения для этих идентификаторов GUID.

Термин Описание
WSAID_ACCEPTEX
Функция расширения AcceptEx .
WSAID_CONNECTEX
Функция расширения ConnectEx .
WSAID_DISCONNECTEX
Функция расширения DisconnectEx .
WSAID_GETACCEPTEXSOCKADDRS
Функция расширения GetAcceptExSockaddrs .
WSAID_TRANSMITFILE
Функция расширения TransmitFile .
WSAID_TRANSMITPACKETS
Функция расширения TransmitPackets .
WSAID_WSARECVMSG
Функция расширения LPFN_WSARECVMSG (WSARecvMsg).
WSAID_WSASENDMSG
Функция расширения WSASendMsg .

SIO_GET_GROUP_QOS (параметр opcode: O, I, T==1)

Зарезервировано для использования в будущем с сокетами.

Получение структуры QOS , связанной с группой сокетов, к которой принадлежит этот сокет. Входной буфер является необязательным. Некоторые протоколы (например, RSVP) позволяют использовать входной буфер для определения качества запроса на обслуживание. Структура QOS будет скопирована в выходной буфер. Если этот сокет не принадлежит к соответствующей группе сокетов, для элементов SendingFlowspec и ReceivingFlowspec возвращаемой структуры QOS устанавливается значение NULL. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают качество обслуживания.

SIO_GET_INTERFACE_LIST (параметр opcode: O, T==0)

Возвращает список настроенных IP-интерфейсов и их параметров в виде массива INTERFACE_INFO структур.

Примечание

Поддержка этой команды является обязательной для поставщиков служб TCP/IP, совместимых с Windows Sockets 2.

Параметр lpvOutBuffer указывает на буфер, в котором хранятся сведения об интерфейсах в виде массива INTERFACE_INFO структур для одноадресных IP-адресов в интерфейсах. Параметр cbOutBuffer указывает длину выходного буфера. Количество возвращенных интерфейсов (количество структур, возвращаемых в буфере, на который указывает параметр lpvOutBuffer ) можно определить на основе фактической длины выходного буфера, возвращаемого в параметре lpcbBytesReturned .

Если функция WSAIoctl вызывается с SIO_GET_INTERFACE_LIST и член уровня параметра socket не определен как IPPROTO_IP, возвращается WSAEINVAL . Вызов функции WSAIoctl с SIO_GET_INTERFACE_LIST возвращает WSAEFAULT , если параметр cbOutBuffer , указывающий длину буфера вывода, слишком мал, получает список настроенных интерфейсов.

SIO_GET_INTERFACE_LIST поддерживается в Windows Me/98 и Windows NT 4.0 с пакетом обновления 4 (SP4) и более поздних версий.

SIO_GET_INTERFACE_LIST_EX (параметр opcode: O, T==0)

Зарезервировано для использования в будущем с сокетами.

Возвращает список настроенных IP-интерфейсов и их параметров в виде массива INTERFACE_INFO_EX структур.

Параметр lpvOutBuffer указывает на буфер, в котором хранятся сведения об интерфейсах в виде массива INTERFACE_INFO_EX структур для одноадресных IP-адресов в интерфейсе. Параметр cbOutBuffer указывает длину выходного буфера. Количество возвращенных интерфейсов (количество структур, возвращаемых в lpvOutBuffer) можно определить на основе фактической длины выходного буфера, возвращаемого в параметре lpcbBytesReturned .

SIO_GET_INTERFACE_LIST_EX в настоящее время не поддерживается в Windows.

SIO_GET_QOS (параметр opcode: O, T==1)

Зарезервировано для использования в будущем с сокетами. Получение структуры QOS , связанной с сокетом. Входной буфер является необязательным. Некоторые протоколы (например, RSVP) позволяют использовать входной буфер для определения качества запроса на обслуживание. Структура QOS будет скопирована в выходной буфер. Размер выходного буфера должен быть достаточно большим, чтобы он мог содержать полную структуру QOS . Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают качество обслуживания.

Отправитель не может вызывать SIO_GET_QOS , пока сокет не будет подключен.

Получатель может вызвать SIO_GET_QOS сразу после привязки.

SIO_GET_TX_TIMESTAMP

IOCTL сокета, используемый для получения меток времени для передаваемых пакетов (TX). Допустимо только для сокетов датаграмм.

Код элемента управления SIO_GET_TX_TIMESTAMP удаляет метку времени передачи из очереди метки времени передачи сокета. Сначала включите прием меток времени с помощью IOCTL сокета SIO_TIMESTAMPING . Затем извлеките метки времени tx по идентификатору, вызвав функцию WSAIoctl (или WSPIoctl) со следующими параметрами.

Для SIO_GET_TX_TIMESTAMP входные данные — это идентификатор метки времени UINT32 , а выходные данные — значение метки времени UINT64 . При успешном выполнении метка времени tx доступна и возвращается. Если метки времени передачи недоступны, WSAGetLastError возвращает WSAEWOULDBLOCK.

Примечание

Метки времени TX не поддерживаются при выполнении объединенной отправки через UDP_SEND_MSG_SIZE.

См. также раздел Метка времени Winsock.

SIO_IDEAL_SEND_BACKLOG_CHANGE (параметр opcode: V, T==0)

Уведомляет приложение при изменении значения идеальной невыполненной работы по отправке (ISB) для базового подключения.

При отправке данных через TCP-подключение с помощью сокетов Windows важно сохранить достаточный объем незавершенных данных (отправленных, но еще не подтвержденных) в TCP для достижения максимальной пропускной способности. Идеальное значение для объема невыполненных данных для достижения наилучшей пропускной способности для TCP-подключения называется идеальным размером невыполненной работы по отправке (ISB). Значение ISB является функцией продукта задержки пропускной способности TCP-подключения и объявленного окна приема получателя (и частично объема перегрузки в сети).

Значение ISB для каждого подключения доступно в реализации протокола TCP в Windows Server 2008, Windows Vista с пакетом обновления 1 (SP1) и более поздних версиях операционной системы. Приложение может использовать SIO_IDEAL_SEND_BACKLOG_CHANGE IOCTL для получения уведомлений о динамическом изменении значения ISB для подключения.

Дополнительные сведения см. в справочнике по SIO_IDEAL_SEND_BACKLOG_CHANGE .

SIO_IDEAL_SEND_BACKLOG_CHANGE поддерживается в Windows Server 2008, Windows Vista с пакетом обновления 1 (SP1) и более поздних версиях операционной системы.

SIO_IDEAL_SEND_BACKLOG_QUERY (параметр кода операции: O, T==0)

Извлекает идеальное значение невыполненной работы по отправке (ISB) для базового подключения.

При отправке данных через TCP-подключение с помощью сокетов Windows важно сохранить достаточный объем незавершенных данных (отправленных, но еще не подтвержденных) в TCP для достижения максимальной пропускной способности. Идеальное значение для объема невыполненных данных для достижения наилучшей пропускной способности для TCP-подключения называется идеальным размером невыполненной работы по отправке (ISB). Значение ISB является функцией продукта задержки пропускной способности TCP-подключения и объявленного окна приема получателя (и частично объема перегрузки в сети).

Значение ISB для каждого подключения доступно в реализации протокола TCP в Windows Server 2008 и более поздних версиях. Приложение может использовать SIO_IDEAL_SEND_BACKLOG_QUERY IOCTL для запроса значения ISB для подключения.

Дополнительные сведения см. в справочнике по SIO_IDEAL_SEND_BACKLOG_QUERY .

SIO_IDEAL_SEND_BACKLOG_QUERY поддерживается в Windows Server 2008, Windows Vista с пакетом обновления 1 (SP1) и более поздних версиях операционной системы.

SIO_KEEPALIVE_VALS (параметр кода операции: I, T==3)

Включает или отключает параметр для каждого подключения параметра проверки активности TCP, который указывает время ожидания и интервал активности tcp-активности. Дополнительные сведения о параметре поддержания активности см. в разделе 4.2.3.6 статьи Требования к узлам Интернета — уровни связи , указанные в RFC 1122, доступные на веб-сайте IETF. (Этот ресурс может быть доступен только на английском языке.)

SIO_KEEPALIVE_VALS можно использовать для включения или отключения проб проверки активности, а также для задания времени ожидания и интервала проверки активности. Время ожидания активности указывает время ожидания (в миллисекундах) без активности до отправки первого пакета проверки активности. Интервал поддержания активности указывает интервал в миллисекундах между отправкой последовательных пакетов проверки активности, если подтверждение не получено.

Параметр SO_KEEPALIVE , который является одним из SOL_SOCKET параметров сокета, также можно использовать для включения или отключения активности TCP при подключении, а также для запроса текущего состояния этого параметра. Чтобы запросить, включена ли поддержка TCP в сокете, можно вызвать функцию getsockopt с параметром SO_KEEPALIVE . Чтобы включить или отключить протокол TCP Keep-Alive, можно вызвать функцию setsockopt с параметром SO_KEEPALIVE . Если поддержка активности TCP включена с SO_KEEPALIVE, то параметры TCP по умолчанию используются для времени ожидания и интервала активности, если эти значения не были изменены с помощью SIO_KEEPALIVE_VALS.

Дополнительные сведения см. в справочнике по SIO_KEEPALIVE_VALS . SIO_KEEPALIVE_VALS поддерживается в Windows 2000 и более поздних версиях.

SIO_LOOPBACK_FAST_PATH (параметр кода операции: I, T==3)

Настраивает сокет TCP для меньшей задержки и ускорения операций в интерфейсе замыкания на себя. Этот IOCTL запрашивает, чтобы стек TCP/IP использовал специальный быстрый путь для операций замыкания на себя в этом сокете. IOCTL SIO_LOOPBACK_FAST_PATH можно использовать только с сокетами TCP. Этот IOCTL должен использоваться на обеих сторонах сеанса замыкания на себя. Быстрый путь tcp-замыкания на себя поддерживается с помощью интерфейса замыкания на себя IPv4 или IPv6. По умолчанию SIO_LOOPBACK_FAST_PATH отключена.

Дополнительные сведения см. в справочнике по SIO_LOOPBACK_FAST_PATH . SIO_LOOPBACK_FAST_PATH поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_MULTIPOINT_LOOPBACK (параметр кода операции: V, T==1)

Определяет, будут ли данные, отправленные приложением на локальном компьютере (не обязательно с помощью одного и того же сокета) в сеансе многоадресной рассылки, получаться сокетом, присоединенным к целевой группе многоадресной рассылки в интерфейсе замыкания на себя. Значение TRUE приводит к тому, что данные многоадресной рассылки, отправляемые приложением на локальном компьютере, доставляются в прослушивающий сокет в интерфейсе замыкания на себя. Значение FALSE предотвращает доставку многоадресных данных, отправленных приложением на локальном компьютере, в прослушивающий сокет в интерфейсе замыкания на себя. По умолчанию SIO_MULTIPOINT_LOOPBACK включен.

SIO_MULTICAST_SCOPE (параметр кода операции: I, T==1)

Указывает область, по которым будет осуществляться многоадресная рассылка. Область определяется как количество сегментов перенаправленной сети, которые должны быть охвачены. Нулевое область указывает на то, что многоадресная передача не будет размещаться по проводу, но может быть распространена по сокетам в локальном узле. Область значение 1 (по умолчанию) указывает, что передача будет размещена по проводу, но не будет пересекать маршрутизаторы. Более высокие значения область определяют количество маршрутизаторов, которые можно пересечь. Обратите внимание, что это соответствует параметру срока жизни (TTL) в многоадресной рассылке IP. По умолчанию область равно 1.

SIO_QUERY_RSS_PROCESSOR_INFO (параметр opcode: O, T==1)

Запрашивает связь между сокетом и ядром процессора RSS и узлом NUMA.

IOCTL SIO_QUERY_RSS_PROCESSOR_INFO возвращает SOCKET_PROCESSOR_AFFINITY структуру, содержащую PROCESSOR_NUMBER и идентификатор узла NUMA. Возвращаемая структура PROCESSOR_NUMBER содержит номер группы и относительный номер процессора в группе.

Дополнительные сведения см. в справочнике по SIO_QUERY_RSS_PROCESSOR_INFO . SIO_QUERY_RSS_PROCESSOR_INFO поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_QUERY_RSS_SCALABILITY_INFO (параметр opcode: O, T==3)

Запросы разгружают интерфейсы для возможности масштабирования на стороне получения (RSS). Структура аргументов, возвращаемая для SIO_QUERY_RSS_SCALABILITY_INFO , указывается в структуре RSS_SCALABILITY_INFO , определенной в файле заголовка Mstcpip.h . Эта структура определяется следующим образом:

// Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO {
   BOOLEAN RssEnabled;
} RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;

Значение, возвращаемое в элементе RssEnabled , указывает, включена ли RSS хотя бы в одном интерфейсе.

Если выходной буфер недостаточно велик для структуры RSS_SCALABILITY_INFO ( cbOutBuffer меньше размера RSS_SCALABILITY_INFO) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAEINVAL.

В высокоскоростных сетях, где несколько ЦП находятся в одной системе, возможность стека сетевых протоколов хорошо масштабироваться в системе с несколькими ЦП блокируется, так как архитектура NDIS 5.1 и более ранних версий ограничивает обработку протокола приема одним ЦП. Масштабирование на стороне получения (RSS) устраняет эту проблему, позволяя распределять сетевую нагрузку сетевого адаптера между несколькими ЦП.

SIO_QUERY_RSS_SCALABILITY_INFO поддерживается в Windows Vista и более поздних версиях.

SIO_QUERY_TRANSPORT_SETTING (параметр кода операции: I, T==3)

Запрашивает параметры транспорта в сокете. Запрашиваемый параметр транспорта основан на TRANSPORT_SETTING_ID , переданном в параметре lpvInBuffer .

Единственный параметр транспорта в настоящее время определяется для возможности REAL_TIME_NOTIFICATION_CAPABILITY в сокете TCP.

Если TRANSPORT_SETTING_ID имеет член Guid , заданный как REAL_TIME_NOTIFICATION_CAPABILITY, это запрос на запрос параметров уведомлений в реальном времени для сокета TCP, используемого с ControlChannelTrigger для получения фоновых сетевых уведомлений в приложении Магазина Windows. Если вызов WSAIoctl или WSPIoctl выполнен успешно, этот IOCTL возвращает REAL_TIME_NOTIFICATION_SETTING_OUTPUT структуру с текущим состоянием.

Дополнительные сведения см. в справочнике по SIO_QUERY_TRANSPORT_SETTING . SIO_QUERY_TRANSPORT_SETTING поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE (параметр кода операции: O, T==3)

Запрашивает дескриптор конечной точки ALE.

Платформа фильтрации Windows (МПП) поддерживает проверку и изменение сетевого трафика. В Windows Vista МПП фокусируется на сценариях, в которых главный компьютер является конечной точкой связи. Однако в Windows Server 2008 существуют реализации пограничного брандмауэра, которые хотели бы использовать платформу МПП для проверки и передачи сквозного трафика через прокси-сервер. Примером такого пограничного устройства является сервер Internet Security and Acceleration (ISA).

В некоторых сценариях брандмауэра может потребоваться возможность внедрения входящего пакета в путь отправки, связанный с существующей конечной точкой. Необходим механизм обнаружения дескриптора конечной точки транспортного уровня, связанного с конечной точкой назначения. Приложение, создающее конечную точку, владеет этими конечными точками транспортного уровня. Этот IOCTL используется для предоставления дескриптора сокета для сопоставления дескрипторов конечной точки транспортного уровня.

Если выходной буфер недостаточно велик для дескриптора конечной точки ( cbOutBuffer меньше размера UINT64) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAEINVAL.

SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE поддерживается в Windows Vista и более поздних версиях.

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT (параметр opcode: I, T==3)

Запрашивает контекст перенаправления для записи перенаправления, используемой службой перенаправления платформы фильтрации Windows (WFP).

SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT IOCTL используется для отслеживания прокси-подключений для перенаправленных подключений сокета. Эта функция МПП упрощает отслеживание записей перенаправления от первоначального перенаправления подключения к окончательному подключению к месту назначения.

Дополнительные сведения см. в справочнике по SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT . SIO_QUERY_WFP_CONNECTION_REDIRECT_CONTEXT поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS (параметр opcode: I, T==3)

Запрашивает запись перенаправления для принятого подключения TCP/IP для использования службой перенаправления платформы фильтрации Windows (WFP).

SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS IOCTL используется для отслеживания прокси-подключений для перенаправленных подключений сокета. Эта функция МПП упрощает отслеживание записей перенаправления от первоначального перенаправления подключения к окончательному подключению к месту назначения.

Дополнительные сведения см. в справочнике по SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS . SIO_QUERY_WFP_CONNECTION_REDIRECT_RECORDS поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_RCVALL (параметр кода операции: I, T==3)

Позволяет сокету получать все пакеты IPv4 или IPv6, передаваемые через сетевой интерфейс. Дескриптор сокета, передаваемый в функцию WSAIoctl , должен быть одним из следующих:

  • Сокет IPv4, созданный с семейством адресов, для AF_INET, типом сокета SOCK_RAW и протоколом, равным IPPROTO_IP.
  • Сокет IPv6, созданный с семейством адресов, для AF_INET6, типом сокета SOCK_RAW и протоколом, равным IPPROTO_IPV6.

Сокет также должен быть привязан к явному локальному интерфейсу IPv4 или IPv6, что означает, что невозможно выполнить привязку к INADDR_ANY или in6addr_any.

В Windows Server 2008 и более ранних версиях параметр IOCTL SIO_RCVALL не будет записывать локальные пакеты, отправленные из сетевого интерфейса. Сюда входили пакеты, полученные на другом интерфейсе и перенаправляемые сетевой интерфейс, указанный для SIO_RCVALL IOCTL.

В Windows 7 и Windows Server 2008 R2 это значение было изменено таким образом, чтобы локальные пакеты, отправляемые из сетевого интерфейса, также записывались. Сюда входят пакеты, полученные в другом интерфейсе, а затем перенаправляемые сетевой интерфейс, привязанный к сокету с SIO_RCVALL IOCTL.

Для установки этого IOCTL требуются права администратора на локальном компьютере.

Эту функцию иногда называют неразборчивым режимом.

Возможные значения для параметра IOCTL SIO_RCVALL указываются в перечислении RCVALL_VALUE , определенном в файле заголовка Mstcpip.h . Возможные значения для SIO_RCVALL:

Термин Описание
RCVALL_OFF
Отключите этот параметр, чтобы сокет не получал все пакеты IPv4 или IPv6 в сети.
RCVALL_ON
Включите этот параметр, чтобы сокет получал все пакеты IPv4 или IPv6 в сети. Этот параметр включает неразборчивый режим на сетевом интерфейсе карта , если сетевой адаптер поддерживает неразборчивый режим. В сегменте локальной сети с сетевым концентратором сетевая карта, поддерживающая неразборчивый режим, будет записывать весь трафик IPv4 или IPv6 в локальной сети, включая трафик между другими компьютерами в том же сегменте локальной сети. Все захваченные пакеты (IPv4 или IPv6, в зависимости от сокета) будут доставлены в необработанный сокет.
Этот параметр не будет записывать другие пакеты (например, ARP, IPX и NetBEUI) в интерфейсе.
Netmon использует тот же режим для сетевого интерфейса, но не использует этот параметр для отслеживания трафика.
RCVALL_SOCKETLEVELONLY
Эта функция в настоящее время не реализована, поэтому настройка этого параметра не влияет.
RCVALL_IPLEVEL
Включите этот параметр, чтобы сокет IPv4 или IPv6 получал все пакеты на уровне IP-адресов в сети. Этот параметр не включает неразборчивый режим на сетевом интерфейсе карта. Этот параметр влияет только на обработку пакетов на уровне IP-адреса. Сетевой адаптер по-прежнему получает только пакеты, направленные на настроенные одноадресные и многоадресные адреса. Однако сокет с включенным параметром будет получать не только пакеты, направленные на определенные IP-адреса, но и все пакеты IPv4 или IPv6, получаемые сетевой картой.
Этот параметр не будет записывать другие пакеты (например, ARP, IPX и NetBEUI), полученные в интерфейсе.

Дополнительные сведения см. в справочнике по SIO_RCVALL .

SIO_RCVALL поддерживается в Windows 2000 и более поздних версиях.

SIO_RCVALL_IGMPMCAST (параметр opcode: I, T==3)

Позволяет сокету получать весь многоадресный IP-трафик IGMP в сети без получения другого многоадресного IP-трафика. Дескриптор сокета, передаваемый в функцию WSAIoctl , должен иметь AF_INET семейство адресов, SOCK_RAW тип сокета и протокол IPPROTO_IGMP. Сокет также должен быть привязан к явному локальному интерфейсу, что означает, что привязка к INADDR_ANY невозможна.

После привязки сокета и набора IOCTL вызовы функций WSARecv или recv возвращают многоадресные IP-датаграммы, проходящие через заданный интерфейс. Обратите внимание, что необходимо предоставить достаточно большой буфер. Для установки этого IOCTL требуются права администратора на локальном компьютере.

SIO_RCVALL_IGMPMCAST поддерживается в Windows 2000 и более поздних версиях.

SIO_RCVALL_MCAST (параметр opcode: I, T==3)

Позволяет сокету получать весь многоадресный IP-трафик в сети (то есть все IP-пакеты, предназначенные для IP-адресов в диапазоне от 224.0.0.0 до 239.255.255.255). Дескриптор сокета, передаваемый в функцию WSAIoctl , должен иметь AF_INET семейство адресов, SOCK_RAW тип сокета и протокол IPPROTO_UDP. Сокет также должен быть привязан к явному локальному интерфейсу, что означает, что привязка к INADDR_ANY невозможна. Сокет должен привязаться к нулю порта.

После привязки сокета и установки IOCTL вызовы функций WSARecv или recv возвращают многоадресные IP-датаграммы, проходящие через заданный интерфейс. Обратите внимание, что необходимо предоставить достаточно большой буфер. Для установки этого IOCTL требуются права администратора на локальном компьютере.

SIO_RCVALL_MCAST поддерживается в Windows 2000 и более поздних версиях.

SIO_RELEASE_PORT_RESERVATION (параметр кода операции: I, T==3)

Освобождает резервирование среды выполнения для блока портов TCP или UDP. Резервирование среды выполнения для освобождения должно быть получено из процесса выдачи с помощью SIO_ACQUIRE_PORT_RESERVATION IOCTL.

Дополнительные сведения см. в справочнике по SIO_RELEASE_PORT_RESERVATION .

SIO_RELEASE_PORT_RESERVATION поддерживается в Windows Vista и более поздних версиях операционной системы.

SIO_ROUTING_INTERFACE_CHANGE (параметр кода операции: I, T==1)

Для получения уведомления об изменении интерфейса маршрутизации, которое должно использоваться для доступа к удаленному адресу во входном буфере (указывается в виде структуры sockaddr ). Никакие выходные данные о новом интерфейсе маршрутизации не будут предоставлены по завершении этого IOCTL; завершение просто указывает, что интерфейс маршрутизации для данного назначения изменился и должен запрашиваться с помощью SIO_ROUTING_INTERFACE_QUERY IOCTL.

Предполагается, что приложение использует перекрывающиеся операции ввода-вывода, чтобы получать уведомления об изменении интерфейса маршрутизации через выполнение запроса SIO_ROUTING_INTERFACE_CHANGE . Кроме того, если SIO_ROUTING_INTERFACE_CHANGE IOCTL выдается в неблокирующем сокете с параметрами lpOverlapped и lpCompletionRoutine , установленными в значение NULL, он немедленно возвращает и WSAEWOULDBLOCK как ошибку, и приложение может ждать событий изменения маршрутизации с помощью вызова WSAEventSelect или WSAAsyncSelect с FD_ROUTING_INTERFACE_CHANGE битом, заданным в битовой маске сетевого события.

Признается, что сведения о маршрутизации в большинстве случаев остаются стабильными, поэтому требование, чтобы приложение сохраняло несколько необработанных ICTL для получения уведомлений обо всех интересующих его назначениях, а также того, чтобы поставщик услуг отслеживал эти запросы на уведомления, будет использовать значительный объем системных ресурсов. Этой ситуации можно избежать, расширив значение входных параметров и ослабив требования поставщика услуг следующим образом:

  • Приложение может указать адрес с подстановочными знаками для конкретного семейства протоколов (такой же, как в вызове привязки при запросе привязки к любому доступному адресу), чтобы запросить уведомления об изменениях маршрутизации. Это позволяет приложению хранить только одну выдающуюся SIO_ROUTING_INTERFACE_CHANGE для всех сокетов и назначений, а затем использовать SIO_ROUTING_INTERFACE_QUERY для получения фактических сведений о маршрутизации.
  • Поставщик услуг имеет возможность игнорировать сведения, указанные приложением, во входном буфере SIO_ROUTING_INTERFACE_CHANGE (как если бы приложение указало адрес с подстановочными знаками) и завершить SIO_ROUTING_INTERFACE_CHANGE IOCTL или сигнальное событие FD_ROUTING_INTERFACE_CHANGE в случае изменения сведений о маршрутизации (а не только маршрут к месту назначения, указанному во входном буфере).

SIO_ROUTING_INTERFACE_QUERY (параметр opcode: I, O, T==1)

Для получения адреса локального интерфейса (представленного в виде структуры sockaddr ), который следует использовать для отправки на удаленный адрес, указанный во входном буфере (как sockaddr). Адреса удаленной многоадресной рассылки можно отправить во входной буфер, чтобы получить адрес предпочтительного интерфейса для многоадресной передачи. В любом случае возвращенный адрес интерфейса может использоваться приложением в последующем запросе bind().

Обратите внимание, что маршруты могут быть изменены. Поэтому приложения не могут полагаться на сведения, возвращаемые SIO_ROUTING_INTERFACE_QUERY , быть постоянными. Приложения могут регистрироваться для маршрутизации уведомлений об изменениях через SIO_ROUTING_INTERFACE_CHANGE IOCTL, который предоставляет уведомления через перекрывающиеся операции ввода-вывода или события FD_ROUTING_INTERFACE_CHANGE. Следующую последовательность действий можно использовать, чтобы гарантировать, что приложение всегда имеет текущие сведения об интерфейсе маршрутизации для данного назначения:

  • Проблема SIO_ROUTING_INTERFACE_CHANGE IOCTL
  • Проблема SIO_ROUTING_INTERFACE_QUERY IOCTL
  • Каждый раз, когда SIO_ROUTING_INTERFACE_CHANGE IOCTL уведомляет об изменении маршрутизации (путем перекрытия операций ввода-вывода или сигнала FD_ROUTING_INTERFACE_CHANGE события), следует повторять всю последовательность действий.

Если выходной буфер недостаточно велик, чтобы содержать адрес интерфейса, SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAEFAULT. В этом случае требуемый размер выходного буфера будет возвращен в lpcbBytesReturned . Обратите внимание, что код ошибки WSAEFAULT также возвращается, если параметр lpvInBuffer, lpvOutBuffer или lpcbBytesReturned не полностью содержится в допустимой части адресного пространства пользователя.

Если конечный адрес, указанный во входном буфере, не может быть достигнут через любой из доступных интерфейсов, SOCKET_ERROR возвращается в результате этого IOCTL, а WSAGetLastError возвращает WSAENETUNREACH или даже WSAENETDOWN в случае потери всех сетевых подключений.

SIO_SET_COMPATIBILITY_MODE (параметр кода операции: I, T==3)

Запрашивает, как сетевой стек должен обрабатывать определенные поведения, для которых способ обработки по умолчанию может отличаться в разных версиях Windows. Структура аргументов для SIO_SET_COMPATIBILITY_MODE указывается в структуре WSA_COMPATIBILITY_MODE , определенной в файле заголовка Mswsockdef.h . Эта структура определяется следующим образом:

/* Argument structure for SIO_SET_COMPATIBILITY_MODE */
typedef struct _WSA_COMPATIBILITY_MODE {
    WSA_COMPATIBILITY_BEHAVIOR_ID BehaviorId;
    ULONG TargetOsVersion;
} WSA_COMPATIBILITY_MODE, *PWSA_COMPATIBILITY_MODE;

Значение, указанное в элементе BehaviorId , указывает на запрошенное поведение. Значение, указанное в элементе TargetOsVersion , указывает версию Windows, запрашиваемую для поведения.

Элемент BehaviorId может быть одним из значений из типа перечисления WSA_COMPATIBILITY_BEHAVIOR_ID , определенного в файле заголовка Mswsockdef.h . Ниже приведены возможные значения для элемента BehaviorId .

Термин Описание
WsaBehaviorAll
Это эквивалентно запросу всех возможных совместимых поведений, определенных для WSA_COMPATIBILITY_BEHAVIOR_ID.
WsaBehaviorReceiveBuffering
Если для элемента TargetOsVersion задано значение для Windows Vista или более поздней версии, уменьшение размера буфера приема TCP в этом сокете с помощью параметра сокета SO_RCVBUF разрешено даже после установки TCP-подключения.
Если для элемента TargetOsVersion задано значение, предшествующее Windows Vista, уменьшение размера буфера приема TCP в этом сокете с помощью параметра сокета SO_RCVBUF не допускается после установки подключения.
WsaBehaviorAutoTuning
Если для элемента TargetOsVersion задано значение для Windows Vista или более поздней версии, включена автоматическая настройка окна получения, а коэффициент масштабирования окна TCP уменьшается до 2 со значения по умолчанию 8.
Если для Параметра TargetOsVersion задано значение, предшествующее Windows Vista, автоматическая настройка окна получения отключена. Параметр масштабирования окна TCP также отключен, а максимальный размер окна получения true ограничен 65 535 байтами. Параметр масштабирования окна TCP не может быть согласован при подключении, даже если для этого сокета был вызван параметр SO_RCVBUF , указывающий значение, превышающее 65 535 байт, до установки подключения.

Дополнительные сведения см. в справочнике по SIO_SET_COMPATIBILITY_MODE .

SIO_SET_COMPATIBILITY_MODE поддерживается в Windows Vista и более поздних версиях.

SIO_SET_GROUP_QOS (параметр кода операции: I, T==1)

Зарезервировано.

SIO_SET_PRIORITY_HINT (параметр кода операции: I, T==3)

Предоставляет указание базовому транспортному протоколу для обработки трафика в этом сокете с определенным приоритетом. LpvInBuffer должен указывать на переменную типа PRIORITY_HINT с параметром cbInBuffer, равным sizeof(PRIORITY_HINT). Параметры lpvOutBuffer и cbOutBuffer должны иметь значение NULL и 0 соответственно. Реализация ПРОТОКОЛА TCP Microsoft Windows поддерживает этот IOCTL, начиная с Windows 10, версия 1809 (10.0; Сборка 17763) и более поздних версий: если для запрошенного приоритета задано значение IoPriorityHintVeryLow, TCP использует измененную версию алгоритма LEDBAT (определенную в RFC 6817) для управления скоростью исходящего трафика в сокете. Этот IOCTL не влияет на входящий трафик. LEDBAT — это алгоритм мусора, и его цель состоит в том, чтобы поддерживать низкую задержку и предотвращать любое негативное влияние на трафик с нормальным приоритетом, выходя из пути при наличии трафика с нормальным приоритетом.

См. также RFC 6817.

SIO_SET_PRIORITY_HINT поддерживается в Windows 10, версия 1809 (10.0; Сборка 17763) и более поздних версий.

SIO_SET_QOS (параметр кода операции: I, T==1)

Свяжите указанную структуру QOS с сокетом. Выходной буфер не требуется, структура QOS будет получена из входного буфера. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают качество обслуживания.

SIO_TCP_INITIAL_RTO (параметр кода операции: I, T==3)

Управляет начальными характеристиками повторной передачи (SYN/SYN+ACK) сокета TCP путем настройки параметров начального времени ожидания повторной передачи (RTO). Параметры конфигурации указываются в структуре TCP_INITIAL_RTO_PARAMETERS .

Дополнительные сведения см. в справочнике по SIO_TCP_INITIAL_RTO . SIO_TCP_INITIAL_RTO поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_TIMESTAMPING

IOCTL сокета, используемый для настройки получения меток времени передачи и получения сокетов. Допустимо только для сокетов датаграмм. Тип входных данных для SIO_TIMESTAMPING — это структура TIMESTAMPING_CONFIG .

См. также раздел Метка времени Winsock.

SIO_TRANSLATE_HANDLE (параметр кода операции: I, O, T==1)

Чтобы получить соответствующий дескриптор для сокетов , допустимый в контексте интерфейса-компаньона (например, TH_NETDEV и TH_TAPI). Во входном буфере указываются константы манифеста, определяющие интерфейс компаньона, а также любые другие необходимые параметры. Соответствующий дескриптор будет доступен в выходном буфере после завершения этой функции. Дополнительные сведения, относящиеся к конкретному интерфейсу-компаньону, см. в соответствующем разделе в приложении Winsock . Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают этот IOCTL для указанного интерфейса-компаньона. Этот IOCTL извлекает связанный дескриптор с помощью SIO_TRANSLATE_HANDLE.

Рекомендуется использовать компонентную объектную модель (COM) вместо этого IOCTL для обнаружения и отслеживания других интерфейсов, которые могут поддерживаться сокетом. Этот IOCTL используется для обеспечения обратной совместимости с системами, в которых COM недоступен или не может использоваться по какой-либо другой причине.

SIO_UDP_CONNRESET (параметр кода операции: I, T==3)

Windows XP: Определяет, передаются ли сообщения PORT_UNREACHABLE UDP. Установите значение TRUE , чтобы включить отчеты. Установите значение FALSE , чтобы отключить отчеты.

SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (параметр кода операции: I, T==3)

Задает запись перенаправления для нового сокета TCP, используемого для подключения к конечному месту назначения для использования службой перенаправления платформы фильтрации Windows (WFP).

IOCTL SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS используется в рамках отслеживания прокси-подключений для перенаправленных подключений сокетов. Эта функция ВПП упрощает отслеживание записей перенаправления от первоначального перенаправления подключения к окончательному подключению к месту назначения.

Дополнительные сведения см. в справочнике по SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS . SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.

SIO_TCP_INFO (параметр opcode: I, O, T==3)

Извлекает статистику TCP для сокета. Статистика TCP предоставляется в TCP_INFO_v0 структуре.

В отличие от получения статистики TCP с помощью функции GetPerTcpConnectionEStats , получение статистики TCP с помощью этого управляющего кода не требует загрузки, хранения и фильтрации таблицы tcp-подключений и не требует повышенных привилегий для использования.

Дополнительные сведения см. в разделе SIO_TCP_INFO. SIO_TCP_INFO поддерживается в Windows 10 версии 1703 Windows Server 2016 и более поздних версиях.

Комментарии

Winsock Ioctls определяются в ряде разных файлов заголовков. К ним относятся файл заголовка Winsock2.h, Mswsock.h и Mstcpip.h .

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

Требования

Требование Значение
Заголовок
Winsock2.h;
Mstcpip.h;
Mswsock.h;
Mswsockdef.h в Windows Vista, Windows Server 2008 и Windows 7 (включает Mswsock.h);
Ws2def.h в Windows Vista, Windows Server 2008 и Windows 7 (включая Winsock2.h);
Ws2ipdef.h в Windows Vista, Windows Server 2008 и Windows 7 (включая Ws2tcpip.h)