UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Разница между функциями
sock_ntopgetnameinfoВ табл. 11.4 показаны шесть флагов, которые можно задать для изменения действия, выполняемого функцией
getnameinfoТаблица 11.4. Флаги функции getnameinfo
| Константа | Описание |
|---|---|
| NI_DGRAM | Дейтаграммный сокет |
| NI_NAMEREQD | Возвращать ошибку, если невозможно получить имя узла по его адресу |
| NI_NOFQDN | Возвращать только ту часть FQDN, которая содержит имя узла |
| NI_NUMERICHOST | Возвращать численное значение адреса вместо имени узла |
| NI_NUMERICSCOPE | Возвращать численное значение идентификатора области |
| NI_NUMERICSERV | Возвращать номер порта вместо имени службы |
■ Флаг
NI_DGRAMgetnameinforshsyslog■ Флаг
NI_NAMEREQDgethostbyname■ Флаг
NI_NOFQDNgethostbyaddraix.unpbook.comgetnameinfoNI_NOFQDNaix■ Флаг
NI_NUMERICHOSTgetnameinfoinet_ntopNI_NUMERICSERVNI_NUMERICSCOPEМожно объединять несколько флагов путем логического сложения, если их сочетание имеет смысл, например
NI_DGRAMNI_NUMERICHOST11.18. Функции, допускающие повторное вхождение
Функция
gethostbynameСначала посмотрим, как эта функция работает. Если мы изучим ее исходный код (это несложно, поскольку исходный код для всей реализации BIND свободно доступен), то увидим, что обе функции — и
gethostbynamegethostbyaddr<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);}Мы выделили полужирным шрифтом спецификатор класса памяти
statichostgethostbyname2gethostbynamegethostbyname2Проблема повторного вхождения может возникнуть в нормальном процессе Unix, вызывающем функцию
gethostbynamegethostbyaddrSIGALRMmain() {
