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

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

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

Для некоторых параметров сокета требуется больше объяснений, чем эти таблицы могут передать; такие параметры содержат ссылки на дополнительные страницы.

Параметры

Параметр Получить Присвойте параметру Тип Optval Описание
IP_ADD_IFLIST да DWORD (IF_INDEX) Добавляет индекс интерфейса в параметр IFLIST, связанный с параметром IP_IFLIST .
IP_ADD_MEMBERSHIP да ip_mreq Присоединение сокета к предоставленной группе многоадресной рассылки в указанном интерфейсе.
IP_ADD_SOURCE_MEMBERSHIP да ip_mreq_source Присоединитесь к предоставленной группе многоадресной рассылки в заданном интерфейсе и примите данные, полученные по указанному исходному адресу.
IP_BLOCK_SOURCE да ip_mreq_source Удаляет указанный источник в качестве отправителя для предоставленной группы и интерфейса многоадресной рассылки.
IP_DEL_IFLIST да DWORD (IF_INDEX) Удаляет индекс интерфейса из списка IFLIST, связанного с параметром IP_IFLIST . Записи могут быть удалены только приложением, поэтому имейте в виду, что после удаления интерфейса записи могут устареть.
IP_DONTFRAGMENT да да DWORD (логическое значение) Указывает, что данные не должны быть фрагментированы независимо от локального MTU. Допустимо только для протоколов, ориентированных на сообщения. Поставщики MICROSOFT TCP/IP учитывают этот параметр для UDP и ICMP.
IP_DROP_MEMBERSHIP да ip_mreq Оставляет указанную группу многоадресной рассылки из указанного интерфейса. Поставщики услуг должны поддерживать этот параметр, если поддерживается многоадресная рассылка. Поддержка указывается в структуре WSAPROTOCOL_INFO , возвращаемой вызовом функции WSAEnumProtocols , со следующими параметрами: XPI_SUPPORT_MULTIPOINT=1, XP1_MULTIPOINT_CONTROL_PLANE=0, XP1_MULTIPOINT_DATA_PLANE=0.
IP_DROP_SOURCE_MEMBERSHIP да ip_mreq_source Удаляет членство в заданной группе многоадресной рассылки, интерфейсе и исходном адресе.
IP_GET_IFLIST да DWORD[] (IF_INDEX[]) Возвращает текущий параметр IFLIST, связанный с параметром IP_IFLIST . Возвращает ошибку , если IP_IFLIST не включен.
IP_HDRINCL да да DWORD (логическое значение) Если задано значение TRUE, указывает, что приложение предоставляет заголовок IP. Применяется только к сокетам SOCK_RAW. Поставщик службы TCP/IP может задать поле идентификатора, если значение, предоставленное приложением, равно нулю. Параметр IP_HDRINCL применяется только к SOCK_RAW типу протокола. Поставщик служб TCP/IP, поддерживающий SOCK_RAW, также должен поддерживать IP_HDRINCL.
IP_IFLIST да да DWORD (логическое значение) Возвращает или задает состояние IP_IFLIST сокета. Если для этого параметра задано значение true, прием датаграмм ограничивается интерфейсами, которые находятся в IFLIST. Датаграммы, полученные в других интерфейсах, игнорируются. ЕСЛИLIST запускается пустым. Используйте IP_ADD_IFLIST и IP_DEL_IFLIST для изменения списка IFLIST.
IP_MTU да DWORD Возвращает системную оценку MTU пути. Сокет должен быть подключен.
IP_MTU_DISCOVER да да DWORD (PMTUD_STATE) Возвращает или задает состояние обнаружения MTU пути для сокета. Значение по умолчанию — IP_PMTUDISC_NOT_SET. Для сокетов потоков IP_PMTUDISC_NOT_SET и IP_PMTUDISC_DO будут выполнять обнаружение MTU пути. IP_PMTUDISC_DONT и IP_PMTUDISC_PROBE отключают обнаружение MTU пути. Для сокетов датаграмм IP_PMTUDISC_DO принудительно задаст бит DF для всех исходящих пакетов, а попытка отправить пакеты, превышающие MTU пути, приведет к ошибке. IP_PMTUDISC_DONT принудительно не задать бит DF для всех исходящих пакетов, а пакеты будут фрагментированы в соответствии с MTU интерфейса. IP_PMTUDISC_PROBE принудительно задаст бит DF для всех исходящих пакетов, а попытка отправить пакеты, превышающие MTU интерфейса, приведет к ошибке.
IP_MULTICAST_IF да да DWORD Возвращает или задает исходящий интерфейс для отправки многоадресного трафика IPv4. Этот параметр не изменяет интерфейс по умолчанию для получения трафика многоадресной рассылки IPv4. Входным значением для установки этого параметра является 4-байтовый IPv4-адрес в порядке сетевых байтов. Этот параметр DWORD также может быть индексом интерфейса в порядке сетевых байтов. Любой IP-адрес в блоке 0.x.x.x (первый октет 0), кроме IPv4-адреса 0.0.0.0, обрабатывается как индекс интерфейса. Индекс интерфейса — это 24-разрядное число, а блок адресов IPv4 0.0.0.0/8 не используется (этот диапазон зарезервирован). Индекс интерфейса можно использовать для указания интерфейса по умолчанию для многоадресного трафика для IPv4. Если optval равно нулю, для отправки многоадресного трафика указывается интерфейс по умолчанию для получения многоадресной рассылки. При получении этого параметра optval возвращает текущий индекс интерфейса по умолчанию для отправки многоадресного трафика IPv4 в порядке байтов узла.
IP_MULTICAST_LOOP да да DWORD (логическое значение) Для сокета, присоединенного к одной или нескольким группам многоадресной рассылки, это определяет, будет ли он получать копию исходящих пакетов, отправляемых в эти группы многоадресной рассылки через выбранный интерфейс многоадресной рассылки. По умолчанию IP_MULTICAST_LOOP включен (значение 1/TRUE), поэтому сокеты будут получать соответствующие многоадресные пакеты, отправленные текущим компьютером. Отключение этого параметра (путем установки ему значения 0/FALSE) означает, что этот сокет не будет получать многоадресную рассылку, отправленную с локального компьютера, даже если сокет открыт в интерфейсе замыкания на себя.

