UNIX: разработка сетевых приложений - [394]
>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 [
>18 family = sa->sa_family;
>19 port = sock_get_port(sa, salen);
>20 Close(sockfd); /* хотим узнать семейство, порт salen */
>21 for (ifihead = ifi = Get_ifi_info(family, 1),
>22 ifi ! = NULL; ifi = ifi->ifi_next) {
>23 /* связывание с многоадресными адресами */
>24 sockfd = Socket(family, SOCK_DGRAM, 0);
>25 Setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
>26 sock_set_port(ifi->ifi_addr, salen, port);
>27 Bind(sockfd, ifi->ifi_addr, salen);
>28 printf("bound %s\n", Sock_ntop(ifi->ifi_addr, salen));
>29 if ((pid = Fork()) == 0) { /* дочерний процесс */
>30 mydg_echo(sockfd, ifi->ifi_addr, salen);
>31 exit(0); /* никогда не выполняется */
>32 }
>33 if (ifi->ifi_flags & IFF_BROADCAST) {
>34 /* попытка связывания с широковещательным адресом */
>35 sockfd = Socket(family, SOCK_DGRAM, 0);
>36 Setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
>37 sock_set_port(ifi->ifi_brdaddr, salen, port);
>38 if (bind(sockfd, ifi->ifi_brdaddr, salen) < 0) {
>39 if (errno == EADDRINUSE) {
>40 printf("EADDRINUSE: %s\n",
>41 Sock_ntop(ifi->ifi_brdaddr, salen));
>42 Close(sockfd);
>43 continue;
>44 } else
>45 err_sys("bind error for %s",
>46 Sock_ntop(ifi->ifi_brdaddr, salen));
>47 }
>48 printf ("bound %s\n", Sock_ntop(ifi->ifi_brdaddr, salen));
>49 if ((pid = Fork()) == 0) { /* дочерний процесс */
>50 mydg_echo(sockfd, ifi->ifi_brdaddr, salen);
>51 exit(0); /* никогда не выполняется */
>52 }
>53 }
>54 }
>55 /* связывание с универсальным адресом */
>56 sockfd = Socket(family, SOCK_DGRAM, 0);
>57 Setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
>58 wild = Malloc(salen);
>59 memcpy(wild, sa, salen); /* копирует семейство и порт */
>60 sock_set_wild(wild, salen);
>61 Bind(sockfd, wild, salen);
>62 printf("bound %s\n", Sock_ntop(wild, salen));
>63 if ((pid = Fork()) == 0) { /* дочерний процесс */
Книга написана известным экспертом по операционной системе UNIX и посвящена описанию одной из форм межпроцессного взаимодействия, IPC, с использованием которой создается большинство сложных программ. В ней описываются четыре возможности разделения решаемых задач между несколькими процессами или потоками одного процесса: передача сообщений, синхронизация, разделяемая память, удаленный вызов процедур.Книга содержит большое количество иллюстрирующих примеров и может использоваться как учебник по IPC, и как справочник для опытных программистов.
В отличие от плохого танцора, хорошему сисадмину мешают только кукушкины яйца. Их откладывают в его компьютер злобные хакеры, чтобы из них вылупились программы, делающие своего папу-кукушку суперпользователем. Но сколько кабелю не виться — а кончику быть: бравый сисадмин не дремлет и за годик-другой выводит злоумышленников на чистую воду: на этот раз хакерская тусовка круто пролетела. Такого предельно краткое содержание классической книги эксперта по компьютерной безопасности Клиффа Столла «Яйцо кукушки».
Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет собой отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из других операционных систем. Подробно рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование свободно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек.
Одно из немногих изданий на русском языке, которое посвящено старейшей глобальной компьютерной сети "Fidonet". Сатирический справочник о жизни и смерти самого древнего сетевого сообщества, которое до сих пор существует среди нас.
В пособии излагаются основные тенденции развития организационного обеспечения безопасности информационных систем, а также подходы к анализу информационной инфраструктуры организационных систем и решению задач обеспечения безопасности компьютерных систем.Для студентов по направлению подготовки 230400 – Информационные системы и технологии (квалификация «бакалавр»).
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Все началось с того, что студенту захотелось написать собственную программу эмуляции терминала. Потом он принялся развивать и дополнять ее и вдруг заметил, что у него получилась операционная система. Линус назвал ее Linux и поместил в Интернете, призвав желающих вносить в систему изменения. И программисты всех стран, объединившись, стали над ней трудиться.«Just for fun» – смесь автобиографии с рассуждениями о технологиях и путях их развития. Для читателей, неискушенных в программировании, Торвальдс разворачивает увлекательную историю своей жизни.
На страницах этой книги вы найдете подробные описания и пояснения к разбору моделей и основным законам конструирования и моделирования, начиная со снятия мерок и кончая созданием завершенного варианта чертежа выкройки. Автор виртуозно привязывает каждое изделие к индивидуальной фигуре с ее неповторимым рельефом. Благодаря советам Галии Злачевской вы сможете понять и повторить ее действия и в итоге комфортно и красиво одеть любую фигуру. Цель работы автора – практическое воплощение предлагаемой идеи в одежду на конкретного человека.
Если вы любознательны, наделены фантазией и любите создавать что-либо своими руками, то эта книга для вас. Оригами – уникальное японское искусство складывания бумажных фигурок – вот уже в течение многих веков привлекает людей разных возрастов и национальностей. И действительно, в обычном листе кроются неограниченные комбинаторские возможности. В этом вы убедитесь, воспользовавшись приведенными в этой книге советами и рекомендациями, макетами классических и авторских моделей, многочисленными рисунками, подробно разъясняющими, как овладеть техникой оригами.
В руководстве, написанном известными специалистами, психологом Сарой Файн и социальным работником Полом Глассером, рассматриваются закономерности и особенности начального этапа взаимодействия консультанта и клиента. Детально описаны динамика психотерапевтического процесса и приемы установления контакта и завоевания доверия во время первичной консультации различных групп клиентов, как добровольных, так и недобровольных.Книга предназначена как для начинающих, так и для опытных специалистов, в задачи которых входит оказание помощи другим людям: психологам, социальным работникам, юристам, педагогам и т. д.
Книга представляет собой сборник, который содержит схемы построения чертежей из двух предыдущих бестселлеров автора, а также предлагает ряд новых моделей. Галия Злачевская – автор эксклюзивной методики конструирования швейных изделий. Особенность ее метода в том, что вариант построения модели подбирается с учетом особенностей силуэта фигуры, поэтому крой сразу получается точным. И главное – больше никаких примерок и подгонок! Следуя простым рекомендациям автора, вы легко сможете «шаг за шагом» освоить эту методику и в итоге – получите идеально сидящую вещь.Вы научитесь создавать современные, неповторимые и оригинальные модели для мужчин, женщин, детей и даже малышей до 3 лет с минимальными затратами времени и сил.