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

12  memcpy(cli, serv, salen); /* копируем структуру адреса сокета */

13  sock_set_port(cli, salen, 0); /* и устанавливаем порт в 0 */

14  Bind(sockfd, cli, salen);


15  dg_cli(stdin, sockfd, serv, salen);


16  exit(0);

17 }

К сожалению, все три системы, на которых проводилась проверка — FreeBSD 4.8, MacOS X и Linux 2.4.7, — позволяют использовать функцию bind, а затем посылают UDP-дейтаграммы с IP-адресом многоадресной передачи отправителя.

21.3. Если мы запустим программу ping для группы узлов 224.0.0.1 на нашем узле aix, получим следующий вывод:

solaris % ping 224.0.0.1

PING 224.0.0.1: 56 data bytes

64 bytes from 192.168.42.2: icmp_seq=0 ttl=255 time=0 ms

64 bytes from 192.168.42.1: icmp_seq=0 ttl=64 time=1 ms (DUP!)

^C

----224.0.0.1 PING Statistics----

1 packets transmitted. 1 packets received. +1 duplicates. 0% packet loss

round-trip min/avg/max = 0/0/0 ms

Ответили оба узла в правой сети Ethernet на рис. 1.7.

ПРИМЕЧАНИЕ

Для предотвращения определенных типов атак некоторые системы не отвечают на широковещательные и многоадресные ICMP-запросы. Чтобы получить ответ от freebsd, нам пришлось специально настроить эту систему:

freebsd % sysctl net.inet.icmp.bmcastecho=1

21.5. Величина 1 073 741 824 преобразуется в значение с плавающей точкой и делится на 4 294 967 296, что дает значение 0,250. В результате умножения на 1 000 000 получаем значение 250 000 в микросекундах, а это одна четверть секунды. Наибольшая дробная часть получается при делении 4 294 967 295 на 429 4967 296 и составляет 0,99 999 999 976 716 935 634. Умножая это число на 1 000 000 и отбрасывая дробную часть, получаем 999 999 — наибольшее значение количества микросекунд.

Глава 22

22.1. Вспомните, что функция sock_ntop использует свой собственный статический буфер для хранения результата. Если мы вызовем ее дважды в качестве аргумента в вызове printf, второй вызов приведет к перезаписи результата первого вызова.

22.2. Да, если ответ содержит 0 байт пользовательских данных (например, структура hdr).

22.3. Поскольку функция select не изменяет структуру timeval, которая определяет ее ограничение по времени, нам следует заметить время отправки первого пакета (оно возвращается в миллисекундах функцией rtt_ts). Если функция select сообщает, что сокет готов к чтению, заметьте текущее время, а если функция recvmsg вызывается повторно, вычислите новый тайм-аут для функции select.

22.4. Обычным решением будет создать по одному сокету на каждый адрес интерфейса, как было сделано в разделе 22.6, и отправлять ответ с того же сокета, на который пришел запрос.

22.5. Вызов функции getaddrinfо без аргумента имени узла и без флага AI_PASSIVE заставляет эту функцию считать, что используется локальный адрес 0::1 (для IPv6) или 127.0.0.1 (для IPv4). Напомним, что структура адреса сокета IPv6 возвращается функцией getaddrinfo перед структурой адреса сокета IPv4 при условии, что поддерживается протокол IPv6. Если узел поддерживает оба протокола, вызов функции socket в udp_client закончится успешно при указании семейства протоколов AF_INET6.

В листинге Д.9 приведена не зависящая от протокола версия программы.

Листинг Д.9. Не зависящая от протокола версия программы из раздела 22.6

//advio/udpserv04.c

 1 #include "unpifi.h"


 2 void mydg_echo(int, SA*, socklen_t);


 3 int

 4 main(int argc, char **argv)

 5 {

 6  int sockfd, family, port;

 7  const int on = 1;

 8  pid_t pid;

 9  socklen_t salen;

10  struct sockaddr *sa, *wild;

11  struct ifi_info *ifi, *ifihead;


12  if (argc == 2)

13   sockfd = Udp_client(NULL, argv[1], (void**)&sa, &salen);

14  else if (argc == 3)

15   sockfd = Udp_client(argv[1], argv[2], (void**)&sa, &salen);

16  else

17   err_quit("usage; udpserv04 [ ] ");

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

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

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

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

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

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

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

Как раскрутить и разрекламировать Web-сайт в сети Интернет
Как раскрутить и разрекламировать Web-сайт в сети Интернет

Настоящая книга заинтересует всех, кто столкнулся с вопросами подготовки, размещения в Сети и популяризации Internet ресурсов различного уровня: от домашней странички до корпоративного сайта. В ней вы найдете все, что необходимо для оптимизации Web сайтов под поисковые системы: приемы написания Web-страниц, описание множества самых популярных специализированных программ, предназначенных для подготовки сайта и его раскрутки, создания удачного HTML-кода страниц с правильными метаданными.Книга является практическим руководством для разработчиков Web сайтов и всех, занимающихся их продвижением. Автор приводит множество советов, касающихся создания и анонсирования Web страниц. Рассмотрены средства автоматизации для повышения эффективности разработки и маркетинга при создании и обслуживании сайта. Описание программных и сетевых средств, автоматизирующих процессы тестирования и отладки сайта, обеспечивающих проверку работоспособности и корректности гиперссылок, синтаксиса HTML кода и грамматики размещенного на странице текста, занимает центральное место в книге. Подробно излагаются возможности таких программ, как Linkbot Developer Edition, Domain NameChecker, Retrieve, CyberSpyder Link Test, HTML Link Validator, CSE HTML Validator, A Real Validator, MetaTag ToolKit, MetaMan, WebQA.Отдельная глава посвящена регистрации Web ресурсов в поисковых системах и каталогах. Описываются программы автоматической регистрации (WebPosition, Page Promoter, Web Регистратор), способы взаимодействия с индексирующими роботами поисковых машин, правила применения метаданных. Рассматриваются приемы и методы рекламы сайтов в Internet, указаны критерии ее эффективности.Издание рассчитано на широкий круг читателей и будет полезно как начинающим создателям Web сайтов, так и профессионалам, которые хотят научиться более качественно продвигать в Сети свой Web продукт.

Александр Петрович Загуменнов

ОС и Сети, интернет