Это несовместимо с версией POSIX IP_MULTICAST_LOOP — параметр должен быть установлен в принимающем сокете; в то время как параметр POSIX должен быть установлен в сокете отправки.
IP_MULTICAST_TTL да да DWORD Задает или получает значение срока жизни, связанное с ip-трафиком многоадресной рассылки в сокете.
IP_OPTIONS да да char [] Указывает параметры IP-адресов, которые необходимо вставить в исходящие пакеты. Установка новых параметров перезаписывает все ранее указанные параметры. При установке параметра optval в нулевое значение удаляются все ранее указанные параметры. IP_OPTIONS поддержка не требуется; Чтобы проверка, поддерживается ли IP_OPTIONS, используйте getockopt для получения текущих параметров. Если getsockopt завершается сбоем , IP_OPTIONS не поддерживается.
IP_ORIGINAL_ARRIVAL_IF да да DWORD (логическое значение) Указывает, должна ли функция LPFN_WSARECVMSG (WSARecvMsg) возвращать необязательные управляющие данные, содержащие интерфейс прибытия, в котором был получен пакет для сокетов датаграмм. Этот параметр позволяет возвращать интерфейс IPv4, в котором был получен пакет, в структуре WSAMSG . Этот параметр действителен только для datagram и необработанных сокетов (тип сокета должен быть SOCK_DGRAM или SOCK_RAW).
IP_PKTINFO да да DWORD Указывает, что сведения о пакете должны быть возвращены функцией WSARecvMsg .
IP_RECEIVE_BROADCAST да да DWORD (логическое значение) Разрешает или блокирует широковещательный прием.
IP_RECVIF да да DWORD (логическое значение) Указывает, должен ли стек IP-адресов заполнять буфер управления сведениями о том, какой интерфейс получил пакет с сокетом датаграммы. Если это значение равно true, функция LPFN_WSARECVMSG (WSARecvMsg) вернет необязательные управляющие данные, содержащие интерфейс, в котором был получен пакет для сокетов датаграмм. Этот параметр позволяет возвращать интерфейс IPv4, в котором был получен пакет, в структуре WSAMSG . Этот параметр действителен только для datagram и необработанных сокетов (тип сокета должен быть SOCK_DGRAM или SOCK_RAW).
IP_RECVTOS да да DWORD (логическое значение) Указывает, должен ли стек IP заполнить буфер элемента управления сообщением, содержащим поле заголовка IPv4 типа службы (TOS) на полученной датаграмме. Если это значение равно true, функция LPFN_WSARECVMSG (WSARecvMsg) вернет необязательные управляющие данные, содержащие значение поля заголовка TOS IPv4 полученной датаграммы. Этот параметр позволяет возвращать поле заголовка TOS IPv4 полученной датаграммы в структуре WSAMSG . Возвращаемый тип сообщения будет IP_TOS. Будут возвращены все биты DSCP и ECN поля TOS. Этот параметр действителен только для сокетов датаграмм (тип сокета должен быть SOCK_DGRAM).
IP_RECVTTL да да DWORD (логическое значение) Указывает, что сведения о прыжках (TTL) должны возвращаться в функции LPFN_WSARECVMSG (WSARecvMsg). Если параметр optval имеет значение 1 при вызове метода setsockopt, параметр включен. Если задано значение 0, параметр отключен. Этот параметр допустим только для datagram и необработанных сокетов (тип сокета должен быть SOCK_DGRAM или SOCK_RAW).
IP_TOS да да DWORD (логическое значение) Не используйте. Параметры типа службы (TOS) следует задавать только с помощью API качества обслуживания. Дополнительные сведения см. в разделе "Дифференцированные службы " в разделе "Качество обслуживания" пакета SDK для платформы.
IP_TTL да да DWORD (логическое значение) Изменяет значение по умолчанию, заданное поставщиком службы TCP/IP в поле TTL заголовка IP в исходящих датаграммах. поддержка IP_TTL не требуется; Чтобы проверка, поддерживается ли IP_TTL, используйте getockopt для получения текущих параметров. Если getsockopt завершается сбоем , IP_TTL не поддерживается.
IP_UNBLOCK_SOURCE да ip_mreq_source Добавляет заданный источник в качестве отправителя в предоставленную группу и интерфейс многоадресной рассылки.
IP_UNICAST_IF да да DWORD (IF_INDEX) Возвращает или задает исходящий интерфейс для отправки трафика IPv4. Этот параметр не изменяет интерфейс по умолчанию для получения трафика IPv4. Этот параметр важен для компьютеров с несколькими адресами. Входное значение для установки этого параметра — 4-байтовый IPv4-адрес в порядке байтов сети. Этот параметр DWORD должен быть индексом интерфейса в порядке сетевых байтов. Любой IP-адрес в блоке 0.x.x.x (первый октет 0), за исключением IPv4-адреса 0.0.0.0, обрабатывается как индекс интерфейса. Индекс интерфейса — это 24-разрядное число, а блок адресов IPv4 0.0.0.0/8 не используется (этот диапазон зарезервирован). Индекс интерфейса можно использовать для указания интерфейса по умолчанию для отправки трафика для IPv4. Для получения сведений об индексе интерфейса можно использовать функцию GetAdaptersAddresses . Если параметр optval равен нулю, для интерфейса по умолчанию для отправки трафика задано значение unspecified. При получении этого параметра optval возвращает текущий индекс интерфейса по умолчанию для отправки трафика IPv4 в порядке байтов узла.
IP_USER_MTU да да DWORD Возвращает или задает верхнюю границу MTU слоя IP (в байтах) для заданного сокета. Если значение выше оценки системы пути MTU (который можно получить в подключенном сокете, запросив параметр сокета IP_MTU ), то параметр не действует. Если значение меньше, исходящие пакеты, превышающие этот размер, будут фрагментированы или не будут отправлены в зависимости от значения IP_DONTFRAGMENT. Значение по умолчанию — IP_UNSPECIFIED_USER_MTU (MAXULONG). Для обеспечения безопасности типов следует использовать функции WSAGetIPUserMtu и WSASetIPUserMtu вместо непосредственного использования параметра сокета.
IP_WFP_REDIRECT_CONTEXT да да WSACMSGHDR с данными управления Вспомогательный тип данных сокета датаграммы (cmsg_type), указывающий контекст перенаправления для сокета UDP, используемого службой перенаправления платформы фильтрации Windows (WFP) пользовательского режима.
IP_WFP_REDIRECT_RECORDS да да WSACMSGHDR с данными управления Вспомогательный тип данных сокета датаграммы (cmsg_type), указывающий запись перенаправления для сокета UDP, используемого службой перенаправления платформы фильтрации Windows (WFP) пользовательского режима.

