Уильям Стивенс - UNIX: разработка сетевых приложений

Тут можно читать онлайн Уильям Стивенс - UNIX: разработка сетевых приложений - бесплатно ознакомительный отрывок. Жанр: comp-osnet, издательство Питер, год 2007. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    UNIX: разработка сетевых приложений
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2007
  • Город:
    Санкт-Петербург
  • ISBN:
    5-94723-991-4
  • Рейтинг:
    4.33/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Уильям Стивенс - UNIX: разработка сетевых приложений краткое содержание

UNIX: разработка сетевых приложений - описание и краткое содержание, автор Уильям Стивенс, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.

UNIX: разработка сетевых приложений - читать онлайн бесплатно ознакомительный отрывок

UNIX: разработка сетевых приложений - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Уильям Стивенс
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

■ Семейством адресов, указанным вызывающим процессом в структуре hints, задается тип структуры адреса сокета, который вызывающий процесс предполагает получить. Если вызывающий процесс задает AF_INET, функция не должна возвращать структуры sockaddr_in6, а для AF_INET6функция не должна возвращать структур sockaddr_in.

■ POSIX утверждает, что при задании семейства AF_UNSPECдолжны возвращаться адреса, которые могут использоваться с любым семейством протоколов, допускающим применение имени узла и имени службы. Это подразумевает, что если у узла имеются как записи типа AAAA, так и записи типа А, то записи типа AAAA возвращаются как структуры sockaddr_in6, а записи типа A — как структуры sockaddr_in. Нет смысла возвращать еще и записи типа А как адреса IPv4, преобразованные к виду IPv6, в структурах sockaddr_in6, потому что при этом не возвращается никакой дополнительной информации — эти адреса уже возвращены в структурах sockaddr_in.

■ Это утверждение POSIX также подразумевает, что если флаг AI_PASSIVEзадан без имени узла, то должен быть возвращен универсальный адрес IPv6 ( IN6ADDR_ANY_INITили 0::0) в структуре sockaddr_in6вместе с универсальным адресом IPv4 ( INADDR_ANYили 0.0.0.0) в структуре sockaddr_in. Также нет смысла возвращать сначала универсальный адрес IPv4, поскольку мы увидим в разделе 12.2, что на узле с двойным стеком сокет сервера IPv6 может обрабатывать и клиенты IPv4, и клиенты IPv6.

■ Семейство адресов, указанное в поле ai_familyструктуры hintвместе с флагами AI_V4MAPPEDи AI_ALLполя ai_flags, задают тип записей, поиск которых ведется в DNS (тип А или тип AAAA), и тип возвращаемых адресов (IPv4, IPv6 или IPv4, преобразованные к виду IPv6). Мы обобщили это в табл. 11.3.

■ Имя узла может также быть либо шестнадцатеричной строкой IPv6, либо строкой в точечно-десятичной записи IPv4. Допустимость этой строки зависит от семейства адресов, заданного вызывающим процессом. Шестнадцатеричная строка IPv6 неприемлема, если задано семейство AF_INET, а строка в точечно-десятичной записи IPv4 неприемлема, если задано семейство AF_INET6. Но если задано семейство AF_UNSPEC, то допустимы оба варианта, и при этом возвращается соответствующий тип структуры адреса сокета.

ПРИМЕЧАНИЕ

Можно возразить, что если в качестве семейства протоколов задано AF_INET6, строка в точечно-десятичной записи должна возвращаться как адрес IPv4, преобразованный к виду IPv6 в структуре sockaddr_in6. Но другим способом получения этого результата является установка префикса строки с десятичной точкой 0::ffff:.

В табл. 11.3 показано, как будут обрабатываться адреса IPv4 и IPv6 функцией getaddrinfo. Колонка «Результат» отражает то, что мы хотим возвратить вызывающему процессу, если входные переменные таковы, как показано в первых трех колонках. Колонка «Действия» — то, каким образом мы получаем этот результат.

Таблица 11.3. Функция getaddrinfo: ее действия и результаты

Имя узла, указанное вызывающим процессом Семейство адресов, указанное вызывающим процессом Строка с именем узла содержит Результат Действия
Ненулевая строка с именем узла; активное или пассивное открытие AF_UNSPEC Имя узла Все записи AAAA возвращаются как структуры sockaddr_in6{} и все записи А возвращаются как структуры sockaddr_in{} Поиск по записям AAAA и поиск по записям A
Шестнадцатеричная строка Одна структура sockaddr_in6{} inet_pton(AF_INET6)
Строка в точечно- десятичной записи Одна структура sockaddr_in{} inet_pton(AF_INET)
AF_INET6 Имя узла Все записи AAAA возвращаются как структуры sockaddr_in6{} либо все записи А возвращаются как структуры sockaddr_in6{} с адресами IPv4, преобразованными к виду IPv6 Поиск по записям AAAA
Шестнадцатеричная строка Одна структура sockaddr_in6{} inet_pton(AF_INET6)
Строка в точечно-десятичной записи Ищется как имя узла
AF_INET Имя узла Все записи А возвращаются как структуры sockaddr_in{} Поиск по записям типа A
Шестнадцатеричная строка Ошибка: EAI_ADDRFAMILY
Строка в точечно-десятичной записи Одна структура sockaddr_in{} inet_pton(AF_INET)
Пустая строка с именем узла; пассивное открытие AF_UNSPEC Неявный адрес 0::0 Неявный адрес 0.0.0.0 Одна структура sockaddr_in6{} и одна структура sockaddr_in{} inet_pton(AF_INET6) inet_pton(AF_INET)
AF_INET6 Неявный адрес 0::0 Одна структура sockaddr_in6{} inet_pton(AF_INET6)
AF_INET Неявный адрес 0.0.0.0 Одна структура sockaddr_in{} inet_pton(AF_INET)
Пустая строка с именем узла; активное открытие AF_UNSPEC Неявный адрес 0::1 Неявный адрес 127.0.0.1 Одна структура sockaddr_in6{} и одна структура sockaddr_in{} inet_pton(AF_INET6) inet_pton(AF_INET)
AF_INET6 Неявный адрес 0::1 Одна структура sockaddr_in6{} inet_pton(AF_INET6)
AF_INET Неявный адрес 127.0.0.1 Одна структура sockaddr_in{} inet_pton(AF_INET)

Обратите внимание, что табл. 11.3 описывает только обработку адресов IPv4 и IPv6 функцией getaddrinfo, то есть количество и тип адресов, возвращаемых процессу в различных ситуациях. Реальное количество структур addrinfoзависит также от типа сокета и имени службы, о чем уже говорилось в связи с табл. 11.1.

11.10. Функция getaddrinfo: примеры

Теперь мы покажем некоторые примеры работы функции getaddrinfo, используя тестовую программу, которая позволяет нам вводить все параметры: имя узла, имя службы, семейство адресов, тип сокета и флаги AI_CANONNAMEи AI_PASSIVE. (Мы не показываем эту тестовую программу, поскольку она содержит около 350 строк малоинтересного кода. Ее можно получить тем же способом, что и прочие исходные коды для этой книги.) Тестовая программа выдает информацию о переменном числе возвращаемых структур addrinfo, показывая аргументы вызова функции socketи адрес в каждой структуре адреса сокета. Сначала показываем тот же пример, что и на рис. 11.3:

freebsd % testga -f inet -c -h freebsd4 -s domain

socket(AF_INET, SOCK_DGRAM, 17) ai_canonname = freebsd4.unpbook.com

address: 135.197.17.100:53

socket(AF_INET, SOCK_DGRAM, 17)

address: 172:24.37.94:53

socket(AF_INET, SOCK_STREAM, 6) ai_canonname = freebsd4.unpbook.com

address: 135.197.17.100:53

socket(AF_INET, SOCK_STREAM, 6)

address: 172.24.37.94:53

Параметр -f inetзадает семейство адресов, -с указывает, что нужно возвратить каноническое имя, -h freebsd4задает имя узла, -s domainзадает имя службы.

Типичный сценарий клиента — задать семейство адресов, тип сокета (параметр -t), имя узла и имя службы. Следующий пример показывает это для узла с несколькими сетевыми интерфейсами с шестью адресами Ipv4:

freebsd % testga -f inet -t stream -h gateway.tuc.noao.edu -s daytime

socket(AF_INET, SOCK_STREAM, 6)

address: 140.252.108.1:13

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Уильям Стивенс читать все книги автора по порядку

Уильям Стивенс - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




UNIX: разработка сетевых приложений отзывы


Отзывы читателей о книге UNIX: разработка сетевых приложений, автор: Уильям Стивенс. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x