Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ioctl(2)

socket(3N)

getprotoent(3N)



getsockopt(3N)          LIBRARY FUNCTIONS          getsockopt(3N)



NAME
     getsockopt, setsockopt - get and set options on sockets

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

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

     int setsockopt(s, level, optname, optval, optlen)
     int s, level, optname;
     char *optval;
     int optlen;

DESCRIPTION
     getsockopt() and setsockopt() manipulate options  associated
     with  a socket.  Options may exist at multiple protocol lev-
     els; 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 specified.
     To manipulate options at the socket level, level  is  speci-
     fied  as  SOL_SOCKET.   To  manipulate  options at any other
     level, level is the protocol number  of  the  protocol  that
     controls  the  option.   For  example,  to  indicate that an
     option is to be interpreted by the TCP  protocol,  level  is
     set to the TCP protocol number [see getprotoent(3N)].

     The parameters optval and optlen are used to  access  option
     values  for setsockopt().  For getsockopt(), they identify a
     buffer in which the value(s) 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, a 0 optval may be supplied.

     optname and any specified options are  passed  uninterpreted
     to  the appropriate protocol module for interpretation.  The
     include file /usr/include/sys/socket.h contains  definitions
     for  the  socket-level  options described below.  Options at
     other protocol levels vary in format and name.

     Most socket-level options take an int for optval.  For  set-
     sockopt(), the optval parameter should be non-zero to enable
     a boolean option, or zero if the option is to  be  disabled.
     SO_LINGER  uses a struct linger parameter that specifies the
     desired state of the option and  the  linger  interval  (see
     below).       struct      linger      is      defined     in



                                                                1





getsockopt(3N)          LIBRARY FUNCTIONS          getsockopt(3N)



     /usr/include/sys/socket.h.

     The following options are recognized at  the  socket  level.
     Except  as noted, each may be examined with getsockopt() and
     set with setsockopt().

          SO_DEBUG            toggle   recording   of   debugging
                              information
          SO_REUSEADDR        toggle local address reuse
          SO_KEEPALIVE        toggle keep connections alive
          SO_DONTROUTE        toggle routing bypass for  outgoing
                              messages
          SO_LINGER           linger on close if data is present
          SO_BROADCAST        toggle   permission   to   transmit
                              broadcast messages
          SO_OOBINLINE        toggle  reception  of   out-of-band
                              data in band
          SO_SNDBUF           set buffer size for output
          SO_RCVBUF           set buffer size for input
          SO_TYPE             get  the  type  of  the  socket(get
                              only)
          SO_ERROR            get  and   clear   error   on   the
                              socket(get only)

     SO_DEBUG  enables  debugging  in  the  underlying   protocol
     modules.   SO_REUSEADDR  indicates  that  the  rules used in
     validating addresses supplied  in  a  bind(3N)  call  should
     allow  reuse  of  local addresses.  SO_KEEPALIVE enables the
     periodic transmission of messages on a connected socket.  If
     the  connected party fails to respond to these messages, the
     connection is considered  broken  and  processes  using  the
     socket  are  notified  using a SIGPIPE signal.  SO_DONTROUTE
     indicates that outgoing messages should bypass the  standard
     routing  facilities.   Instead, messages are directed to the
     appropriate network interface according to the network  por-
     tion of the destination address.

     SO_LINGER controls the action taken when unsent messages are
     queued  on  a  socket  and  a close(2) is performed.  If the
     socket promises reliable delivery of data and  SO_LINGER  is
     set,  the  system  will  block  the  process  on the close()
     attempt until it is able to transmit the data  or  until  it
     decides  it  is unable to deliver the information (a timeout
     period, termed the linger interval, is specified in the set-
     sockopt()  call  when SO_LINGER is requested).  If SO_LINGER
     is disabled and a close() is issued, the system will process
     the  close() in a manner that allows the process to continue
     as quickly as possible.

     The option SO_BROADCAST requests permission to  send  broad-
     cast  datagrams  on the socket.  With protocols that support
     out-of-band data,  the  SO_OOBINLINE  option  requests  that



                                                                2





getsockopt(3N)          LIBRARY FUNCTIONS          getsockopt(3N)



     out-of-band data be placed in the normal data input queue as
     received; it will then be accessible with recv()  or  read()
     calls without the MSG_OOB flag.  SO_SNDBUF and SO_RCVBUF are
     options that adjust the normal buffer  sizes  allocated  for
     output and input buffers, respectively.  The buffer size may
     be increased for high-volume connections or may be decreased
     to  limit the possible backlog of incoming data.  The system
     places an absolute limit on these values.  Finally,  SO_TYPE
     and  SO_ERROR  are  options  used  only  with  getsockopt().
     SO_TYPE  returns  the  type  of  the  socket  (for  example,
     SOCK_STREAM).  It is useful for servers that inherit sockets
     on startup.  SO_ERROR  returns  any  pending  error  on  the
     socket and clears the error status.  It may be used to check
     for asynchronous errors on connected datagram sockets or for
     other asynchronous errors.

RETURN VALUE
     A 0 is returned if the call succeeds, -1 if it fails.

ERRORS
     The call succeeds unless:

     EBADF               The argument s is not a  valid  descrip-
                         tor.

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

     ENOPROTOOPT         The option is unknown at the level indi-
                         cated.

     ENOMEM              There  was  insufficient   user   memory
                         available for the operation to complete.

     ENOSR               There    were    insufficient    STREAMS
                         resources available for the operation to
                         complete.

SEE ALSO
     ioctl(2), socket(3N), getprotoent(3N).
















                                                                3



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026