Поддержка параметров IP_PROTO в Windows

Параметр Windows 10 Windows 8 Windows Server 2012 Windows 7 Windows Server 2008 Windows Vista
IP_ADD_IFLIST Начиная с Windows 10 версии 1803
IP_ADD_MEMBERSHIP x x x x x x
IP_ADD_SOURCE_MEMBERSHIP x x x x x x
IP_BLOCK_SOURCE x x x x x x
IP_DEL_IFLIST Начиная с Windows 10 версии 1803
IP_DONTFRAGMENT x x x x x x
IP_DROP_MEMBERSHIP x x x x x x
IP_DROP_SOURCE_MEMBERSHIP x x x x x x
IP_GET_IFLIST Начиная с Windows 10 версии 1803
IP_HDRINCL x x x x x x
IP_IFLIST Начиная с Windows 10 версии 1803
IP_MULTICAST_IF x x x x x x
IP_MULTICAST_LOOP x x x x x x
IP_MULTICAST_TTL x x x x x x
IP_OPTIONS x x x x x x
IP_ORIGINAL_ARRIVAL_IF x x x x
IP_PKTINFO x x x x x x
IP_RECEIVE_BROADCAST x x x x x x
IP_RECVIF Начиная с Windows 10 версии 1703 x x x x x
IP_RECVTTL x
IP_TOS x x x
IP_TTL x x x x x x
IP_UNBLOCK_SOURCE x x x x x x
IP_UNICAST_IF x x x x x x
IP_WFP_REDIRECT_CONTEXT x x x
IP_WFP_REDIRECT_RECORDS x x x

