struct sockaddr_storage gsr_group; /* адрес многоадресной
передачи IPv4 или IPv6 */
struct sockaddr_storage gsr_source; /* адрес источника IPv4
или IPv6 */
};
Если локальный интерфейс задается как универсальный адрес (INADDR_ANY
для IPv4) или как нулевой индекс IPv6, то конкретный локальный интерфейс выбирается ядром.
Запрос на блокирование источника действует только для присоединенных групп, то есть таких, которые уже были присоединены к указанному интерфейсу параметром IP_ADD_MEMBERSHIP
, IPV6_JOIN_GROUP
или MCAST_JOIN_GROUP
.
■ IP_UNBLOCK_SOURCE
, MCAST_UNBLOCK_SOURCE
. Разблокирование заблокированного ранее источника. Аргументы должны быть в точности те же, что и у предшествовавшего запроса IP_BLOCK_SOURCE
или MCAST_BLOCK_SOURCE
.
Если локальный интерфейс задается как универсальный адрес (INADDR_ANY
для IPv4) или как нулевой индекс IPv6, то конкретный локальный интерфейс выбирается ядром.
■ IP_ADD_SOURCE_MEMBERSHIР
, MCAST_JOIN_SOURCE_GROUP
. Присоединение к группе конкретного источника на заданном локальном интерфейсе. С этим параметром используются те же структуры, что и с параметрами блокирования и разблокирования источника. Сокет не должен быть присоединен к той же группе без указания источника (параметры IP_ADD_MEMBERSHIP
, IPV6_JOIN_GROUP
, MCAST_JOIN_GROUP
).
Если локальный интерфейс задается как универсальный адрес (INADDR_ANY
для IPv4) или как нулевой индекс IPv6, то конкретный локальный интерфейс выбирается ядром.
■ IP_DROP_SOURCE_MEMBERSHIP
, MCAST_LEAVE_SOURCE_GROUP
. Отключение от группы источника конкретного локального интерфейса. Используются те же структуры, что и с предыдущими параметрами сокетов. Если локальный интерфейс не указан (значение INADDR_ANY
для IPv4 или 0 для независимого от версии API), отключается первая группа, удовлетворяющая заданным значениям.
Если процесс присоединяется к группе источника, но не отключается от нее явно, отсоединение производится автоматически при закрытии сокета (явном или также автоматическом, при завершении процесса). Несколько процессов узла могут присоединиться к одной и той же группе источника, в случае чего узел остается в группе до тех пор, пока из нее не выйдет последний процесс.
■ IP_MULTICAST_IF
и IPV6_MULTICAST_IF
. Назначение этих параметров - задание интерфейса для исходящих дейтаграмм многоадресной передачи, отправленных на этом сокете. Этот интерфейс задается либо структурой in_addr
для IPv4, либо индексом интерфейса для IPv6. Если задано значение INADDR_ANY
для IPv4 или нулевой индекс интерфейса для IPv6, то удаляется любой интерфейс, ранее заданный этим параметром сокета, и система будет выбирать интерфейс каждый раз при отправке дейтаграммы.
Будьте внимательны, четко различая локальный интерфейс, заданный (или выбранный), когда процесс присоединяется к группе (интерфейс для получения приходящих дейтаграмм многоадресной передачи), и локальный интерфейс, заданный (или выбранный) для исходящих дейтаграмм.
Беркли-ядра выбирают интерфейс для исходящих дейтаграмм многоадресной передачи по умолчанию при помощи обычной таблицы маршрутизации IP. В ней выполняется поиск маршрута к групповому адресу получателя, после чего используется соответствующий интерфейс. Это та же технология, что используется для выбора принимающего интерфейса, если процесс не задает его в процессе присоединения к группе. При этом считается, что если для данного адреса многоадресной передачи существует маршрут (возможно, маршрут, заданный по умолчанию в таблице маршрутизации), то соответствующий интерфейс должен использоваться для ввода и вывода.
■ IP_MULTICAST_TTL
и IPV6_MULTICAST_HOPS
. Назначение этих параметров - установка значения поля TTL в случае IPv4 или предельного количества транзитных узлов в случае IPv6 для исходящих дейтаграмм многоадресной передачи. По умолчанию значение обоих параметров равно 1, что ограничивает дейтаграмму локальной подсетью.