UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
131 memcpy(ifi->ifi_dstaddr, sin6ptr,132 sizeof(struct sockaddr_in6));133 }134 #endif135 break;136 default:137 break;138 }139 }140 free(buf);141 return(ifihead); /* указатель на первую структуру в связной списке */142 }102-104SIOCGIFCONFioctl106-119SIOCGIFBRDADDRioctlifi_infoSIOCGIFBRDADDR123-133SIOCGIFBRDADDRВ листинге 17.8 показана функция
free_ifi_infoget_ifi_infoЛистинг 17.8. Функция free_ifi_info: освобождение памяти, которая была динамически выделена функцией get_ifi_info
//iосtl/get_ifi_info.c143 void144 free_ifi_info(struct ifi_info *ifihead)145 {146 struct ifi_info *ifi, *ifinext;147 for (ifi = ifihead; ifi != NULL; ifi = ifinext) {148 if (ifi->ifi_addr != NULL)149 free(ifi->ifi_addr);150 if (ifi->ifi_brdaddr != NULL)151 free(ifi->ifi_brdaddr);152 if (ifi->ifi_dstaddr != NULL)153 free(ifi->ifi_dstaddr);154 ifinext = ifi->ifi_next; /* невозможно получить ifi_next после вызова freed */155 free(ifi);156 }157 }17.7. Операции с интерфейсами
Как мы показали в предыдущем разделе, запрос
SIOCGIFCONFgetSIOCGxxxnetstatsetSIOCSxxxifconfigЭти вызовы получают или возвращают структуру
ifreqioctlle0lo0ppp0ifr_nameifreqМногие из этих запросов используют структуру адреса сокета, для того чтобы задать или возвратить IP-адрес или маску адреса. Для IPv4 адрес или маска содержится в элементе
sin_addrsin6_addr■
SIOCGIFADDRifr_addr■
SIOCSIFADDRifr_addr■
SIOCGIFFLAGSifr_flagsIFF_xxx<net/if.h>IFF_UPIFF_POINTOPOINTIFF_BROADCAST■
SIOCSIFFLAGSifr_flags■
SIOCGIFDSTADDRifr_dstaddr■
SIOCSIFDSTADDRifr_dstaddr■
SIOCGIFBRDADDRifr_broadaddrSIOCGIFBRDADDRSIOCGIFDSTADDR■
SIOCSIFBRDADDRifr_broadaddr■
SIOCGIFNETMASKifr_addr■
SIOCSIFNETMASKifr_addr
