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

Интервал:

Закладка:

Сделать
Level optname get set Описание Флаг Тип данных
IPPROTO_TCP TCP_MAXSEG Максимальный размер сегмента TCP int
TCP_NODELAY Отключает алгоритм Нагла int
IPPROTO_SCTP SCTP_ADAPTION_LAYER Указание на уровень адаптации sctp_setadaption
SCTP_ASSOCINFO + Получение и задание сведений об ассоциации sctp_assocparamms{}
SCTP_AUTOCLOSE Автоматическое закрытие int
SCTP_DEFAULT_SEND_PARAM Параметры отправки но умолчанию sctp_sndrcvinfo{}
SCTP_DISABLE_FRAGMENTS Фрагментация SCTP int
SCTP_EVENTS Уведомление об интересующих событиях sctp_event_subscribe{}
SCTP_GET_PEER_ADDR_INFO + Получение состояния адреса собеседника sctp_paddrinfo{}
SCTP_I_WANT_MAPPED_V4_ADDR Отображение адресов IPv4 int
SCTP_INITMSG Параметры пакета INIT по умолчанию sctp_initmsg{}
SCTP_MAXBURST Максимальный размер набора пакетов int
SCTP_MAXSEG Максимальный размер фрагментации int
SCTP_NODELAY Отключение алгоритма Нагла int
SCTP_PEER_ADDR_PARAMS + Параметры адреса собеседника sctp_paddrparams{)
SCTP_PRIMARY_ADDR + Основной адрес назначения sctp_setprim{}
SCTP_RTOINFO + Информация RTO sctp_rtoinfo{}
SCTP_SET_PEER_PRIMARY_ADDR Основной адрес назначения собеседника sctp_setpeerprim{}
SCTP_STATUS + Получение сведений о статусе ассоциации sctp_status{}

Существует два основных типа параметров: двоичные параметры, включающие или отключающие определенное свойство (флаги), и параметры, получающие и возвращающие значения параметров, которые мы можем либо задавать, либо проверять. В колонке «Флаг» указывается, относится ли параметр к флагам. Для флагов при вызове функции getsockoptаргумент *optvalявляется целым числом. Возвращаемое значение *optvalнулевое, если параметр отключен, и ненулевое, если параметр включен. Аналогично, функция setsockoptтребует ненулевого значения *optvalдля включения параметра, и нулевого значения — для его выключения. Если в колонке «Флаг» не содержится символа «•», то параметр используется для передачи значения заданного типа между пользовательским процессом и системой.

В последующих разделах этой главы приводятся дополнительные подробности о параметрах сокетов.

7.3. Проверка наличия параметра и получение значения по умолчанию

Напишем программу, которая проверяет, поддерживается ли большинство параметров, представленных в табл. 7.1 и 7.2, и если да, то выводит их значения, заданные по умолчанию. В листинге 7.1 [1] Все исходные коды программ, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com. содержатся объявления нашей программы.

Листинг 7.1. Объявления для нашей программы, проверяющей параметры сокетов

//sockopt/checkopts.с

1 #include "unp.h"

2 #include /* определения констант TCP_xxx */

3 union val {

4 int i_val;

5 long l_val;

6 struct linger linger_val;

7 struct timeval timeval_val;

8 } val;

9 static char *sock_str_flag(union val*, int);

10 static char *sock_str_int(union val*, int);

11 static char *sock_str_linger(union val*, int);

12 static char *sock_str_timeval(union val*, int);

