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

Интервал:

Закладка:

Сделать
Рис 276 Объекты вспомогательных данных используемые для параметров - фото 131

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

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

#include

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определяют значение для копирования в буфер значения параметра.

Предполагается, что с помощью этих функций вы будете делать два прохода по списку параметров, которые вы предполагаете вставить: во время первого прохода будет вычисляться требуемая длина буфера, а во время второго прохода — выполняться фактическое построение буфера параметра. При первом проходе нужно вызвать 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

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.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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