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

Предполагается, что с помощью этих функций вы будете делать два прохода по списку параметров, которые вы предполагаете вставить: во время первого прохода будет вычисляться требуемая длина буфера, а во время второго прохода — выполняться фактическое построение буфера параметра. При первом проходе нужно вызвать inet6_opt_init, inet6_opt_append(один раз для каждого параметра) и inet6_opt_finish, передавая нулевой указатель и 0 в качестве аргументов extbufи extlenсоответственно. Затем можно динамически выделить буфер, использовав в качестве размера значение, возвращенное inet6_opt_finish. Этот буфер будет передаваться в качестве аргумента extbufпри втором проходе. Во время второго прохода вызываются функции inet6_opt_initи inet6_opt_append. Копирование значений параметров может выполняться как «вручную», так и при помощи функции inet6_opt_set_val. Наконец, мы должны вызвать inet6_opt_finish. Альтернативный вариант действий состоит в выделении буфера достаточно большого размера для нашего параметра. В этом случае первый проход можно не выполнять. Однако если изменение параметров приведет к переполнению выделенного буфера, в программе возникнет ошибка.

Оставшиеся три функции обрабатывают полученный параметр.

#include netinet/in.h

int inet6_opt_next(const void * extbuf, socklen_t extlen,

int offset, uint8_t * typep, socklen_t * lenp, void ** databufp);

Возвращает: смещение следующего параметра, -1 в случае достижения конца списка параметров или в случае ошибки

int inet6_opt_find(const void * extbuf, socklen_t extlen,

int offset, uint8_t type, socklen_t * lenp, void ** databufp);

Возвращает: смещение следующего параметра, -1 в случае достижения конца списка параметров или в случае ошибки

int inet6_opt_get_val(const void * databuf, int offset, void * val, socklen_t vallen);

Возвращает: новое значение смещения внутри буфера databuf

Функция inet6_opt_nextобрабатывает следующий параметр в буфере. Аргументы extbufи extlenопределяют буфер, в котором содержится заголовок. Как и у inet6_opt_append, аргумент offsetпредставляет собой текущее смещение внутри буфера. При первом вызове inet6_opt_nextзначение этого аргумента должно быть равно нулю, а при всех последующих — значению, возвращенному при предыдущем вызове функции. Аргументы typep, lenpи databufpпредназначены для возвращения функцией типа, длины и значения параметра соответственно. Функция inet6_opt_nextвозвращает -1 в случае обработки заголовка с нарушенной структурой или в случае достижения конца буфера.

Функция inet6_opt_findаналогична предыдущей функции, но позволяет вызывающему процессу задать тип параметра, который следует искать (аргумент type), вместо того чтобы каждый раз возвращать следующий параметр.

Функция inet6_opt_get_valпредназначена для извлечения значений из параметра по указателю databuf, возвращаемому предшествующим вызовом inet6_opt_nextили inet6_opt_find. Как и для inet6_opt_set_val, аргумент offsetдолжен начинаться с 0 для каждого параметра, а затем должен приравниваться значению, возвращаемому предшествующим вызовом inet6_opt_get_val.

<p>27.6. Заголовок маршрутизации IPv6</p>

Заголовок маршрутизации IPv6 используется для маршрутизации от отправителя в IPv6. Первые два байта заголовка маршрутизации такие же, как показанные на рис. 27.3: поле следующего заголовка( next header) и поле длины заголовка расширения( header extension length). Следующие два байта задают тип маршрутизации( routing type) и количество оставшихся сегментов( number of segments left) (то есть сколько из перечисленных узлов еще нужно пройти). Определен только один тип заголовка маршрутизации, обозначаемый как тип 0. Формат заголовка маршрутизации показан на рис. 27.7.

Рис. 27.7. Заголовок маршрутизации IPv6

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT