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

Пример: определяем, включены ли контрольные суммы UDP

Пример: определяем, включены ли контрольные суммы UDP

Теперь мы приведем простой пример использования функции sysctl с протоколами Интернета для проверки, включены ли контрольные суммы UDP. Некоторые приложения UDP (например, BIND) проверяют при запуске, включены ли контрольные суммы UDP, и если нет, пытаются включить их. Для того чтобы включить подобное свойство, требуются права привилегированного пользователя, но мы сейчас просто проверим, включено это свойство или нет. В листинге 18.7 представлена наша программа.

Листинг 18.7. Проверка включения контрольных сумм

//route/checkudpsum.c
 1 #include "unproute.h"
 2 #include <netinet/udp.h>
 3 #include <netinet/ip_var.h>
 4 #include <netinet/udp_var.h> /* для констант UDPCTL_xxx */
 5 int
 6 main(int argc, char **argv)
 7 {
 8  int mib[4], val;
 9  size_t len;
10  mib[0] = CTL_NET;
11  mib[1] = AF_INET;
12  mib[2] = IPPROTO_UDP;
13  mib[3] = UDPCTL_CHECKSUM;
14  len = sizeof(val);
15  Sysctl(mib, 4, &val, &len, NULL, 0);
16  printf("udp checksum flag: %dn", val);
17  exit(0);
18 }

Включение системных заголовков

2-4 Следует включить заголовочный файл <netinet/udp_var.h>, чтобы получить определение констант UDP функции sysctl. Для него требуются два других заголовка.

Вызов функции sysctl

10-16 Мы размещаем в памяти массив целых чисел с четырьмя элементами и храним константы, соответствующие иерархии, показанной на рис. 18.3. Поскольку мы только получаем переменную и не присваиваем ей значение, аргумент newp функции sysctl мы задаем как пустой указатель, и поэтому аргумент newp этой функции имеет нулевое значение, oldp указывает на нашу целочисленную переменную, в которую сохраняется результат, a oldenp указывает на переменную типа «значение- результат», хранящую размер этого целого числа. Мы выводим либо 0 (отключено), либо 1 (включено).

Оглавление книги


Генерация: 1.213. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз