Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       setsockopt - set the socket options

SYNOPSIS

       #include <sys/socket.h>

       int setsockopt(int socket, int level, int option_name,
              const void *option_value, socklen_t option_len);

DESCRIPTION

       The  setsockopt()  function shall set the option specified by the option_name argument, at
       the protocol level specified by the level  argument,  to  the  value  pointed  to  by  the
       option_value  argument for the socket associated with the file descriptor specified by the
       socket argument.

       The level argument specifies the protocol level  at  which  the  option  resides.  To  set
       options  at  the socket level, specify the level argument as SOL_SOCKET. To set options at
       other levels, supply the appropriate level identifier for  the  protocol  controlling  the
       option.  For  example,  to  indicate  that  an option is interpreted by the TCP (Transport
       Control Protocol), set level to IPPROTO_TCP as defined in the <netinet/in.h> header.

       The option_name argument specifies a single option to set. The  option_name  argument  and
       any  specified  options  are  passed  uninterpreted to the appropriate protocol module for
       interpretations.  The <sys/socket.h> header defines the socket-level options.  The options
       are as follows:

       SO_DEBUG
              Turns  on  recording  of  debugging  information.  This  option enables or disables
              debugging in the underlying protocol modules. This option takes an int value.  This
              is a Boolean option.

       SO_BROADCAST
              Permits  sending  of broadcast messages, if this is supported by the protocol. This
              option takes an int value. This is a Boolean option.

       SO_REUSEADDR
              Specifies that the rules used in validating addresses  supplied  to  bind()  should
              allow  reuse of local addresses, if this is supported by the protocol.  This option
              takes an int value. This is a Boolean option.

       SO_KEEPALIVE
              Keeps connections active by enabling the periodic transmission of messages, if this
              is supported by the protocol. This option takes an int value.

       If  the  connected socket fails to respond to these messages, the connection is broken and
       threads writing to that socket are notified with a  SIGPIPE  signal.  This  is  a  Boolean
       option.

       SO_LINGER
              Lingers on a close() if data is present. This option controls the action taken when
              unsent messages queue on a socket and close() is performed.  If SO_LINGER  is  set,
              the system shall block the process during close() until it can transmit the data or
              until the time expires. If SO_LINGER is not specified, and close() is  issued,  the
              system  handles the call in a way that allows the process to continue as quickly as
              possible. This option takes a linger structure, as defined  in  the  <sys/socket.h>
              header, to specify the state of the option and linger interval.

       SO_OOBINLINE
              Leaves  received out-of-band data (data marked urgent) inline. This option takes an
              int value. This is a Boolean option.

       SO_SNDBUF
              Sets send buffer size. This option takes an int value.

       SO_RCVBUF
              Sets receive buffer size. This option takes an int value.

       SO_DONTROUTE
              Requests that outgoing  messages  bypass  the  standard  routing  facilities.   The
              destination  shall be on a directly-connected network, and messages are directed to
              the appropriate network interface according to the destination address. The effect,
              if any, of this option depends on what protocol is in use. This option takes an int
              value. This is a Boolean option.

       SO_RCVLOWAT
              Sets the minimum number of bytes to  process  for  socket  input  operations.   The
              default  value  for  SO_RCVLOWAT  is  1.  If  SO_RCVLOWAT is set to a larger value,
              blocking receive calls normally wait until they have received the  smaller  of  the
              low  water  mark  value or the requested amount. (They may return less than the low
              water mark if an error occurs, a signal is caught, or the type of data next in  the
              receive queue is different from that returned; for example, out-of-band data.) This
              option takes an int value.  Note that not all implementations allow this option  to
              be set.

       SO_RCVTIMEO
              Sets  the timeout value that specifies the maximum amount of time an input function
              waits until it completes. It accepts a timeval structure with the number of seconds
              and microseconds specifying the limit on how long to wait for an input operation to
              complete. If a receive operation has blocked for this much time  without  receiving
              additional  data,  it shall return with a partial count or errno set to [EAGAIN] or
              [EWOULDBLOCK] if no data is received. The default for this option  is  zero,  which
              indicates  that a receive operation shall not time out. This option takes a timeval
              structure. Note that not all implementations allow this option to be set.

       SO_SNDLOWAT
              Sets the minimum number of bytes to process for  socket  output  operations.   Non-
              blocking output operations shall process no data if flow control does not allow the
              smaller of the send low water mark value or the entire  request  to  be  processed.
              This option takes an int value. Note that not all implementations allow this option
              to be set.

       SO_SNDTIMEO
              Sets the timeout value specifying the amount of time that an output function blocks
              because flow control prevents data from being sent. If a send operation has blocked
              for this time, it shall return with a partial count or with errno set  to  [EAGAIN]
              or  [EWOULDBLOCK]  if  no  data is sent. The default for this option is zero, which
              indicates that a send operation shall not time out. This option  stores  a  timeval
              structure. Note that not all implementations allow this option to be set.

       For  Boolean  options,  0  indicates  that the option is disabled and 1 indicates that the
       option is enabled.

       Options at other protocol levels vary in format and name.

RETURN VALUE

       Upon successful completion, setsockopt() shall return 0. Otherwise, -1 shall  be  returned
       and errno set to indicate the error.

ERRORS

       The setsockopt() function shall fail if:

       EBADF  The socket argument is not a valid file descriptor.

       EDOM   The  send  and receive timeout values are too big to fit into the timeout fields in
              the socket structure.

       EINVAL The specified option is invalid at the specified socket level  or  the  socket  has
              been shut down.

       EISCONN
              The  socket  is  already  connected, and a specified option cannot be set while the
              socket is connected.

       ENOPROTOOPT

              The option is not supported by the protocol.

       ENOTSOCK
              The socket argument does not refer to a socket.

       The setsockopt() function may fail if:

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

       ENOBUFS
              Insufficient resources are available in the system to complete the call.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       The setsockopt() function provides an application program with the means to control socket
       behavior.  An  application  program can use setsockopt() to allocate buffer space, control
       timeouts, or permit socket data broadcasts. The <sys/socket.h> header defines the  socket-
       level options available to setsockopt().

       Options  may  exist at multiple protocol levels. The SO_ options are always present at the
       uppermost socket level.

RATIONALE

       None.

FUTURE DIRECTIONS

       None.

SEE ALSO

       Sockets , bind() , endprotoent() , getsockopt() , socket() , the Base  Definitions  volume
       of IEEE Std 1003.1-2001, <netinet/in.h>, <sys/socket.h>

COPYRIGHT

       Portions  of  this  text  are  reprinted  and  reproduced in electronic form from IEEE Std
       1003.1, 2003 Edition, Standard for Information Technology  --  Portable  Operating  System
       Interface  (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by
       the Institute of Electrical and Electronics Engineers, Inc and  The  Open  Group.  In  the
       event  of  any  discrepancy  between this version and the original IEEE and The Open Group
       Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .