7.2 getsockopt and
setsockopt Functions
These two functions apply only to sockets.
#include <sys/socket.h>
|
int getsockopt(int
sockfd, int level, int optname, void *optval, socklen_t *optlen);
|
int setsockopt(int
sockfd, int level, int optname, const void *optval socklen_t optlen);
|
Both return: 0 if OK,鈥? on error
|
sockfd must
refer to an open socket descriptor. level specifies the code in the system that
interprets the option: the general socket code or some
protocol-specific code (e.g., IPv4, IPv6, TCP, or SCTP).
optval is a
pointer to a variable from which the new value of the option is
fetched by setsockopt, or into which the current value of
the option is stored by getsockopt. The size of this
variable is specified by the final argument, as a value for
setsockopt and as a value-result for
getsockopt.
Figures
7.1 and 7.2 summarize
the options that can be queried by getsockopt or set by
setsockopt. The "Datatype" column shows the datatype of
what the optval pointer must point
to for each option. We use the notation of two braces to indicate a
structure, as in linger{} to mean a struct
linger.
There are two basic types of options: binary
options that enable or disable a certain feature (flags), and
options that fetch and return specific values that we can either
set or examine (values). The column labeled "Flag" specifies if the
option is a flag option. When calling getsockopt for these
flag options, *optval is
an integer. The value returned in *optval is zero if the option is disabled, or
nonzero if the option is enabled. Similarly, setsockopt
requires a nonzero *optval to turn the option on, and a zero value
to turn the option off. If the "Flag" column does not contain a
"鈥?" then the option is used to pass a value of the specified
datatype between the user process and the system.
Subsequent sections of this chapter will give
additional details on the options that affect a socket.
|