UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
connect error: Operation timed out
trying 140.252.1.4:13
connect error: Operation timed out
trying 140.252.104.1:13
connect error: Connection refused
unable to connect
11.6. Функция getaddrinfo
Функции
gethostbyname
gethostbyaddr
getaddrinfo
sockaddr
getaddrinfo
getaddrinfo
Определение этой функции в POSIX происходит от более раннего предложения Кейта Склоуэра (Keith Sklower) для функции, называемой getconninfo. Эта функция стала результатом обсуждений с Эриком Олменом (Eric Allman), Вилльямом Дастом (William Durst), Майклом Карелсом (Michael Karels) и Стивеном Вайсом (Steven Wise), а также более ранней реализации, написанной Эриком Олменом. Замечание о том, что указания имени узла и имени службы достаточно для соединения с этой службой независимо от деталей протокола, было сделано Маршалом Роузом (Marshall Rose) в проекте X/Open.
#include <netdb.h>
int getaddrinfo(const char *<i>hostname</i>, const char *<i>service</i>,
const struct addrinfo *<i>hints</i>, struct addrinfo **<i>result</i>);
<i>Возвращает: 0 в случае успешного выполнения, ненулевое значение в случае ошибки</i>
<i>(см. табл. 11.2).</i>
Через указатель
result
addrinfo
<netdb.h>
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
int ai_family; /* AF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 или IPPROTO_xxx для IPv4 и IPv6 */
size_t ai_addrlen; /* длина ai_addr */
char* ai_canonname; /* указатель на каноническое имя узла */
struct sockaddr *ai_addr; /* указатель на структуру адреса сокета */
struct addrinfo *ai_next; /* указатель на следующую структуру в связном
списке */
};
Переменная
hostname
service
Аргумент
hints
addrinfo
domain
ai_socktype
hints
SOCK_DGRAM
Вызывающим процессом могут быть установлены значения следующих элементов структуры
hints
■
ai_flags
AI_XXX
■
ai_family
AF_xxx
■
ai_socktype
SOCK_xxx
■
ai_protocol
Поле
ai_flags
■
AI_PASSIVE
■
AI_CANONNAME
■
AI_NUMERICHOST
hostname
■
AI_NUMERICSERV
service
■
AI_V4MAPPED
ai_family = AF_INET6
■
AI_ALL
AI_V4MAPPED
■
AI_ADDRCONFIG
Если аргументом структуры
hints
ai_flags
ai_socktype
ai_protocol
AF_UNSPEC
ai_family
Если функция завершается успешно (0), то в переменную, на которую указывает аргумент
result
addrinfo
ai_next
1. Если существует множество адресов, связанных с узлом
hostname
ai_family