-
Notifications
You must be signed in to change notification settings - Fork 0
/
setsockopt.html
258 lines (194 loc) · 7.4 KB
/
setsockopt.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
<!-- Creator : groff version 1.22.4 -->
<!-- CreationDate: Wed Jan 29 11:27:21 2020 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>GETSOCKOPT</title>
</head>
<body>
<h1 align="center">GETSOCKOPT</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#RETURN VALUE">RETURN VALUE</a><br>
<a href="#ERRORS">ERRORS</a><br>
<a href="#CONFORMING TO">CONFORMING TO</a><br>
<a href="#NOTES">NOTES</a><br>
<a href="#BUGS">BUGS</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<a href="#COLOPHON">COLOPHON</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">getsockopt,
setsockopt - get and set options on sockets</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>#include
<sys/types.h></b> /* See NOTES */ <b><br>
#include <sys/socket.h></b></p>
<p style="margin-left:11%; margin-top: 1em"><b>int
getsockopt(int</b> <i>sockfd</i><b>, int</b>
<i>level</i><b>, int</b> <i>optname</i><b>, <br>
void *</b><i>optval</i><b>, socklen_t
*</b><i>optlen</i><b>); <br>
int setsockopt(int</b> <i>sockfd</i><b>, int</b>
<i>level</i><b>, int</b> <i>optname</i><b>, <br>
const void *</b><i>optval</i><b>, socklen_t</b>
<i>optlen</i><b>);</b></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>getsockopt</b>()
and <b>setsockopt</b>() manipulate options for the socket
referred to by the file descriptor <i>sockfd</i>. Options
may exist at multiple protocol levels; they are always
present at the uppermost socket level.</p>
<p style="margin-left:11%; margin-top: 1em">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 sockets API level, <i>level</i> is
specified as <b>SOL_SOCKET</b>. To manipulate options at any
other level the protocol number of the appropriate protocol
controlling the option is supplied. For example, to indicate
that an option is to be interpreted by the <b>TCP</b>
protocol, <i>level</i> should be set to the protocol number
of <b>TCP</b>; see <b>getprotoent</b>(3).</p>
<p style="margin-left:11%; margin-top: 1em">The arguments
<i>optval</i> and <i>optlen</i> are used to access option
values for <b>setsockopt</b>(). For <b>getsockopt</b>() they
identify a buffer in which the value for the requested
option(s) are to be returned. For <b>getsockopt</b>(),
<i>optlen</i> is a value-result argument, initially
containing the size of the buffer pointed to by
<i>optval</i>, and modified on return to indicate the actual
size of the value returned. If no option value is to be
supplied or returned, <i>optval</i> may be NULL.</p>
<p style="margin-left:11%; margin-top: 1em"><i>Optname</i>
and any specified options are passed uninterpreted to the
appropriate protocol module for interpretation. The include
file <i><sys/socket.h></i> contains definitions for
socket level options, described below. Options at other
protocol levels vary in format and name; consult the
appropriate entries in section 4 of the manual.</p>
<p style="margin-left:11%; margin-top: 1em">Most
socket-level options utilize an <i>int</i> argument for
<i>optval</i>. For <b>setsockopt</b>(), the argument should
be nonzero to enable a boolean option, or zero if the option
is to be disabled.</p>
<p style="margin-left:11%; margin-top: 1em">For a
description of the available socket options see
<b>socket</b>(7) and the appropriate protocol man pages.</p>
<h2>RETURN VALUE
<a name="RETURN VALUE"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">On success,
zero is returned for the standard options. On error, -1 is
returned, and <i>errno</i> is set appropriately.</p>
<p style="margin-left:11%; margin-top: 1em">Netfilter
allows the programmer to define custom socket options with
associated handlers; for such options, the return value on
success is the value returned by the handler.</p>
<h2>ERRORS
<a name="ERRORS"></a>
</h2>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p style="margin-top: 1em"><b>EBADF</b></p></td>
<td width="6%"></td>
<td width="74%">
<p style="margin-top: 1em">The argument <i>sockfd</i> is
not a valid file descriptor.</p></td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>EFAULT</b></p></td>
<td width="6%"></td>
<td width="74%">
<p>The address pointed to by <i>optval</i> is not in a
valid part of the process address space. For
<b>getsockopt</b>(), this error may also be returned if
<i>optlen</i> is not in a valid part of the process address
space.</p> </td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="9%">
<p><b>EINVAL</b></p></td>
<td width="6%"></td>
<td width="74%">
<p><i>optlen</i> invalid in <b>setsockopt</b>(). In some
cases this error can also occur for an invalid value in
<i>optval</i> (e.g., for the <b>IP_ADD_MEMBERSHIP</b> option
described in <b>ip</b>(7)).</p></td></tr>
</table>
<p style="margin-left:11%;"><b>ENOPROTOOPT</b></p>
<p style="margin-left:26%;">The option is unknown at the
level indicated.</p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="12%">
<p><b>ENOTSOCK</b></p></td>
<td width="3%"></td>
<td width="74%">
<p>The file descriptor <i>sockfd</i> does not refer to a
socket.</p> </td></tr>
</table>
<h2>CONFORMING TO
<a name="CONFORMING TO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">POSIX.1-2001,
POSIX.1-2008, SVr4, 4.4BSD (these system calls first
appeared in 4.2BSD).</p>
<h2>NOTES
<a name="NOTES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">POSIX.1 does
not require the inclusion of <i><sys/types.h></i>, and
this header file is not required on Linux. However, some
historical (BSD) implementations required this header file,
and portable applications are probably wise to include
it.</p>
<p style="margin-left:11%; margin-top: 1em">For background
on the <i>socklen_t</i> type, see <b>accept</b>(2).</p>
<h2>BUGS
<a name="BUGS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Several of the
socket options should be handled at lower levels of the
system.</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>ioctl</b>(2),
<b>socket</b>(2), <b>getprotoent</b>(3),
<b>protocols</b>(5), <b>ip</b>(7), <b>packet</b>(7),
<b>socket</b>(7), <b>tcp</b>(7), <b>udp</b>(7),
<b>unix</b>(7)</p>
<h2>COLOPHON
<a name="COLOPHON"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">This page is
part of release 5.02 of the Linux <i>man-pages</i> project.
A description of the project, information about reporting
bugs, and the latest version of this page, can be found at
https://www.kernel.org/doc/man-pages/.</p>
<hr>
</body>
</html>