Параметр Windows Server 2003 Windows XP
IP_ADD_IFLIST
IP_ADD_MEMBERSHIP x x
IP_ADD_SOURCE_MEMBERSHIP x x
IP_BLOCK_SOURCE x x
IP_DEL_IFLIST
IP_DONTFRAGMENT x x
IP_DROP_MEMBERSHIP x x
IP_DROP_SOURCE_MEMBERSHIP x x
IP_GET_IFLIST
IP_HDRINCL x x
IP_IFLIST
IP_MULTICAST_IF x x
IP_MULTICAST_LOOP x x
IP_MULTICAST_TTL x x
IP_OPTIONS x x
IP_ORIGINAL_ARRIVAL_IF
IP_PKTINFO x x
IP_RECEIVE_BROADCAST x x
IP_RECVIF
IP_RECVTTL
IP_TOS
IP_TTL x x
IP_UNBLOCK_SOURCE x x
IP_UNICAST_IF
IP_WFP_REDIRECT_CONTEXT
IP_WFP_REDIRECT_RECORDS

Комментарии

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

В пакете SDK для платформы, выпущенном для Windows Server 2003 и Windows XP, уровень IPPROTO_IP определяется в файле заголовка Winsock2.h . Некоторые параметры сокета IPPROTO_IP определены в файле заголовка Ws2tcpip.h . Остальные параметры сокета IPPROTO_IP определены в файле заголовка Wsipv6ok.h , который автоматически включается в файл заголовка Winsock2.h . Файл заголовка Wsipv6ok.h никогда не следует использовать напрямую.

Требования

Требование Значение
Заголовок
Ws2def.h (включая Winsock2.h);
Ws2ipdef.h (включая Ws2tcpip.h);
Wsipv6ok.h (включая Winsock2.h)