getsockopt, setsockopt - get and set options on sockets


SYNOPSIS

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


       int  getsockopt(int  s, int level, int optname, void *opt­
       val, socklen_t *optlen);

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


DESCRIPTION

       Getsockopt  and  setsockopt manipulate the options associ­
       ated with a socket.  Options may exist at multiple  proto­
       col  levels;  they  are  always  present  at the uppermost
       socket level.

       When manipulating socket options the level  at  which  the
       option  resides  and the name of the option must be speci­
       fied.  To manipulate options at the socket level, level is
       specified  as  SOL_SOCKET.   To  manipulate options at any
       other level the protocol number of the appropriate  proto­
       col  controlling  the option is supplied.  For example, to
       indicate that an option is to be interpreted  by  the  TCP
       protocol,  level  should  be set to the protocol number of
       TCP; see getprotoent(3).

       The parameters optval and optlen are used to access option
       values  for  setsockopt.   For  getsockopt they identify a
       buffer in which the value for the requested option(s)  are
       to  be returned.  For getsockopt, optlen is a value-result
       parameter, initially containing the  size  of  the  buffer
       pointed  to  by optval, and modified on return to indicate
       the actual size of the value returned.  If no option value
       is to be supplied or returned, optval may be NULL.

       Optname and any specified options are passed uninterpreted
       to the appropriate  protocol  module  for  interpretation.
       The  include  file <sys/socket.h> contains definitions for
       socket level options, described below.  Options  at  other
       protocol  levels  vary  in  format  and  name; consult the
       appropriate entries in section 4 of the manual.

       Most socket-level options utilize  an  int  parameter  for
       optval.   For setsockopt, the parameter should be non-zero
       to enable a boolean option, or zero if the option is to be
       disabled.


       For  a  description  of  the  available socket options see
       On success, zero is returned.  On error, -1  is  returned,
       and errno is set appropriately.


ERRORS

       EBADF  The argument s is not a valid descriptor.

       ENOTSOCK
              The argument s is a file, not a socket.

       ENOPROTOOPT
              The option is unknown at the level indicated.

       EFAULT The  address pointed to by optval is not in a valid
              part of the process address space.  For getsockopt,
              this error may also be returned if optlen is not in
              a valid part of the process address space.


CONFORMING TO

       SVr4,  4.4BSD  (these  system  calls  first  appeared   in
       4.2BSD).  SVr4 documents additional ENOMEM and ENOSR error
       codes, but does not document the SO_SNDLOWAT, SO_RCVLOWAT,
       SO_SNDTIMEO, SO_RCVTIMEO options


NOTE

       The  fifth  argument  of  getsockopt  and setsockopt is in
       reality an int [*] (and this is what BSD 4.* and libc4 and
       libc5 have).  Some POSIX confusion resulted in the present
       socklen_t.  The draft standard has not been  adopted  yet,
       but  glibc2 already follows it and also has socklen_t [*].
       See also accept(2).


BUGS

       Several of the socket options should be handled  at  lower
       levels of the system.


SEE ALSO

       ioctl(2),    socket(2),    getprotoent(3),   protocols(5),
       socket(7), unix(7), tcp(7)