Уильям Стивенс - UNIX: разработка сетевых приложений
- Название:UNIX: разработка сетевых приложений
- Автор:
- Жанр:
- Издательство:Питер
- Год:2007
- Город:Санкт-Петербург
- ISBN:5-94723-991-4
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Уильям Стивенс - UNIX: разработка сетевых приложений краткое содержание
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
UNIX: разработка сетевых приложений - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Глава 7
Параметры сокетов
7.1. Введение
Существуют различные способы получения и установки параметров сокетов:
■ функции getsockopt
и setsockopt
;
■ функция fcntl
;
■ функция ioctl
.
Эту главу мы начнем с описания функций getsockopt
и setsockopt
. Далее мы приведем пример, в котором выводятся заданные по умолчанию значения параметров, а затем дадим подробное описание всех параметров сокетов. Мы разделили описание параметров на следующие категории: общие, IPv4, IPv6, TCP и SCTP. При первом прочтении главы можно пропустить подробное описание параметров и при необходимости прочесть отдельные разделы, на которые даны ссылки. Отдельные параметры подробно описываются в дальнейших главах, например параметры многоадресной передачи IPv4 и IPv6 мы обсуждаем в разделе 19.5.
Мы также рассмотрим функцию fcntl
, поскольку она реализует предусмотренные стандартом POSIX возможности отключить для сокета блокировку ввода-вывода, включить управление сигналами, а также установить владельца сокета. Функцию ioctl
мы опишем в главе 17.
7.2. Функции getsockopt и setsockopt
Эти две функции применяются только к сокетам.
#include
int getsockopt(int sockfd , int level , int optname , void * optval , socklen_t * optlen );
int setsockopt(int sockfd , int level , int optname , const void * optval , socklen_t optlen );
Обе функции возвращают 0 в случае успешного завершения, -1 в случае ошибки
Переменная sockfd
должна ссылаться на открытый дескриптор сокета. Переменная level
определяет, каким кодом должен интерпретироваться параметр: общими программами обработки сокетов или зависящими от протокола программами (например, IPv4, IPv6, TCP или SCTP).
optval
— это указатель на переменную, из которой извлекается новое значение параметра с помощью функции setsockopt
или в которой сохраняется текущее значение параметра с помощью функции getsockopt
. Размер этой переменной задается последним аргументом. Для функции setsockopt
тип этого аргумента — значение , а для функции getsockopt
— « значение-результат ».
В табл. 7.1 и 7.2 сведены параметры, которые могут запрашиваться функцией getsockopt
или устанавливаться функцией setsockopt
. В колонке «Тип данных» приводится тип данных того, на что указывает указатель optval
для каждого параметра. Две фигурные скобки мы используем, чтобы обозначить структуру, например linger{}
обозначает struct linger
.
Таблица 7.1. Параметры сокетов для функций getsockopt и setsockopt
level | optname | get | set | Описание | Флаг | Тип данных |
---|---|---|---|---|---|---|
SOL_SOCKET | SO_BROADCAST | • | • | Позволяет посылать широковещательные дейтаграммы | • | int |
SO_DEBUG | • | • | Разрешает отладку | • | int | |
SO_DONTROUTE | • | • | Обходит таблицу маршрутизации | • | int | |
SO_ERROR | • | Получает ошибку, ожидающую обработки, и возвращает значение параметра в исходное состояние | int | |||
SO_KEEPALIVE | • | • | Периодически проверяет, находится ли соединение в рабочем состоянии | • | int | |
SO_LINGER | • | • | Задерживает закрытие сокета, если имеются данные для отправки | linger{} | ||
SO_OOBINLINE | • | • | Оставляет полученные внеполосные данные вместе с обычными данными (inline) | • | int | |
SO_RCVBUF | • | • | Размер приемного буфера | int | ||
SO_SNDBUF | • | • | Размер буфера отправки | int | ||
SO_RCVLOWAT | • | • | Минимальное количество данных для приемного буфера сокета | int | ||
SO_SNDLOWAT | • | • | Минимальное количество данных для буфера отправки сокета | int | ||
SO_RCVTIMEO | • | • | Тайм-аут при получении | timeval{} | ||
SO_SNDTIMEO | • | • | Тайм-аут при отправке | timeval{} | ||
SO_REUSEADDR | • | • | Допускает повторное использование локального адреса | • | int | |
SO_REUSEPORT | • | • | Допускает повторное использование локального адреса | • | int | |
SO_TYPE | • | Возвращает тип сокета | int | |||
SO_USELOOPBACK | • | • | Маршрутизирующий сокет получает копию того, что он отправляет | • | int | |
IPPROTO_IP | IP_HDRINCL | • | • | Включается IP- заголовок | • | int |
IP_OPTIONS | • | • | В заголовке IPv4 устанавливаются параметры IP | см. текст | ||
IP_RECVDSTADDR | • | • | Возвращает IP-адрес получателя | • | int | |
IP_RECVIF | • | • | Возвращает индекс интерфейса, на котором принимается дейтаграмма UDP | • | int | |
IP_TOS | • | • | Тип сервиса и приоритет | int | ||
IP_TTL | • | • | Время жизни | int | ||
IP_MULTICAST_IF | • | • | Задает интерфейс для исходящих дейтаграмм | in_addr{} | ||
IP_MULTICAST_TTL | • | • | Задает TTL для исходящих дейтаграмм | u_char | ||
IP_MULTICAST_LOOP | • | • | Разрешает или отменяет отправку копии дейтаграммы на тот узел, откуда она была послана (loopback) | u_char | ||
IP_ADD_MEMBERSHIP | • | Включение в группу многоадресной передачи | ip_mreq{} | |||
IP_DROP_MEMBERSHIP | • | Отключение от группы многоадресной передачи | ip_mreq{} | |||
IP_{BLOCK, UNBLOCK}_SOURCE | • | Блокирование и разблокирование источника многоадресной передачи | ip_mreq_source{} | |||
IP_{ADD, DROP}_SOURCE_MEMBERSHIP | • | Присоединение или отключение от многоадресной передачи от источника (source-specific) | ip_mreq_source{} | |||
IPPROTO_ICMPV6 | ICMP6_FILTER | • | • | Указывает тип сообщения ICMPv6, которое передается процессу | icmp6_filter{} | |
IPPROTO_IPV6 | IPV6_ADDRFORM | • | • | Меняет формат адреса сокета | int | |
IPV6_CHECKSUM | • | • | Отступ поля контрольной суммы для символьных (неструктурированных) сокетов | int | ||
IPV6_DONTFRAG | • | • | Не фрагментировать, а сбрасывать большие пакеты | • | int | |
IPV6_NEXTHOP | • | • | Задает следующий транзитный адрес | • | sockaddr{} | |
IPV6_PATHMTU | • | Получение текущей маршрутной МТУ | ip6_mtuinfo{} | |||
IPV6_RECVDSTOPTS | • | • | Получение параметров адресата | • | int | |
IPV6_RECVHOPLIMIT | • | • | Получение ограничения на количество транзитных узлов при направленной передаче | • | int | |
IPV6_RECVHOPOPTS | • | • | Получение параметров прыжков | • | int | |
IPV6_RECVPATHMTU | • | • | Получение маршрутной MTU | • | int | |
IPV6_RECVPKTINFO | • | • | Получение информации о пакетах | • | int | |
IPV6_RECVRTHDR | • | • | Получение маршрута от источника | • | int | |
IPV6_RECVTCLASS | • | • | Получение класса трафика | • | int | |
IPV6_UNICAST_HOPS | • | • | Предел количества транзитных узлов, задаваемый по умолчанию | int | ||
IPV6_USE_MIN_MTU | • | • | Использовать минимальную MTU | • | int | |
IPV6_V60NLY | • | • | Отключить совместимость с IPv4 | • | int | |
IPV6_XXX | • | • | Вспомогательные данные | см. текст | ||
IPV6_MULTICAST_IF | • | • | Задает интерфейс для исходящих дейтаграмм | u_int | ||
IPV6_MULTICAST_HOPS | • | • | Задает предельное количество транзитных узлов для исходящих широковещательных сообщений | int | ||
IPV6_MULTICAST_LOOP | • | • | Разрешает или отменяет отправку копии дейтаграммы на тот узел, откуда она была послана (loopback) | • | u_int | |
IPV6_LEAVE_GROUP | • | Выход из группы многоадресной передачи | ipv6_mreq{} | |||
IPPROTO_IP или IPPROTO_IPV6 | MCAST_JOIN_GROUP | • | Присоединение к группе многоадресной передачи | group_req{} | ||
MCAST_LEAVE_GROUP | • | Выход из группы многоадресной передачи | group_source_req{} | |||
MCAST_BLOCK_SOURCE | • | Блокирование источника многоадресной передачи | group_source_req{} | |||
MCAST_UNBLOCK_SOURCE | • | Разблокирование источника многоадресной передачи | group_source_req{} | |||
MCAST_JOIN_SOURCE_GROUP | • | Присоединение к группе многоадресной передачи от источника | group_source_req{} | |||
MCAST_LEAVE_SOURCE_GROUP | • | Выход из группы многоадресной передачи от источника | group_source_req{} |
Таблица 7.2. Параметры сокетов транспортного уровня
Читать дальшеИнтервал:
Закладка: