Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описаны элементы управления входными и выходными данными Winsock (IOCTLs) для различных выпусков операционных систем Windows. Используйте функцию WSAIoctl или WSPIoctl для выдачи IOCTL Winsock для управления режимом сокета, транспортного протокола или подсистемы связи.
Для некоторых операций ввода-вывода Winsock требуется больше объяснения, чем эта таблица может передаваться; Такие параметры содержат ссылки на дополнительные разделы.
Можно внедрить схему кодирования, которая сохраняет определенные в настоящее время opcodesocket ioctlsocket , обеспечивая удобный способ секционирования пространства идентификатора опкода столько, сколько параметр dwIoControlCode теперь является 32-разрядной сущностью. Параметр dwIoControlCode создан для обеспечения независимости протокола и поставщика при добавлении новых кодов управления при сохранении обратной совместимости с кодами элементов управления Windows Sockets 1.1 и Unix. Параметр dwIoControlCode имеет следующую форму.
Я | О | В | Т | Семейство поставщиков и адресов | Код |
---|---|---|---|---|---|
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.
Если входной буфер действителен для кода, как и 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. Этот тип позволяет компаниям назначать номер поставщика, который отображается в параметре семейства "Поставщик или адрес ". Затем поставщик может определить новые ioCTLs, относящиеся к этому поставщику, не регистрируя IOCTL в clearinghouse, тем самым обеспечивая гибкость и конфиденциальность поставщиков.
Семейство поставщиков и адресов 11-разрядное количество, определяющее поставщика, которому принадлежит код (если T == 3) или содержит семейство адресов, к которому применяется код (если T == 2). Если это код IOCTL Unix (T == 0), этот параметр имеет то же значение, что и код в Unix. Если это универсальный набор сокетов Windows 2 IOCTL (T == 1), этот параметр можно использовать в качестве расширения параметра кода для предоставления дополнительных значений кода.
Код 16-разрядное количество, содержащее определенный код IOCTL для операции.
Коды IOCTL Unix
Поддерживаются следующие коды IOCTL (команды) Unix.
FIONBIO
Включите или отключите режим неблокировки в сокетах. Параметр lpvInBuffer указывает на неподписанный длинный (QoS), который не является ненулевой, если режим неблокировки должен быть включен и ноль, если он должен быть отключен. При создании сокета он работает в режиме блокировки (то есть режим без блокировки отключен). Это соответствует сокетам BSD.
Подпрограмма WSAAsyncSelect или WSAEventSelect автоматически устанавливает сокет в режим неблокировки. Если WSAsyncSelect или WSAEventSelect был выдан на сокете, любая попытка использовать WSAIoctl для настройки сокета обратно в режим блокировки завершится ошибкой wSAEINVAL. Чтобы установить сокет обратно в режим блокировки, приложение должно сначала отключить WSAAsyncSelect, вызвав 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 , чтобы определить, остаются ли останки. Если есть какие-либо обычные данные, предшествующие срочным (вне полосы), он будет получен в порядке. (Обратите внимание, что операции восстановления никогда не будут смешивать OOB и обычные данные в одном вызове.) lpvOutBuffer указывает на boOL, в котором WSAIoctl сохраняет результат.
Команды Сокетов Windows 2
Поддерживаются следующие команды Сокетов Windows 2.
SIO_ACQUIRE_PORT_RESERVATION (параметр opcode: 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 (параметр opcode: 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 передано REAL_TIME_NOTIFICATION_CAPABILITY значение Guid, то это запрос на применение параметров уведомлений в режиме реального времени для сокета TCP, используемого с ControlChannelTrigger для получения фоновых сетевых уведомлений в приложении Магазина Windows.
Дополнительные сведения см . в SIO_APPLY_TRANSPORT_SETTING справочнике. SIO_APPLY_TRANSPORT_SETTING поддерживается в Windows 8, Windows Server 2012 и более поздних версиях.
SIO_ASSOCIATE_HANDLE (параметр opcode: 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 (параметр opcode: 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)
Извлекает дескриптор базового поставщика услуг для заданного сокета. Возвращаемое значение — СОКЕТ.
Поставщик многоуровневой службы никогда не перехватывает этот IOCTL, так как возвращаемое значение должно быть дескриптором сокета от базового поставщика услуг.
Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL и WSAGetLastError возвращает WSAEFAULT.
SIO_BASE_HANDLE определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.
SIO_BSP_HANDLE (параметр opcode: O, T==1)
Извлекает дескриптор поставщика базовых служб для сокета, используемого функцией WSASendMsg . Возвращаемое значение — СОКЕТ.
Этот Ioctl используется многоуровневой службой, чтобы обеспечить перехват функции WSASendMsg .
Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL и WSAGetLastError возвращает WSAEFAULT.
SIO_BSP_HANDLE определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.
SIO_BSP_HANDLE_SELECT (параметр opcode: O, T==1)
Извлекает дескриптор поставщика базовых служб для сокета, используемого функцией select . Возвращаемое значение — СОКЕТ.
Этот объект Ioctl используется многоуровневой службой, чтобы убедиться, что поставщик перехватывает функцию выбора .
Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET) или параметр lpvOutBuffer является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL и WSAGetLastError возвращает WSAEFAULT.
SIO_BSP_HANDLE_SELECT определен в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.
SIO_BSP_HANDLE_POLL (параметр opcode: O, T==1)
Извлекает дескриптор базового поставщика услуг для сокета, используемого функцией WSAPoll . Параметр lpOverlapped должен быть указателем NULL . Возвращаемое значение — СОКЕТ.
Этот объект Ioctl используется многоуровневой поставщиком услуг, чтобы убедиться, что поставщик перехватывает функцию WSAPoll .
Если выходной буфер недостаточно велик для дескриптора сокета ( cbOutBuffer меньше размера SOCKET), параметр lpvOutBuffer является указателем NULL или параметр lpOverlapped не является указателем NULL , SOCKET_ERROR возвращается в результате этого IOCTL и WSAGetLastError возвращает WSAEFAULT.
SIO_BSP_HANDLE_POLL определяется в файле заголовка Mswsock.h и поддерживается в Windows Vista и более поздних версиях.
SIO_CHK_QOS (параметр opcode: I, O, T==3)
Извлекает сведения о характеристиках трафика QoS. Во время переходного этапа отправки системы между настройкой потока и получением сообщения RESV (см. сведения о том, как служба RSVP вызывает TC для получения дополнительных сведений о переходном этапе), трафик, связанный с потоком RSVP, формируется на основе типа службы (BEST EFFORT, CONTROLED LOAD или GUARANTEED). Дополнительные сведения см. в разделе "Использование SIO_CHK_QOS " в разделе " Качество обслуживания " пакета SDK для платформы.
SIO_CPU_AFFINITY (параметр opcode: I, T==3)
Включает совместное использование портов и параллелизацию признаков получения. Если приложение использует этот параметр сокета для связывания сокетов с разными процессорами, а затем привязывает сокеты к одному адресу, то признаки получения будут распределены по сокетам на основе хэша масштабирования на стороне получения (RSS). Параметры RSS не изменяются, поэтому любой поток (локальная конечная точка, пара удаленных конечных точек) всегда будет указан на одном процессоре. В результате все пакеты, принадлежащие заданному потоку, будут указаны в одном сокете. Этот идентификатор IOCTL должен вызываться перед привязкой, в противном случае будет возвращен WSAEINVAL. Входной буфер — это индекс процессора (на основе 0) типа USHORT. IOCTL несовместим с SO_REUSEADDR и SO_REUSE_MULTICASTPORT. Поддерживается только для сокетов UDP.
Замечание
Если вы нацелены на версию 10.0.19041.0 (Windows 10 версии 2004) пакета SDK для Windows, используйте значение 0x98000015
вместо имени SIO_CPU_AFFINITY.
SIO_ENABLE_CIRCULAR_QUEUEING (параметр opcode: V, T==1)
Указывает базовому поставщику услуг, ориентированному на сообщения, что только что прибылное сообщение никогда не должно быть удалено из-за переполнения очереди буфера. Вместо этого необходимо устранить самое старое сообщение в очереди, чтобы разместить только что прибылное сообщение. Входные и выходные буферы не требуются. Обратите внимание, что этот протокол IOCTL действителен только для сокетов, связанных с ненадежными протоколами, ориентированными на сообщения. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают этот протокол IOCTL.
SIO_FIND_ROUTE (параметр opcode: O, T==1)
При выпуске этот протокол IOCTL запрашивает, чтобы маршрут к удаленному адресу, указанному как sockaddr в входном буфере, был обнаружен. Если адрес уже существует в локальном кэше, его запись является недопустимой. В случае IPX Романла этот вызов инициирует 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 для функций расширения, поддерживаемых поставщиком служб TCP/IP Windows, определяются в файле заголовка 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 , а член уровня параметра сокета не определен как IPPROTO_IP, возвращается WSAEINVAL . Вызов функции WSAIoctl с SIO_GET_INTERFACE_LIST возвращает WSAEFAULT , если параметр cbOutBuffer , указывающий длину выходного буфера, слишком мал ro получает список настроенных интерфейсов.
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 (параметр opcode: 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 (параметр opcode: 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 в режиме поддержания активности, функцию setsockopt можно вызвать с помощью параметра SO_KEEPALIVE . Если режим хранения TCP включен с SO_KEEPALIVE, параметры TCP по умолчанию используются для времени ожидания и интервала, если эти значения не были изменены с помощью SIO_KEEPALIVE_VALS.
Дополнительные сведения см . в SIO_KEEPALIVE_VALS справочнике. SIO_KEEPALIVE_VALS поддерживается в Windows 2000 и более поздних версиях.
SIO_LOOPBACK_FAST_PATH (параметр opcode: I, T==3)
Настраивает сокет TCP для снижения задержки и более быстрых операций в интерфейсе обратного цикла. Этот протокол IOCTL запрашивает, что стек TCP/IP использует специальный быстрый путь для операций обратного цикла в этом сокете. SIO_LOOPBACK_FAST_PATH IOCTL можно использовать только с сокетами 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 (параметр opcode: V, T==1)
Определяет, будут ли данные, отправленные приложением на локальном компьютере (не обязательно с тем же сокетом) в сеансе многоадресной рассылки, будут получены сокетом, присоединенным к группе назначения многоадресной рассылки в интерфейсе петли. Значение TRUE приводит к тому, что данные многоадресной рассылки, отправленные приложением на локальном компьютере, будут доставлены в прослушивающий сокет интерфейса петли. Значение FALSE предотвращает передачу данных многоадресной рассылки, отправленных приложением на локальном компьютере, в прослушивающий сокет интерфейса петли. По умолчанию SIO_MULTIPOINT_LOOPBACK включен.
SIO_MULTICAST_SCOPE (параметр opcode: I, T==1)
Указывает область, по которой будут выполняться передачи многоадресной рассылки. Область определяется как количество сегментов маршрутизации сети, которые необходимо охватывать. Область нуля указывает, что многоадресная передача не будет размещена на проводе, но может распространяться по сокетам в локальном узле. Значение области одного (по умолчанию) указывает, что передача будет помещена на провод, но не будет пересекать маршрутизаторы. Более высокие значения области определяют количество маршрутизаторов, которые можно перекрестить. Обратите внимание, что это соответствует параметру времени жизни (TTL) в многоадресной рассылке IP-адресов. По умолчанию область — 1.
SIO_QUERY_RSS_PROCESSOR_INFO (параметр opcode: O, T==1)
Запрашивает связь между сокетом и ядром процессора RSS и узлом NUMA.
SIO_QUERY_RSS_PROCESSOR_INFO IOCTL возвращает структуру SOCKET_PROCESSOR_AFFINITY, содержащую идентификатор узла NUMA и PROCESSOR_NUMBER. Возвращаемая 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 (параметр opcode: I, T==3)
Запрашивает параметры транспорта в сокете. Запрашиваемый параметр транспорта основан на TRANSPORT_SETTING_ID , переданном в параметре lpvInBuffer .
Единственный на данный момент определенный параметр транспорта — это возможность REAL_TIME_NOTIFICATION_CAPABILITY в сокете TCP.
Если TRANSPORT_SETTING_ID имеет REAL_TIME_NOTIFICATION_CAPABILITY член Guid, то это запрос на запрос параметров уведомлений в режиме реального времени для сокета 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 (параметр opcode: O, T==3)
Запрашивает дескриптор конечной точки применения уровня приложений (ALE).
Платформа фильтрации Windows (МПП) поддерживает проверку и изменение сетевого трафика. В Windows Vista МПП ориентирована на сценарии, в которых хост-компьютер является конечной точкой связи. Однако в Windows Server 2008 существуют пограничные реализации брандмауэра, которые хотели бы использовать платформу МПП для проверки и передачи трафика прокси-сервера. Сервер 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 (МПП).
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 (МПП).
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 (параметр opcode: 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.255). Дескриптор сокета, переданный функции WSAIoctl , должен иметь семейство адресов AF_INET, тип сокета SOCK_RAW и протокол IPPROTO_UDP. Сокет также должен привязаться к явному локальному интерфейсу, что означает, что нельзя привязать к INADDR_ANY. Сокет должен привязаться к нулю порта.
После привязки сокета и набора IOCTL вызовы функций WSARecv или recv возвращают многоадресные IP-диаграммы данных, проходящие через заданный интерфейс. Обратите внимание, что необходимо предоставить достаточно большой буфер. Установка этого IOCTL требует прав администратора на локальном компьютере.
SIO_RCVALL_MCAST поддерживается в Windows 2000 и более поздних версиях.
SIO_RELEASE_PORT_RESERVATION (параметр opcode: I, T==3)
Освобождает резервирование среды выполнения для блока портов TCP или UDP. Резервирование среды выполнения должно быть получено из процесса выдачи с помощью SIO_ACQUIRE_PORT_RESERVATION IOCTL.
Дополнительные сведения см . в SIO_RELEASE_PORT_RESERVATION справочнике.
SIO_RELEASE_PORT_RESERVATION поддерживается в Windows Vista и более поздних версиях операционной системы.
SIO_ROUTING_INTERFACE_CHANGE (параметр opcode: I, T==1)
Чтобы получить уведомление об изменении интерфейса маршрутизации, которое должно использоваться для достижения удаленного адреса в входном буфере (указанной как структура sockaddr ). После завершения этого протокола IOCTL выходные данные о новом интерфейсе маршрутизации не будут предоставлены; Завершение просто указывает, что интерфейс маршрутизации для заданного назначения изменился и должен запрашиваться с помощью SIO_ROUTING_INTERFACE_QUERY IOCTL.
Предполагается, что, хотя и не требуется, приложение использует перекрывающиеся операции ввода-вывода для уведомления об изменении интерфейса маршрутизации путем завершения запроса SIO_ROUTING_INTERFACE_CHANGE . Кроме того, если SIO_ROUTING_INTERFACE_CHANGE IOCTL выдается в сокете без блокировки с параметрами lpOverlapped и lpCompletionRoutine с значением NULL), он завершится немедленно и WSAEWEWOULDBLOCK в качестве ошибки, а приложение может ожидать событий изменения маршрутизации через вызов WSAEventSelect или WSAsyncSelect с FD_ROUTING_INTERFACE_CHANGE битом в битовой маске сетевого события.
Считается, что сведения о маршрутизации остаются стабильными в большинстве случаев, чтобы приложение сохраняло несколько невыполненных операций ввода-вывода для получения уведомлений обо всех местах назначения, интересующих его, а также наличие у поставщика услуг отслеживания этих запросов уведомлений будет использовать значительные системные ресурсы. Эту ситуацию можно избежать, расширив значение входных параметров и расслабив требования поставщика услуг следующим образом:
- Приложение может указать конкретный подстановочный адрес семейства протоколов (так же, как и один, используемый при вызове привязки при запросе на привязку к любому доступному адресу), чтобы запросить уведомления о любых изменениях маршрутизации. Это позволяет приложению сохранять только одну выдающуюся SIO_ROUTING_INTERFACE_CHANGE для всех сокетов и назначений, а затем использовать SIO_ROUTING_INTERFACE_QUERY для получения фактических сведений о маршрутизации.
- У поставщика услуг есть возможность игнорировать сведения, указанные приложением в входном буфере SIO_ROUTING_INTERFACE_CHANGE (как если бы приложение указало подстановочный адрес) и завершить событие FD_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 (параметр opcode: 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 также отключен, а максимальный размер окна получения ограничен 65 535 байтами. Параметр масштабирования окна TCP не может быть согласован с подключением, даже если параметр сокета SO_RCVBUF был вызван в этом сокете, указав значение больше 655 535 байт перед установкой подключения. |
Дополнительные сведения см . в SIO_SET_COMPATIBILITY_MODE справочнике.
SIO_SET_COMPATIBILITY_MODE поддерживается в Windows Vista и более поздних версиях.
SIO_SET_GROUP_QOS (параметр opcode: I, T==1)
Зарезервировано.
SIO_SET_PRIORITY_HINT (параметр opcode: 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 — это алгоритм scavenger, и его целью является сохранение низкой задержки и предотвращение негативного влияния на обычный трафик приоритета путем выхода из пути, когда присутствует обычный приоритет трафика.
Также см. RFC 6817.
SIO_SET_PRIORITY_HINT поддерживается в Windows 10 версии 1809 (10.0; Сборка 17763) и более поздних версий.
SIO_SET_QOS (параметр opcode: I, T==1)
Свяжите указанную структуру QOS со сокетом. Выходной буфер не требуется, структура QOS будет получена из входного буфера. Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают качество обслуживания.
SIO_TCP_INITIAL_RTO (параметр opcode: 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 (параметр opcode: I, O, T==1)
Чтобы получить соответствующий дескриптор для сокетов , допустимых в контексте интерфейса компаньона (например, TH_NETDEV и TH_TAPI). Константы манифеста, определяющие интерфейс компаньона вместе с любыми другими необходимыми параметрами, указываются в входном буфере. Соответствующий дескриптор будет доступен в выходном буфере после завершения этой функции. Дополнительные сведения, относящиеся к конкретному интерфейсу компаньона, см. в соответствующем разделе в приложении Winsock . Код ошибки WSAENOPROTOOPT указан для поставщиков услуг, которые не поддерживают этот IOCTL для указанного интерфейса-компаньона. Этот IOCTL извлекает дескриптор, связанный с помощью SIO_TRANSLATE_HANDLE.
Рекомендуется использовать объектную модель компонента (COM) вместо этого IOCTL для обнаружения и отслеживания других интерфейсов, которые могут поддерживаться сокетом. Этот IOCTL присутствует для обратной совместимости с системами, где COM недоступен или не может использоваться по какой-либо другой причине.
SIO_UDP_CONNRESET (параметр opcode: I, T==3)
Windows XP: Определяет, сообщают ли сообщения UDP PORT_UNREACHABLE. Задайте значение TRUE , чтобы включить отчеты. Установите значение FALSE , чтобы отключить отчеты.
SIO_UDP_NETRESET
Определяет, передаются ли сообщения NET_UNREACHABLE (срок действия TTL) на сокетах UDP через recv/WSARecv/etc. Передайте true в входной буфер, чтобы включить (значение по умолчанию, если оно поддерживается). Передайте false , чтобы отключить отчеты.
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS (параметр opcode: I, T==3)
Задает запись перенаправления для нового сокета TCP, используемого для подключения к окончательному назначению для использования службой перенаправления платформы фильтрации Windows (МПП).
SIO_SET_WFP_CONNECTION_REDIRECT_RECORDS IOCTL используется в рамках отслеживания прокси-подключений для перенаправленных подключений сокета. Эта функция МПП упрощает отслеживание записей перенаправления от первоначального перенаправления подключения к окончательному подключению к месту назначения.
Дополнительные сведения см . в 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 Software Development Kit, выпущенном для Windows Vista и более поздних версий, организация файлов заголовков изменилась, и в Ws2def.h, Ws2ipdef.h и mswsockdef.h также определены ряд файлов заголовков Winsockdef.h. Файл заголовка Ws2def.h автоматически включается в файл заголовка Winsock2.h . Файл заголовка Ws2ipdef.h автоматически включается в файл заголовка Ws2tcpip.h . Файл заголовка Mswsockdef.h автоматически включается в файл заголовка Mswsockdef.h .
Требования
Требование | Ценность |
---|---|
Заголовок |
|