UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
struct rt_msghdr { /* из <net/route.h> */ u_short rtm_msglen; /* для пропуска некорректных сообщений */ u_char rtm_version; /* для обеспечения двоичной совместимости в будущем */ u_char rtm_type; /* тип сообщения */ u_short rtm_index; /* индекс интерфейса, с которым связан адрес */ int rtm_flags; /* флаги */ int rtm_addrs; /* битовая маска, идентифицирующая sockaddr (структуру адреса сокета) в msg */ pid_t rtm_pid; /* идентификация отправителя */ int rtm_seq; /* для идентификации действия отправителем */ int rtm_errno; /* причина неудачного выполнения */ int rtm_use; /* из rtentry */ u_long rtm_inits; /* какую метрику мы инициализируем */ struct rt_metrics rtm_rmx; /* сами метрики */};struct if_msghdr { /* из <net/if.h> */ u_short ifm_msglen; /* для пропуска некорректных сообщений */ u_char ifm_version; /* для обеспечения двоичной совместимости в будущем */ u_char ifm_type; /* тип сообщения */ int ifm_addrs; /* как rtm_addrs */ int ifm_flags; /* значение if_flags */ u_short ifm_index; /* индекс интерфейса, с которым связан адрес */ struct if_data ifm_data; /* статистические и другие сведения */};struct ifa_msghdr { /* из <net/if.h> */ u_short ifam_msglen; /* для пропуска некорректных сообщений */ u_char ifam_version; /* для обеспечения двоичной совместимости в будущем */ u_char ifam_type; /* тип сообщения */ int ifam_addrs; /* как rtm_addrs */ int ifam_flags; /* значение ifa_flags */ u_short ifam_index; /* индекс интерфейса, с которым связан адрес */ int ifam_metric; /* значение ifa_metric */};struct ifma_msghdr { /* из <net/if.h> */ u_short ifmam_msglen; /* для пропуска некорректных сообщений */ u_char ifmam_version; /* для обеспечения двоичной совместимости в будущем */ u_char ifmam_type; /* тип сообщения */ int ifmam_addrs; /* аналог rtm_addrs */ int ifmam_flags; /* значение ifa_flags */ u_short ifmam_index; /* индекс связанного ifp */};struct if_announcemsghdr { /* из <net/if.h> */ u_short ifan_msglen; /* для пропуска некорректных сообщений */ u_char ifan_version; /* для обеспечения двоичной совместимости в будущем */ u_char ifan_type; /* тип сообщения */ u_short ifan_index; /* индекс связанного ifp */ char ifan_name[IFNAMSIZ]; /* название интерфейса, напр. "en0" */ u_short ifan_what; /* тип объявления */};Первые три элемента каждой структуры одни и те же: длина, версия и тип сообщения. Тип — это одна из констант из первого столбца табл. 18.1. Элемент длины
xxx_msglenЭлементы
rtm_addrsifm_addrsifam_addrs<net/route.h>Таблица 18.2. Константы, используемые для ссылки на структуры адреса сокета в маршрутизирующих сообщениях
| Битовая маска, константа | Битовая маска, значение | Индекс массива, константа | Индекс массива, значение | Структура адреса сокета содержит |
|---|---|---|---|---|
| RTA_DST | 0x01 | RTAX_DST | 0 | Адрес получателя |
| RTA_GATEWAY | 0x02 | RTAX_GATEWAY | 1 | Адрес шлюза |
| RTA_NETMASK | 0x04 | RTAX_NETMASK | 2 | Маска сети |
| RTA_GENMASK | 0x08 | RTAX_GENMASK | 3 | Маска клонирования |
| RTA_IFP | 0x10 | RTAX_IFP | 4 | Имя интерфейса |
| RTA_IFA | 0x20 | RTAX_IFA | 5 | Адрес интерфейса |
| RTA_AUTHOR | 0x40 | RTAX_AUTHOR | 6 | Отправитель запроса на перенаправление |
| RTA_BRD | 0x80 | RTAX_BRD | 7 | Адрес получателя типа «точка-точка» или широковещательный |
| RTAX_MAX | 8 | Максимальное количество элементов |
