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

10.3. Чтобы каждая порция данных была помещена в свой пакет, мы установили размер сообщения 800 байт. Более правильным решением будет получение значения параметра сокета SCTP_MAXSEG для определения размера данных, помещающихся в один пакет.

10.4. Алгоритм Нагла (управляемый параметром сокета SCTP_NODELAY, см. раздел 7.10) вызывает проблемы только при передаче данных небольших объемов. Если данные передаются порциями такого размера, что SCTP вынужден передавать их немедленно, никакого замедления быть не может. Установка небольшого размера out_sz исказит результаты, потому что в некоторых случаях передача будет задерживаться до получения выборочных уведомлений от собеседника. Поэтому при передаче данных небольшого размера алгоритм Нагла следует отключать.

10.5. Если приложение устанавливает ассоциацию и изменяет количество потоков, количество потоков в данной ассоциации не меняется. Количество потоков может быть задано только для новых ассоциаций, но не для существующих.

Сокет типа «один-ко-многим» позволяет устанавливать ассоциации неявно. Для изменения параметров ассоциации необходимо вызвать sendmsg со вспомогательными данными. Фактически при этом обязательно использовать неявное установление ассоциации.

<p>Глава 11</p>

11.1. В листинге Д.4 приведена программа, вызывающая функцию gethostbyaddr.

Листинг Д.4. Изменение листинга 11.1 для вызова функции gethostbyaddr

//names/hostent2.c

 1 #include "unp.h"

 2 int

 3 main(int argc, char **argv)

 4 {

 5  char *ptr, **pptr;

 6  char str[INET6_ADDRSTRLEN];

 7  struct hostent *hptr;

 8  while (--argc > 0) {

 9   ptr = *++argv;

10   if ( (hptr = gethostbyname(ptr)) == NULL) {

11    err_msg("gethostbyname error for host: %s: %s",

12     ptr, hstrerror(h_errno));

13    continue;

14   }

15   printf("official hostname: %s\n", hptr->h_name);

16   for (pptr = hptr->h_aliases; *pptr != NULL; pptr++)

17    printf(" alias: %s\n", *pptr);

18   switch (hptr->h_addrtype) {

19   case AF_INET:

20 #ifdef AF_INET6

21   case AF_INET6:

22 #endif

23    pptr = hptr->h_addr_list;

24    for (; *pptr != NULL; pptr++) {

25     printf("\taddress: %s\n",

26      Inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));

27     if ((hptr = gethostbyaddr(*pptr, hptr->h_length,

28      ptr->h_addrtype)) == NULL)

29      printf("\t(gethostbyaddr failed)\n");

30     else if (hptr->h_name != NULL)

31      printf("\tname = %s\n", hptr->h_name);

32     else

33      printf("\t(no hostname returned by gethostbyaddr)\n");

34    }

35    break;

36   default:

37    err_ret("unknown address type");

38    break;

39   }

40  }

41  exit(0);

42 }

Эта программа корректно работает на узле с единственным IP-адресом. Если запустить программу из листинга 11.1 на узле с четырьмя IP-адресами, то получим:

freebsd % hostent cnn.com

official hostname: cnn.com

address: 64.236.16.20

address: 64.236.16.52

address: 64.236.16.84

address: 64.236.16.116

address: 64 236.24.4

address: 64.236.24.12

address: 64.236.24.20

address: 64.236.24.28

Но если запустить программу из листинга Д.4 на том же узле, в выводе будет только первый IP-адрес:

freebsd % hostent2 cnn.com

official hostname: cnn.com

address: 64.236.24.4

name = www1.cnn.com

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

Все книги серии Мастер-класс

Секреты резьбы по дереву
Секреты резьбы по дереву

Изделия из древесины и материалов, имитирующих ее текстуру, привычным образом окружают нас в повседневной жизни, поэтому мы относимся к ней как к чему-то обыденному. Но как только ее коснется умелая рука мастера резьбы по дереву, рождается произведение искусства и раскрываются такие качества древесины, как богатая фактура, разнообразие цветов, особая теплота. Эта книга поможет читателю открыть для себя удивительный мир творчества и познать секреты резьбы по дереву. Автор надеется, что начинающие резчики найдут в ней интересный и полезный материал, который позволит им стать мастерами. В приложении представлены рисунки орнаментов и различных узоров, которые на первых порах можно копировать, а по мере приобретения навыка на их основе разрабатывать свои образцы.

Галина Алексеевна Серикова

Сделай сам / Хобби и ремесла / Руководства / Дом и досуг / Словари и Энциклопедии

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