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

На рис. 27.6 показан формат объектов вспомогательных данных, используемый для отправки и получения параметров транзитных узлов и параметров получателя.

Рис. 27.6. Объекты вспомогательных данных, используемые для параметров транзитных узлов и параметров получателя

Чтобы уменьшить объем дублированного кода, определены семь функций, которые создают и обрабатывают эти вспомогательные объекты данных. Следующие четыре функции формируют отправляемый параметр.

#include netinet/in.h

int inet6_opt_init(void * extbuf, socklen_t extlen);

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

int inet6_opt_append(void * extbuf, socklen_t extlen,

 int offset, uint8_t type, socklen_t len, uint_t align, void ** databufp);

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

int inet6_opt_finish(void * extbuf, socklen_t extlen, int offset);

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

int inet6_opt_set_val(void * databuf, int offset,

 const void * val, socklen_t vallen);

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

Функция inet6_opt_initвозвращает количество байтов, необходимое для данного параметра. Если аргумент extbufне является нулевым указателем, функция инициализирует заголовок расширения. Значение -1 возвращается при аварийном завершении работы в том случае, если аргумент extlenне кратен 8. (Все заголовки параметров транзитных узлов и получателя в IPv6 должны быть кратны 8.)

Функция inet6_opt_appendвозвращает общую длину заголовка расширения после добавления указанного при вызове параметра. Если аргумент extbufне является нулевым указателем, функция дополнительно выполняет инициализацию параметра и вставляет необходимое заполнение. Значение -1 возвращается в случае аварийного завершения работы, если параметр не помещается в выделенный буфер. Аргумент offsetпредставляет собой текущую полную длину, то есть значение, возвращенное при предыдущем вызове inet6_opt_appendили inet6_opt_init. Аргументы typeи lenзадают тип и длину параметра, они копируются непосредственно в его заголовок. Аргумент alignуказывает условие выравнивания, то есть значение x из выражения xn + y. Значение у вычисляется по alignи len, поэтому указывать его явным образом необходимости нет. Аргумент databufpпредставляет собой адрес будущего указателя на значение параметра. Значение параметра копируется вызывающим процессом при помощи функции inet6_opt_set_valили любым другим методом.

Для завершения расширяющего заголовка вызывается функция inet6_opt_finish, которая добавляет в заголовок заполнение, делая его длину кратной 8 байтам. Как и раньше, заполнение добавляется в буфер только в том случае, если аргумент extbufпредставляет собой непустой указатель. В противном случае функция вычисляет обновленное значение длины. Подобно inet6_opt_append, аргумент offsetзадает текущую полную длину (значение, возвращаемое inet6_opt_appendи inet6_opt_init). Функция inet6_opt_finishвозвращает полную длину возвращаемого заголовка или -1, если требуемое заполнение не помещается в предоставленный буфер.

Функция inet6_opt_set_valкопирует значение параметра в буфер данных, возвращаемый inet6_opt_append. Аргумент databufпредставляет собой указатель, возвращаемый inet6_opt_append. Аргумент offsetпредставляет собой текущую длину внутри параметра, его необходимо инициализировать нулем для каждого параметра, а затем использовать возвращаемые inet6_opt_set_valзначения по мере построения параметра. Аргументы valи vallenопределяют значение для копирования в буфер значения параметра.

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

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

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