13 struct sock_opts {

14 const char *opt_str;

15 int opt_level;

16 int opt_name;

17 char *(*opt_val_str)(union val*, int);

18 } sock_opts[] = {

19 { "SO_BROADCAST", SOL_SOCKET, SO_BROADCAST, sock_str_flag },

20 { "SO_DEBUG", SOL_SOCKET, SO_DEBUG, sock_str_flag },

21 { "SO_DONTROUTE", SOL_SOCKET, SO_DONTROUTE, sock_str_flag },

22 { "SO_ERROR", SOL_SOCKET, SO_ERROR, sock_str_int },

23 { "SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE, sock_str_flag },

24 { "SO_LINGER", SOL_SOCKET, SO_LINGER, sock_str_linger },

25 { "SO_OOBINLINE", SOL_SOCKET, SO_OOBINLINE, sock_str_flag },

26 { "SO_RCVBUF", SOL_SOCKET, SO_RCVBUF, sock_str_int },

27 { "SO_SNDBUF", SOL_SOCKET, SO_SNDBUF, sock_str_int },

28 { "SO_RCVLOWAT", SOL_SOCKET, SO_RCVLOWAT, sock_str_int },

29 { "SO_SNDLOWAT", SOL_SOCKET, SO_SNDLOWAT, sock_str_int },

30 { "SO_RCVTIMEO", SOL_SOCKET, SO_RCVTIMEO, sock_str_timeval },

31 { "SO_SNDTIMEO", SOL_SOCKET, SO_SNDTIMEO, sock_str_timeval },

32 { "SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR, sock_str_flag },

33 #ifdef SO_REUSEPORT

34 { "SO_REUSEPORT", SOL_SOCKET, SO_REUSEPORT, sock_str_flag },

35 #else

36 { "SO_REUSEPORT", 0, 0, NULL },

37 #endif

38 { "SO_TYPE", SOL_SOCKET, SO_TYPE, sock_str_int },

39 { "SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag },

40 { "IP_TOS", IPPROTO_IP, IP_TOS, sock_str_int },

41 { "IP_TTL", IPPROTO_IP, IP_TTL, sock_str_int },

42 { "IPV6_DONTFRAG", IPPROTO_IPV6, IPV6_DONTFRAG, sock_str_flag },

43 { "IPV6_UNICAST_HOPS", IPPROTO_IPV6, IPV6_UNICAST_HOPS, sock_str_int },

44 { "IPV6_V6ONLY", IPPROTO_IPV6, IPV6_V6ONLY, sock_str_flag },

45 { "TCP_MAXSEG", IPPROTO_TCP, TCP_MAXSEG, sock_str_int },

46 { "TCP_NODELAY", IPPROTO_TCP, TCP_NODELAY, sock_str_flag },

47 { "SCTP_AUTOCLOSE", IPPROTO_SCTP, SCTP_AUTOCLOSE, sock_str_int },

48 { "SCTP_MAXBURST", IPPROTO_SCTP, SCTP_MAXBURST, sock_str_int },

49 { "SCTP_MAXSEG", IPPROTO_SCTP, SCTP_MAXSEG, sock_str_int },

50 { "SCTP_NODELAY", IPPROTO_SCTP, SCTP_NODELAY, sock_str_flag },

51 { NULL, 0, 0, NULL }

52 };

Объявление объединения возможных значений

3-9 Наше объединение valсодержит по одному элементу для каждого возможного возвращаемого значения из функции getsockopt.

Задание прототипов функций

10-13 Мы определяем прототипы для четырех функций, которые вызываются для вывода значения данного параметра сокета.

Задание структуры и инициализация массива

14-46 Наша структура sock_optsсодержит всю информацию, которая необходима, чтобы вызвать функцию getsockoptдля каждого из параметров сокета и вывести его текущее значение. Последний элемент, opt_val_str, является указателем на одну из четырех функций, которые выводят значение параметра. Мы размещаем в памяти и инициализируем массив этих структур, каждый элемент которого соответствует одному параметру сокета.

ПРИМЕЧАНИЕ

Не все реализации поддерживают полный набор параметров сокетов. Чтобы определить, поддерживается ли данный параметр, следует использовать #ifdef или #if defined, как показано для параметра SO_REUSEPORT. Для полноты картины требуется обработать подобным образом все параметры, но в книге мы пренебрегаем этим, потому что #ifdef только удлиняет показанный код и не влияет на суть дела.

В листинге 7.2 показана наша функция main.

Листинг 7.2. Функция main для проверки параметров сокетов

//sockopt/checkopts.c

53 int

54 main(int argc, char **argv)

55 {

56 int fd;

57 socklen_t len;

58 struct sock_opts *ptr;

59 for (ptr = sock_opts; ptr->opt_str != NULL; ptr++) {

60 printf("%s: ptr->opt_str);

61 if (ptr->opt_val_str == NULL)

62 printf("(undefined)\n");

63 else {

64 switch(ptr->opt_level) {

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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