UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Пользователи обычно задают имя интерфейса le0 или ether0, а IP-адрес и индекс интерфейса не используются. Например, tcpdump является одной из немногих программ, позволяющих пользователю задавать интерфейс, а ее параметр -i принимает имя интерфейса в качестве аргумента.
Функция
mcast_leavegrpФункция
mcast_block_sourcegrpsrcsrclengrplenmcast_joinФункция
mcast_unblock_sourcesrcsrclengrpgrplenФункция
mcast_join_source_groupsrcgrpsrclengrplenifnameifindexФункция
mcast_leave_source_groupsrcgrpsrclengrplenmcast_leavemcast_leave_source_groupФункция
mcast_set_ififnameifindexif_nametoindexmcast_joinФункция
mcast_set_loopmcast_set_ttlmcast_get_XXXПример: функция mcast_join
В листинге 21.1 [1] показана первая часть функции
mcast_joinЛистинг 21.1. Присоединение к группе: сокет IPv4
//lib/mcast_join.c 1 #include "unp.h" 2 #include <net/if.h> 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 } else17 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 #else9-17if_nametoindex18-22sockaddr_storagesockaddrEINVAL23-24setsockoptlevelfamily_to_levelIPPROTO_IPMCAST_JOIN_GROUPAF_INET6level
