7.2 getsockopt and setsockopt Functions


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, “1 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 .

Figure 7.1. Summary of socket and IP-layer socket options for getsockopt and setsockopt .

graphics/07fig01.gif

Figure 7.2. Summary of transport-layer socket options.

graphics/07fig02.gif

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.



UNIX Network Programming Volume 1, Third Edition
Unix Network Programming, Volume 1: The Sockets Networking API (3rd Edition)
ISBN: 0131411551
EAN: 2147483647
Year: 2003
Pages: 441

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net