Provided by: manpages-ru_0.98-4_all bug

ИМЯ

       getsockopt, setsockopt - получить или установить флаги на сокете

ОБЗОР

       #include <sys/types.h>
       #include <sys/socket.h>

       int  getsockopt(int  s, int level, int optname, void *optval, socklen_t
       *optlen);

       int setsockopt(int s, int  level,  int  optname,  const  void  *optval,
       socklen_t optlen);

ОПИСАНИЕ

       getsockopt и setsockopt манипулируют , установленными на сокете.
       Флаги могут существовать на нескольких уровнях протоколов;  они  всегда
       присутствуют на самом верхнем из них.

       При  манипулировании  флагами  сокета  должен  быть  указан уровень, на
       котором находится этот  флаг,  и  имя  этого  флага.   Для  манипуляции
       флагами   на   уровне   сокета  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)   и
       соответствующих протоколам страницах руководства.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       В  случае  успеха  возвращается  ноль.   При  ошибке возвращается -1, а
       значение errno устанавливается должным образом.

ОШИБКИ

       EBADF  Неверный файловый дескриптор s.

       ENOTSOCK
              Аргумент s -- это файл, а не сокет.

       ENOPROTOOPT
              Неизвестный на данном уровне флаг.

       EFAULT Адрес, на который  указывает  параметр  optval  не  находится  в
              разрешенной   части   адресного   пространства   процесса.   Для
              getsockopt, эта ошибка может также появиться, если optlen  также
              выходит за пределы адресного пространства процесса.

       EINVAL Неправильное значение optlen в setsockopt

СООТВЕТСТВИЕ СТАНДАРТАМ

       SVr4,  4.4BSD (эти системные вызовы впервые появились в  4.2BSD).  SVr4
       документирует  дополнительные  коды  ошибок  ENOMEM  и  ENOSR,  но   не
       документирует флаги SO_SNDLOWAT, SO_RCVLOWAT, SO_SNDTIMEO, SO_RCVTIMEO.

ЗАМЕЧАНИЕ

       Третий аргумент вызова bind  в  действительности  имеет  тип  int  (это
       именно  так  в BSD 4.*, libc4 и libc5).  При разработке стандарта POSIX
       случилось некоторое недопонимание, и появился тип  socklen_t.   Рабочая
       версия  стандарта ещё не содержит этого типа, но glibc2 уже следует ему
       и имеет тип socklen_t.  Смотри также accept(2).

ОШИБКИ В РЕАЛИЗАЦИИ

       Некоторые флаги сокетов должны обрабатываться на более  низких  уровнях
       системы.

СМОТРИ ТАКЖЕ

       ioctl(2), socket(2), getprotoent(3), protocols(5)

       socket(7), unix(7), tcp(7),

ПЕРЕВОД

       Copyright   (C)   Alexey   Mahotkin  <alexm@hsys.msk.ru>  1999,  Виктор
       Вислобоков <corochoone@perm.ru> 2003