getsockopt, setsockopt -
получить
или
установить
флаги
сокета
Standard C library (
libc,
-lc)
#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname,
void optval[restrict *.optlen],
socklen_t *restrict optlen);
int setsockopt(int sockfd, int level, int optname,
const void optval[.optlen],
socklen_t optlen);
getsockopt() и
setsockopt()
управляют
параметрами
сокета, на
который
указывает
файловый
дескриптор
sockfd.
Параметры
могут быть
из
различных
уровней
протоколов;
они всегда
присутствуют
на самом
верхнем
уровне
сокета.
При работе
с
параметрами
сокета
должен
быть
указан
уровень, на
котором
находится
этот
параметр и
его имя. Для
работы с
параметрами
на уровне API
сокета в
level
указывается
значение
SOL_SOCKET. Для
работы с
параметрами
на любом
другом
уровне,
этим
вызовам
передаётся
номер
соответствующего
протокола,
который
они
контролируют.
Например,
для
указания,
что
параметр
должен
интерпретироваться
протоколом
TCP, в
level нужно
указать
номер
протокола
TCP; смотрите
getprotoent(3).
Аргументы
optval и
optlen
используются
в
setsockopt() для
доступа к
значениям
параметров.
Для
getsockopt() они
задают
буфер, в
который
нужно
поместить
запрошенное
значение
параметра
при
возврате. У
getsockopt() в
аргументе
optlen
изначально
содержится
размер
буфера, на
который
указывает
optval, а при
завершении
в нём
содержится
реальный
размер
возвращаемого
значения.
Если
значение
параметра
не
указывается
или
возвращается,
то
optval может
быть NULL.
Аргумент
optname
и все
указанные
параметры
без
изменений
передаются
для
интерпретации
соответствующему
модулю
протоколов.
Файл
<sys/socket.h>
содержит
определения
параметров
уровня
сокета; их
описание
дано ниже.
Параметры
на других
уровнях
протоколов
различаются
по формату
и по имени.
Обращайтесь
к
соответствующим
файлам
раздела 4
справочных
страниц.
Большинство
параметров
уровня
сокета
используют
тип
int для
аргумента
optval. Чтобы
установить
параметр
логического
типа
аргумент
setsockopt() должен
быть
ненулевым,
и ноль, если
нужно
отключить
этот
параметр.
Описание
доступных
параметров
сокетов
находится
в
socket(7) и
соответствующих
протоколам
справочных
страницах.
On success, zero is returned for the standard options. On error, -1 is returned,
and
errno is set to indicate the error.
Netfilter
позволяет
программисту
определять
собственные
параметры
сокетов со
привязанными
обработчиками;
для таких
параметров
при
успешном
выполнении
возвращается
значение,
полученное
от
обработчика.
- EBADF
- Аргумент
sockfd не
является
допустимым
файловым
дескриптором.
- EFAULT
- Адрес, на
который
указывает
optval, не
находится
в
разрешённой
части
адресного
пространства
процесса.
Для getsockopt() эта
ошибка
может
также
появиться,
если optlen
выходит за
пределы
адресного
пространства
процесса.
- EINVAL
- Неправильное
значение
optlen в setsockopt(). В
некоторых
случаях
эта ошибка
может
возникать
из-за
неправильного
значения в
optval
(например,
для
параметра
IP_ADD_MEMBERSHIP,
описанного
в ip(7)).
- ENOPROTOOPT
- Неизвестный
параметр
для
указанного
уровня.
- ENOTSOCK
- Файловый
дескриптор
sockfd
указывает
не на
каталог.
POSIX.1-2001, POSIX.1-2008, SVr4, 4.4BSD
(данные
системные
вызовы
впервые
появились
в 4.2BSD).
Описание
типа
socklen_t
смотрите в
accept(2).
Некоторые
параметры
сокетов
должны
обрабатываться
на более
низких
уровнях
системы.
ioctl(2),
socket(2),
getprotoent(3),
protocols(5),
ip(7),
packet(7),
socket(7),
tcp(7),
udp(7),
unix(7)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Vladislav <
[email protected]>,
Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]