Chapter Contents |
Previous |
Next |
getsockopt |
Portability: | UNIX compatible |
SYNOPSIS | |
DESCRIPTION | |
RETURN VALUE | |
PORTABILITY | |
EXAMPLE | |
RELATED FUNCTIONS |
SYNOPSIS |
#include <sys/types.h> #include <sys/socket.h> int getsockopt(int s, int level, int optname, void *optval, int *optlen);
DESCRIPTION |
getsockopt
returns the value of an option associated with socket
s
. The
level
argument is the level of the option. The
optname
argument is the name
of the option. The
optval
argument is a pointer to the buffer that receives the value of the requested
option. As an input parameter, the integer pointed to by
optlen
should be set to the size of the
optval
buffer. On output, the
integer pointed to by
optlen
is set to the size of the returned value. For cases in which
optval
points to an integer, a stored value of
0
indicates that the option is
off. A nonzero returned value indicates that the option is on.
Most options are at the socket level. Pass
SOL_SOCKET
as the
level
parameter for these
options:
SO_ERROR
errno
value (the
SO_ERROR
field on a UNIX operating system) for each socket. The
SO_ERROR
option obtains and then clears this
field, which is useful when checking for errors that occur between socket
calls. In this case,
optval
should point to an integer.
SO_LINGER
linger
option. The
linger
option controls the behavior of the call to
close
when some data have not yet been sent.
optval
should point to
a
struct linger
. If the
value of the
l_onoff
field
is
0
,
close
returns immediately. In this case, TCP/IP
continues to attempt to deliver the data, but the program is not informed
if delivery fails. If the value of the
l_onoff
field is nonzero, the behavior of the
close
call depends on the value of the
l_linger
field. If this value
is
0
, unsent data are discarded
at the time of the
close
.
If the value of
l_linger
is not
0
, the
close
call blocks the caller until there is a
timeout or until all data are sent. The
l_linger
field indicates the length of the desired timeout period.
Some TCP/IP implementations may ignore the value of the
l_linger
field.
s
must be a stream socket.
SO_OOBINLINE
MSG_OOB
flag in
recv
calls.
optval
should point to an integer.
s
must be a stream socket. Refer
to "Out-of-Band Data" in Chapter 6, "Berkeley Sockets," in UNIX Network
Programming for information on out-of-band data.
SO_REUSEADDR
optval
should point to an integer.
s
must be a stream
socket.
SO_TYPE
SOCKET_STREAM
,
SOCK_RAW
, or
SOCK_DGRAM
. The
optval
pointer
should point to an integer.
The option level
IPPROTO_TCP
is available for one option. The
TCP_NODELAY
option indicates that TCP's normal
socket buffering should not be used on the socket. The
TCP_NODELAY
option is not operative; it is supported
for source code compatibility. The
<netinet/in.h>
and
<netinet/tcp.h>
headers files are required for this option.
RETURN VALUE |
If
getsockopt
succeeds, it returns a
0
. Otherwise, it returns a
-1
and sets
errno
to indicate the type of error.
PORTABILITY |
getsockopt
is portable to other environments, including most UNIX systems,
that implement BSD sockets. The supported options may vary depending on the
system, and the options described previously may be supported differently.
Additional options may be supported by a specific TCP/IP software product.
Refer to your software documentation for details.
EXAMPLE |
In this example
getsockopt
gets the type of socket.
#include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> main() { int optlen, gs, socktype, s; /* Create a datagram socket. */ s = socket(AF_INET, SOCK_DGRAM, 0); if (s == -1) { perror("Socket not created"); return EXIT_FAILURE; } /* Ask for the socket type. */ optlen = sizeof(socktype); gs = getsockopt (s, SOL_SOCKET, SO_TYPE, &socktype, &optlen); if (gs == -1) { perror("getsockopt failed"); return EXIT_FAILURE; } /* Print socket type. */ switch (socktype) { case SOCK_STREAM: puts("Stream socket.\n"); break; case SOCK_DGRAM: puts("Datagram socket.\n"); break; case SOCK_RAW: puts("Raw socket.\n"); break; default: puts("Unknown socket type.\n"); break; } return EXIT_SUCCESS; }
RELATED FUNCTIONS |
bind
,
close
,
fcntl
,
ioctl
,
recv
,
setsockopt
,
socket
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.