Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

В последующих разделах этой главы приводятся дополнительные подробности о параметрах сокетов.

7.3. Проверка наличия параметра и получение значения по умолчанию

Напишем программу, которая проверяет, поддерживается ли большинство параметров, представленных в табл. 7.1 и 7.2, и если да, то выводит их значения, заданные по умолчанию. В листинге 7.1 [1] содержатся объявления нашей программы.

Листинг 7.1. Объявления для нашей программы, проверяющей параметры сокетов

1

Все исходные коды программ, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com.

//sockopt/checkopts.с

1 #include "unp.h"

2 #include <netinet/tcp.h> /* определения констант TCP_xxx */

3 union val {

4 int i_val;

5 long l_val;

6 struct linger linger_val;

7 struct timeval timeval_val;

8 } val;

9 static char *sock_str_flag(union val*, int);

10 static char *sock_str_int(union val*, int);

11 static char *sock_str_linger(union val*, int);

12 static char *sock_str_timeval(union val*, int);

13 struct sock_opts {

14 const char *opt_str;

15 int opt_level;

16 int opt_name;

17 char *(*opt_val_str)(union val*, int);

18 } sock_opts[] = {

19 { "SO_BROADCAST", SOL_SOCKET, SO_BROADCAST, sock_str_flag },

20 { "SO_DEBUG", SOL_SOCKET, SO_DEBUG, sock_str_flag },

21 { "SO_DONTROUTE", SOL_SOCKET, SO_DONTROUTE, sock_str_flag },

22 { "SO_ERROR", SOL_SOCKET, SO_ERROR, sock_str_int },

23 { "SO_KEEPALIVE", SOL_SOCKET, SO_KEEPALIVE, sock_str_flag },

24 { "SO_LINGER", SOL_SOCKET, SO_LINGER, sock_str_linger },

25 { "SO_OOBINLINE", SOL_SOCKET, SO_OOBINLINE, sock_str_flag },

26 { "SO_RCVBUF", SOL_SOCKET, SO_RCVBUF, sock_str_int },

27 { "SO_SNDBUF", SOL_SOCKET, SO_SNDBUF, sock_str_int },

28 { "SO_RCVLOWAT", SOL_SOCKET, SO_RCVLOWAT, sock_str_int },

29 { "SO_SNDLOWAT", SOL_SOCKET, SO_SNDLOWAT, sock_str_int },

30 { "SO_RCVTIMEO", SOL_SOCKET, SO_RCVTIMEO, sock_str_timeval },

31 { "SO_SNDTIMEO", SOL_SOCKET, SO_SNDTIMEO, sock_str_timeval },

32 { "SO_REUSEADDR", SOL_SOCKET, SO_REUSEADDR, sock_str_flag },

33 #ifdef SO_REUSEPORT

34 { "SO_REUSEPORT", SOL_SOCKET, SO_REUSEPORT, sock_str_flag },

35 #else

36 { "SO_REUSEPORT", 0, 0, NULL },

37 #endif

38 { "SO_TYPE", SOL_SOCKET, SO_TYPE, sock_str_int },

  • Читать дальше
  • 1
  • ...
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: