Книга: UNIX: разработка сетевых приложений

Пример: функция mcast_set_loop

Пример: функция mcast_set_loop

В листинге 21.4 показана наша функция mcast_set_loop.

Поскольку аргументом является дескриптор сокета, а не структура адреса сокета, мы вызываем нашу функцию sockfd_to_family, чтобы получить семейство адресов сокета. Устанавливается соответствующий параметр сокета.

Мы не показываем исходный код для всех остальных функций mcast_XXX, так как он свободно доступен в Интернете (см. предисловие).

Листинг 21.4. Установка параметра закольцовки для многоадресной передачи

//lib/mcast_set_loop.c
 1 #include "unp.h"
 2 int
 3 mcast_set_loop(int sockfd, int onoff)
 4 {
 5  switch (sockfd_to_family(sockfd)) {
 6  case AF_INET:{
 7   u_char flag;
 8   flag = onoff;
 9   return (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP,
10    &flag, sizeof(flag)));
11  }
12 #ifdef IPV6
13  case AF_INET6:{
14   u_int flag;
15   flag = onoff;
16   return (setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
17    &flag, sizeof(flag)));
18  }
19 #endif
20  default:
21   errno = EPROTONOSUPPORT;
22   return (-1);
23  }
24 }

Оглавление книги


Генерация: 1.520. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз