Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

};

#define SIN6_LEN /* требуется для проверки во время компиляции */

struct sockaddr_in6 {

uint8_t sin_len; /* длина этой структуры (24) */

sa_family_t sin6_family; /* AF_INET6 */

in_port_t sin6_port; /* номер порта транспортного уровня */

/* сетевой порядок байтов */

uint32_t sin6_flowinfo; /* приоритет и метка потока */

/* сетевой порядок байтов */

struct in6_addr sin6_addr; /* IPv6-адрес */

/* сетевой порядок байтов */

uint32_t sin6_scope_id; /* набор интерфейсов */

};

ПРИМЕЧАНИЕ

Расширения API сокетов для IPv6 описаны в RFC 3493 [36].

Отметим следующие моменты относительно листинга 3.3:

Константа

SIN6_LEN
должна быть задана, если система поддерживает поле длины для структур адреса сокета.

Семейством IPv6 является

AF_INET6
, в то время как семейство IPv4 —
AF_INET
.

Элементы в структуре упорядочены таким образом, что если структура

sockaddr_in6
выровнена по 64 битам, то так же выровнен и 128-разрядный элемент
sin6_addr
. На некоторых 64-разрядных процессорах доступ к данным с 64-разрядными значениями оптимизирован, если данные выровнены так, что их адрес кратен 64.

Элемент

sin6_flowinfo
разделен на три поля:

20 бит младшего порядка — это метка потока;

следующие 12 бит зарезервированы.

Поле метки потока и поле приоритета рассматриваются в описании рис. А.2. Отметим, что использование поля приоритета еще не определено.

Элемент

sin6_scope_id
определяет контекст, в котором действует контекстный адрес (scoped address). Чаще всего это бывает индекс интерфейса для локальных адресов (см. раздел А.5).

Новая универсальная структура адреса сокета

Новая универсальная структура адреса сокета была определена как часть API сокетов IPv6 с целью преодолеть некоторые недостатки существующей структуры

sockaddr
. В отличие от структуры
sockaddr
, новая структура
sockaddr_storage
достаточно велика для хранения адреса сокета любого типа, поддерживаемого системой. Новая структура задается подключением заголовочного файла
<netinet/in.h>
, часть которого показана в листинге 3.4.

Листинг 3.4. Структура хранения адреса сокета sockaddr_storage

struct sockaddr_storage {

uint8_t ss_len; /* длина этой структуры (зависит от реализации) */

sa_family_t ss_family; /* семейство адреса. AF_xxx */

/* зависящие от реализации элементы, обеспечивающие:

а) выравнивание, достаточное для выполнения требований по выравниванию всех

типов адресов сокетов, поддерживаемых системой;

б) достаточный объем для хранения адреса сокета любого типа,

поддерживаемого системой. */

};

Тип

sockaddr_storage
— это универсальная структура адреса сокета, отличающаяся от
struct sockaddr
по следующим параметрам:

1. Если к структурам адресов сокетов, поддерживаемым системой, предъявляются требования по выравниванию, структура

sockaddr_storage
выполняет самое жесткое из них.

  • Читать дальше
  • 1
  • ...
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: