Чтение онлайн

ЖАНРЫ

UNIX: разработка сетевых приложений
Шрифт:
MCAST_LEAVE_SOURCE_GROUP • Выход из группы многоадресной передачи от источника group_source_req{}

Таблица 7.2. Параметры сокетов транспортного уровня

Level optname get set Описание Флаг Тип данных
IPPROTO_TCP TCP_MAXSEG Максимальный размер сегмента TCP int
TCP_NODELAY Отключает
алгоритм Нагла
int
IPPROTO_SCTP SCTP_ADAPTION_LAYER Указание на уровень адаптации sctp_setadaption
SCTP_ASSOCINFO + Получение и задание сведений об ассоциации sctp_assocparamms{}
SCTP_AUTOCLOSE Автоматическое закрытие int
SCTP_DEFAULT_SEND_PARAM Параметры отправки но умолчанию sctp_sndrcvinfo{}
SCTP_DISABLE_FRAGMENTS Фрагментация SCTP int
SCTP_EVENTS Уведомление об интересующих событиях sctp_event_subscribe{}
SCTP_GET_PEER_ADDR_INFO + Получение состояния адреса собеседника sctp_paddrinfo{}
SCTP_I_WANT_MAPPED_V4_ADDR Отображение адресов IPv4 int
SCTP_INITMSG Параметры пакета INIT по умолчанию sctp_initmsg{}
SCTP_MAXBURST Максимальный размер набора пакетов int
SCTP_MAXSEG Максимальный размер фрагментации int
SCTP_NODELAY Отключение алгоритма Нагла int
SCTP_PEER_ADDR_PARAMS + Параметры адреса собеседника sctp_paddrparams{)
SCTP_PRIMARY_ADDR + Основной адрес назначения sctp_setprim{}
SCTP_RTOINFO + Информация RTO sctp_rtoinfo{}
SCTP_SET_PEER_PRIMARY_ADDR Основной
адрес назначения собеседника
sctp_setpeerprim{}
SCTP_STATUS + Получение сведений о статусе ассоциации sctp_status{}

Существует два основных типа параметров: двоичные параметры, включающие или отключающие определенное свойство (флаги), и параметры, получающие и возвращающие значения параметров, которые мы можем либо задавать, либо проверять. В колонке «Флаг» указывается, относится ли параметр к флагам. Для флагов при вызове функции

getsockopt
аргумент
*optval
является целым числом. Возвращаемое значение
*optval
нулевое, если параметр отключен, и ненулевое, если параметр включен. Аналогично, функция
setsockopt
требует ненулевого значения
*optval
для включения параметра, и нулевого значения — для его выключения. Если в колонке «Флаг» не содержится символа «•», то параметр используется для передачи значения заданного типа между пользовательским процессом и системой.

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

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 },

Поделиться с друзьями: