UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
11.20. Устаревшие функции поиска адресов IPv6
В процессе разработки IPv6 интерфейс поиска адресов IPv6 много раз претерпевал серьезные изменения. В какой-то момент интерфейс был сочтен усложненным и недостаточно гибким, так что от него полностью отказались в RFC 2553 [38]. Документ RFC 2553 предлагал собственные функции, которые в RFC 3493 [36] были попросту заменены
getaddrinfogetnameinfoКонстанта RES_USE_INET6
Поскольку функция
gethostbynamehints.ai_familygetaddrinfoRES_USE_INET6Включение
RES_USE_INET6gethostbynamehostentgethostbynameКроме того, включение
RES_USE_INET6gethostbyname2Функция gethostbyname2
Функция
gethostbyname2#include <netdb.h>struct hostent *gethostbyname2(const char *<i>hostname</i>, int <i>family</i>);<i>Возвращает: непустой указатель в случае успешного выполнения, в случае ошибки возвращает NULL и задает значение переменной h_errno</i>Возвращаемое значение то же, что и у функции
gethostbynamehostentfamilyRES_USE_INET6Функция getipnodebyname
Документ RFC 2553 [38] запретил использование
RES_USE_INET6gethostbyname2RES_USE_INET6getipnodebyname#include <sys/socket.h>#include <netdb.h>struct hostent *getipnodebyname(const char *<i>name</i>, int <i>af</i>, int <i>flags</i>, int *<i>error_num</i>);<i>Возвращает: ненулевой указатель в случае успешного завершения, нулевой в случае ошибки</i>Функция возвращает указатель на ту же структуру
hostentgethostbynameafflagshints.ai_familyhints.ai_flagsfreehostent#include <netdb.h>void freehostent(struct hostent *<i>ptr</i>);Функции
getipnodebynamegetipnodebyaddrgetaddrinfogetnameinfo11.21. Другая информация о сетях
В этой главе мы сфокусировали внимание на именах узлов, IP-адресах, именах и номерах портов служб. Если же обобщить полученную информацию, мы увидим, что существует четыре типа данных (имеющих отношение к сетям), которые могут понадобиться приложению: узлы, сети, протоколы и службы. В большинстве случаев происходит поиск данных, относящихся к узлам (функции
gethostbynamegethostbyaddrgetservbynamegetservbyaddrВсе четыре типа данных могут храниться в файле, и для каждого из четырех типов определены три функции:
1. Функция
get<i>XXX</i>ent2. Функция
set<i>XXX</i>ent3. Функция
end<i>XXX</i>entДля каждого из четырех типов данных определяется его собственная структура (соответственно, структуры
hostentnetentprotoentservent<netdb.h>В дополнение к трем функциям
getsetendget<i>XXX</i>entget<i>XXX</i>by<i>YYY</i>gethostbynamegethostbyaddr
