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] Все исходные коды программ, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com.
содержатся объявления нашей программы.
Листинг 7.1. Объявления для нашей программы, проверяющей параметры сокетов
//sockopt/checkopts.с
1 #include "unp.h"
2 #include /* определения констант 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 },
39 { "SO_USELOOPBACK", SOL_SOCKET, SO_USELOOPBACK, sock_str_flag },
Читать дальше
Конец ознакомительного отрывка
Купить книгу