const struct sockaddr *
const struct sockaddr *
int mcast_join_source_group(int
const struct sockaddr *
const struct sockaddr *
const char *
int mcast_leave_source_group(int
const struct sockaddr *
const struct sockaddr *
int mcast_set_if(int
int mcast_set_loop(int
int mcast_set_ttl(int
int mcast_get_if(int
int mcast_get_loop(int
int mcast_get_ttl(int
Функция mcast_join
присоединяет узел к группе. IP-адрес этой группы содержится в структуре адреса сокета, на которую указывает аргумент grp
, а длина этой структуры задается аргументом grplen
. Мы можем задать интерфейс, на котором должно происходить присоединение к группе, либо через имя интерфейса (непустой аргумент ifname
), либо через ненулевой индекс интерфейса (непустой аргумент ifindex
). Если ни одно из этих значений не задано, ядро самостоятельно выбирает интерфейс, на котором происходит присоединение к группе. Вспомните, что в случае IPv6 для работы с параметрами сокета интерфейс задается по его индексу. Если для сокета IPv6 известно имя интерфейса, нужно вызвать функцию if_nametoindex
, чтобы получить индекс интерфейса. В случае параметра сокета IPv4 мы задаем интерфейс по его IP-адресу направленной передачи. Если для сокета IPv4 интерфейс задан по имени, нужно вызвать функцию ioctl
с запросом SIOCGIFADDR
для получения IP-адреса направленной передачи для этого интерфейса. Если для сокета IPv4 задан индекс интерфейса, мы сначала вызываем функцию if_indextoname
, чтобы получить имя интерфейса, а затем обрабатываем имя так, как только что было сказано.
Пользователи обычно задают имя интерфейса le0 или ether0, а IP-адрес и индекс интерфейса не используются. Например, tcpdump является одной из немногих программ, позволяющих пользователю задавать интерфейс, а ее параметр -i принимает имя интерфейса в качестве аргумента.
Функция mcast_leave
выводит узел из группы с IP-адресом, содержащимся в структуре адреса сокета, на которую указывает аргумент grp
.
Функция mcast_block_source
блокирует получение через конкретный сокет пакетов, относящихся к определенной группе и исходящих от определенного источника. IP-адреса группы и источника хранятся в структурах адреса сокета, на которые указывают аргументы grp
и src
соответственно. Длины структур задаются параметрами srclen
и grplen
. Для успешного завершения функции необходимо, чтобы до ее вызова уже была вызвана функция mcast_join
для того же сокета и той же группы.
Функция mcast_unblock_source
разблокирует получение трафика от источника из заданной группы. Аргументы src
, srclen
, grp
и grplen
имеют тот же смысл, что и аргументы предыдущей функции, и должны совпадать с ними по значениям.