UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Разница между функциями
sock_ntop
getnameinfo
В табл. 11.4 показаны шесть флагов, которые можно задать для изменения действия, выполняемого функцией
getnameinfo
Таблица 11.4. Флаги функции getnameinfo
Константа | Описание |
---|---|
NI_DGRAM | Дейтаграммный сокет |
NI_NAMEREQD | Возвращать ошибку, если невозможно получить имя узла по его адресу |
NI_NOFQDN | Возвращать только ту часть FQDN, которая содержит имя узла |
NI_NUMERICHOST | Возвращать численное значение адреса вместо имени узла |
NI_NUMERICSCOPE | Возвращать численное значение идентификатора области |
NI_NUMERICSERV | Возвращать номер порта вместо имени службы |
■ Флаг
NI_DGRAM
getnameinfo
rsh
syslog
■ Флаг
NI_NAMEREQD
gethostbyname
■ Флаг
NI_NOFQDN
gethostbyaddr
aix.unpbook.com
getnameinfo
NI_NOFQDN
aix
■ Флаг
NI_NUMERICHOST
getnameinfo
inet_ntop
NI_NUMERICSERV
NI_NUMERICSCOPE
Можно объединять несколько флагов путем логического сложения, если их сочетание имеет смысл, например
NI_DGRAM
NI_NUMERICHOST
11.18. Функции, допускающие повторное вхождение
Функция
gethostbyname
Сначала посмотрим, как эта функция работает. Если мы изучим ее исходный код (это несложно, поскольку исходный код для всей реализации BIND свободно доступен), то увидим, что обе функции — и
gethostbyname
gethostbyaddr
<b>static</b> struct hostent host; /* здесь хранится результат */
struct hostent*
gethostbyname(const char *hostname) {
return(gethostbyname2(hostname, family));
}
struct hostent*
gethostbyname2(const char *hostname, int family) {
/* вызов функций DNS для запроса А или AAAA */
/* заполнение структуры адреса узла */
return(&host);
}
struct hostent*
gethostbyaddr(const char *addr, size_t len, int family) {
/* вызов функций DNS для запроса PTR в домене in-addr.arpa */
/* заполнение структуры адреса узла */
return(&host);
}
Мы выделили полужирным шрифтом спецификатор класса памяти
static
host
gethostbyname2
gethostbyname
gethostbyname2
Проблема повторного вхождения может возникнуть в нормальном процессе Unix, вызывающем функцию
gethostbyname
gethostbyaddr
SIGALRM
main() {