Уильям Стивенс - UNIX - разработка сетевых приложений

Здесь есть возможность читать онлайн «Уильям Стивенс - UNIX - разработка сетевых приложений» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2007, ISBN: 2007, Издательство: Питер, Жанр: ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

UNIX: разработка сетевых приложений: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «UNIX: разработка сетевых приложений»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.

UNIX: разработка сетевых приложений — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «UNIX: разработка сетевых приложений», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Функция mcast_leaveвыводит узел из группы с IP-адресом, содержащимся в структуре адреса сокета, на которую указывает аргумент grp.

Функция mcast_block_sourceблокирует получение через конкретный сокет пакетов, относящихся к определенной группе и исходящих от определенного источника. IP-адреса группы и источника хранятся в структурах адреса сокета, на которые указывают аргументы grpи srcсоответственно. Длины структур задаются параметрами srclenи grplen. Для успешного завершения функции необходимо, чтобы до ее вызова уже была вызвана функция mcast_joinдля того же сокета и той же группы.

Функция mcast_unblock_sourceразблокирует получение трафика от источника из заданной группы. Аргументы src, srclen, grpи grplenимеют тот же смысл, что и аргументы предыдущей функции, и должны совпадать с ними по значениям.

Функция mcast_join_source_groupвыполняет присоединение к группе источника. Адрес источника и адрес группы содержатся в структурах адреса сокета, на которые указывают аргументы srcи grp. Длины структур задаются параметрами srclenи grplen. Интерфейс, присоединяемый к группе, может быть задан именем (ненулевой аргумент ifname) или индексом ( ifindex). Если интерфейс не задан явно, ядро выбирает его самостоятельно.

Функция mcast_leave_source_groupвыполняет отсоединение от группы источника. Адреса источника и группы содержатся в структурах адреса сокета, на которые указывают аргументы srcи grp. Длины структур задаются параметрами srclenи grplen. Подобно mcast_leave, mcast_leave_source_groupне требует указания интерфейса: она всегда отсоединяет от группы первый интерфейс, удовлетворяющий условиям.

Функция mcast_set_ifустанавливает индекс интерфейса по умолчанию для исходящих дейтаграмм многоадресной передачи. Если аргумент ifnameнепустой, он задает имя интерфейса. Иначе положительное значение аргумента ifindexбудет задавать индекс интерфейса. В случае IPv6 имя сопоставляется индексу с использованием функции if_nametoindex. В случае IPv4 сопоставление имени или индекса IP-адресу направленной передачи интерфейса происходит так же, как для функции mcast_join.

Функция mcast_set_loopустанавливает параметр закольцовки либо в 0, либо в 1, а функция mcast_set_ttlTTL в случае IPv4 или предел количества транзитных узлов в случае IPv6. Функции mcast_get_XXXвозвращают соответствующие значения.

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

В листинге 21.1 [1] Все исходные коды программ, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com. показана первая часть функции mcast_join. Эта часть демонстрирует простоту интерфейса программирования, не зависящего от протокола.

Листинг 21.1. Присоединение к группе: сокет IPv4

//lib/mcast_join.c

1 #include "unp.h"

2 #include

3 int

4 mcast_join(int sockfd, const SA *grp, socklen_t grplen,

5 const char *ifname, u_int ifindex)

6 {

7 #ifdef MCAST_JOIN_GROUP

8 struct group_req req;

9 if (ifindex > 0) {

10 req.gr_interface = ifindex;

11 } else if (ifname != NULL) {

12 if ((req.gr_interface = if_nametoindex(ifname)) == 0) {

13 errno = ENXIO; /* интерфейс не найден */

14 return(-1);

15 }

16 } else

17 req.gr_interface = 0;

18 if (grplen > sizeof(req.gr_group)) {

19 errno = EINVAL;

20 return -1;

21 }

22 memcpy(&req.gr_group, grp, grplen);

23 return (setsockopt(sockfd, family_to_level(grp->sa_family),

24 MCAST_JOIN_GROUP, &req, sizeof(req)));

25 #else

Обработка индекса

9-17 Если при вызове был указан индекс интерфейса, функция использует его непосредственно. В противном случае (при указании имени интерфейса), имя преобразуется в индекс вызовом if_nametoindex. Если ни имя, ни индекс не заданы, интерфейс выбирается ядром.

Копирование адреса и вызов setsockopt

18-22 Адрес сокета копируется непосредственно в поле группы. Вспомните, что поле это имеет тип sockaddr_storage, а потому достаточно велико для хранения адреса любого типа, поддерживаемого системой. Для предотвращения переполнения буфера (при ошибках в программе) мы проверяем размер sockaddrи возвращаем EINVAL, если он слишком велик.

23-24 Присоединение к группе выполняется вызовом setsockopt. Аргумент levelопределяется на основании семейства группового адреса вызовом нашей собственной функции family_to_level. Некоторые системы допускают несоответствие аргумента level семейству адреса сокета, например использование IPPROTO_IPс MCAST_JOIN_GROUP, даже если сокет относится к семейству AF_INET6, но это верно не для всех систем, поэтому мы и должны выполнить преобразование семейства к нужному значению level. Листинг этой тривиальной функции в книге мы не приводим, но исходный код этой функции вы можете скачать вместе со всеми остальными программами.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «UNIX: разработка сетевых приложений» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «UNIX: разработка сетевых приложений» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x