UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
11.20. Устаревшие функции поиска адресов IPv6
В процессе разработки IPv6 интерфейс поиска адресов IPv6 много раз претерпевал серьезные изменения. В какой-то момент интерфейс был сочтен усложненным и недостаточно гибким, так что от него полностью отказались в RFC 2553 [38]. Документ RFC 2553 предлагал собственные функции, которые в RFC 3493 [36] были попросту заменены
getaddrinfo
getnameinfo
Константа RES_USE_INET6
Поскольку функция
gethostbyname
hints.ai_family
getaddrinfo
RES_USE_INET6
Включение
RES_USE_INET6
gethostbyname
hostent
gethostbyname
Кроме того, включение
RES_USE_INET6
gethostbyname2
Функция gethostbyname2
Функция
gethostbyname2
#include <netdb.h>
struct hostent *gethostbyname2(const char *<i>hostname</i>, int <i>family</i>);
<i>Возвращает: непустой указатель в случае успешного выполнения, в случае ошибки возвращает NULL и задает значение переменной h_errno</i>
Возвращаемое значение то же, что и у функции
gethostbyname
hostent
family
RES_USE_INET6
Функция getipnodebyname
Документ RFC 2553 [38] запретил использование
RES_USE_INET6
gethostbyname2
RES_USE_INET6
getipnodebyname
#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>
Функция возвращает указатель на ту же структуру
hostent
gethostbyname
af
flags
hints.ai_family
hints.ai_flags
freehostent
#include <netdb.h>
void freehostent(struct hostent *<i>ptr</i>);
Функции
getipnodebyname
getipnodebyaddr
getaddrinfo
getnameinfo
11.21. Другая информация о сетях
В этой главе мы сфокусировали внимание на именах узлов, IP-адресах, именах и номерах портов служб. Если же обобщить полученную информацию, мы увидим, что существует четыре типа данных (имеющих отношение к сетям), которые могут понадобиться приложению: узлы, сети, протоколы и службы. В большинстве случаев происходит поиск данных, относящихся к узлам (функции
gethostbyname
gethostbyaddr
getservbyname
getservbyaddr
Все четыре типа данных могут храниться в файле, и для каждого из четырех типов определены три функции:
1. Функция
get<i>XXX</i>ent
2. Функция
set<i>XXX</i>ent
3. Функция
end<i>XXX</i>ent
Для каждого из четырех типов данных определяется его собственная структура (соответственно, структуры
hostent
netent
protoent
servent
<netdb.h>
В дополнение к трем функциям
get
set
end
get<i>XXX</i>ent
get<i>XXX</i>by<i>YYY</i>
gethostbyname
gethostbyaddr