структура IP_MREQ (ws2ipdef.h)

Структура ip_mreq предоставляет сведения о группе многоадресной рассылки для IPv4-адресов.

Синтаксис

typedef struct ip_mreq {
  IN_ADDR imr_multiaddr;
  IN_ADDR imr_interface;
} IP_MREQ, *PIP_MREQ;

Члены

imr_multiaddr

Адрес группы многоадресной рассылки IPv4.

imr_interface

Локальный IPv4-адрес интерфейса или индекс интерфейса, к которому следует присоединить или удалить группу многоадресной рассылки. Это значение находится в порядке сетевых байтов. Если этот член указывает IPv4-адрес 0.0.0.0, используется многоадресный интерфейс IPv4 по умолчанию.

Если использовать индекс интерфейса 1, он будет совпадать с IP-адресом 0.0.0.1.

Комментарии

Структура ip_mreq используется с IPv4-адресами. Структура ip_mreq используется с параметрами сокета IP_ADD_MEMBERSHIP и IP_DROP_MEMBERSHIP .

Структура ip_mreq и связанные структуры, используемые для многоадресного программирования IPv4, основаны на рекомендациях IETF, приведенных в разделах 4 и 8.1 RFC 3768. Для получения дополнительной информации см. http://www.ietf.org/rfc/rfc3678.txt.

Для более настраиваемых возможностей многоадресной рассылки с IPv4 используйте структуру ip_mreq_source . Дополнительные сведения см. в разделе Многоадресное программирование .

В Windows Vista и более поздних версиях для многоадресного программирования доступен набор параметров сокетов, поддерживающих адреса IPv6 и IPv4. Эти параметры сокета не зависят от IP-адресов и могут использоваться как для IPv6, так и для IPv4. Эти параметры, не зависящие от IP-адресов, используют структуры GROUP_REQ и GROUP_SOURCE_REQ и являются предпочтительными вариантами сокетов для многоадресного программирования в Windows Vista и более поздних версиях.

Структура ip_mreq является IPv4-эквивалентом структуры ipv6_mreq на основе IPv6.

Элемент imr_interface может быть индексом интерфейса. Любой IP-адрес в блоке 0.x.x.x (первый октет 0), за исключением IP-адреса 0.0.0.0, обрабатывается как индекс интерфейса. Индекс интерфейса — это 24-разрядное число. Блок адресов IPv4 0.0.0.0/8 не используется (этот диапазон зарезервирован). Функцию GetAdaptersAddresses можно использовать для получения сведений об индексе интерфейса, используемых для элемента imr_interface .

Рекомендуется всегда указывать локальный IPv4-адрес или индекс интерфейса в элементе imr_interface структуры ip_mreq , а не использовать интерфейс по умолчанию. Это особенно важно на компьютерах с несколькими сетевыми интерфейсами и несколькими общедоступными IPv4-адресами.

Интерфейс по умолчанию, используемый для многоадресной рассылки IPv4, определяется сетевым стеком в Windows. Приложение может определить интерфейс по умолчанию, используемый для многоадресной рассылки IPv4, с помощью функции GetIpForwardTable для получения таблицы маршрутизации IPv4. Сетевой интерфейс с наименьшим значением для метрики маршрутизации для IP-адреса назначения 224.0.0.0 является интерфейсом по умолчанию для многоадресной рассылки IPv4. Таблицу маршрутизации также можно отобразить в командной строке с помощью следующей команды:

печать маршрута

Параметр сокета IP_MULTICAST_IF можно использовать для установки интерфейса по умолчанию для отправки пакетов многоадресной рассылки IPv4. Этот параметр сокета не изменяет интерфейс по умолчанию, используемый для получения пакетов многоадресной рассылки IPv4.

Типичное многоадресное приложение IPv4 использует параметр сокета IP_ADD_MEMBERSHIP со структурой ip_mreq для присоединения к группе многоадресной рассылки и прослушивания пакетов многоадресной рассылки в определенном интерфейсе. Параметр сокета IP_MULTICAST_IF будет использоваться для настройки интерфейса для отправки пакетов многоадресной рассылки IPv4 в группу многоадресной рассылки. Наиболее распространенным сценарием является многоадресное приложение, которое прослушивает и отправляет в одном интерфейсе для группы многоадресной рассылки. Приложение многоадресной рассылки может использовать несколько сокетов с одним сокетом для прослушивания и одним или несколькими сокетами для отправки.

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

ПримечаниеIP_MREQ и PIP_MREQ производные структуры определяются только в Windows SDK, выпущенных с Windows Vista и более поздних версий. Структуру ip_mreq следует использовать в более ранних версиях Windows SDK.
 

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть ws2ipdef.h (включая Ws2tcpip.h)

См. также раздел

GROUP_REQ

GROUP_SOURCE_REQ

GetAdaptersAddresses

GetIpForwardTable

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

Многоадресное программирование

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

ip_mreq_source

ip_msfilter

ipv6_mreq