]>
Commit | Line | Data |
---|---|---|
9bccf70c A |
1 | .\" $NetBSD: getsockopt.2,v 1.7 1995/02/27 12:33:29 cgd Exp $ |
2 | .\" | |
3 | .\" Copyright (c) 1983, 1991, 1993 | |
4 | .\" The Regents of the University of California. All rights reserved. | |
5 | .\" | |
6 | .\" Redistribution and use in source and binary forms, with or without | |
7 | .\" modification, are permitted provided that the following conditions | |
8 | .\" are met: | |
9 | .\" 1. Redistributions of source code must retain the above copyright | |
10 | .\" notice, this list of conditions and the following disclaimer. | |
11 | .\" 2. Redistributions in binary form must reproduce the above copyright | |
12 | .\" notice, this list of conditions and the following disclaimer in the | |
13 | .\" documentation and/or other materials provided with the distribution. | |
14 | .\" 3. All advertising materials mentioning features or use of this software | |
15 | .\" must display the following acknowledgement: | |
16 | .\" This product includes software developed by the University of | |
17 | .\" California, Berkeley and its contributors. | |
18 | .\" 4. Neither the name of the University nor the names of its contributors | |
19 | .\" may be used to endorse or promote products derived from this software | |
20 | .\" without specific prior written permission. | |
21 | .\" | |
22 | .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
23 | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
24 | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
25 | .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
26 | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
27 | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
28 | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
29 | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
30 | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
31 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
32 | .\" SUCH DAMAGE. | |
33 | .\" | |
34 | .\" @(#)getsockopt.2 8.3 (Berkeley) 4/19/94 | |
35 | .\" | |
36 | .Dd April 19, 1994 | |
37 | .Dt GETSOCKOPT 2 | |
38 | .Os BSD 4.3r | |
39 | .Sh NAME | |
40 | .Nm getsockopt , | |
41 | .Nm setsockopt | |
42 | .Nd get and set options on sockets | |
43 | .Sh SYNOPSIS | |
9bccf70c A |
44 | .Fd #include <sys/socket.h> |
45 | .Ft int | |
2d21ac55 A |
46 | .Fo getsockopt |
47 | .Fa "int socket" | |
48 | .Fa "int level" | |
49 | .Fa "int option_name" | |
50 | .Fa "void *restrict option_value" | |
51 | .Fa "socklen_t *restrict option_len" | |
52 | .Fc | |
9bccf70c | 53 | .Ft int |
2d21ac55 A |
54 | .Fo setsockopt |
55 | .Fa "int socket" | |
56 | .Fa "int level" | |
57 | .Fa "int option_name" | |
58 | .Fa "const void *option_value" | |
59 | .Fa "socklen_t option_len" | |
60 | .Fc | |
9bccf70c A |
61 | .Sh DESCRIPTION |
62 | .Fn Getsockopt | |
63 | and | |
64 | .Fn setsockopt | |
65 | manipulate the | |
66 | .Em options | |
67 | associated with a socket. Options may exist at multiple | |
68 | protocol levels; they are always present at the uppermost | |
69 | .Dq socket | |
70 | level. | |
71 | .Pp | |
72 | When manipulating socket options the level at which the | |
73 | option resides and the name of the option must be specified. | |
74 | To manipulate options at the socket level, | |
75 | .Fa level | |
76 | is specified as | |
77 | .Dv SOL_SOCKET . | |
78 | To manipulate options at any | |
79 | other level the protocol number of the appropriate protocol | |
80 | controlling the option is supplied. For example, | |
81 | to indicate that an option is to be interpreted by the | |
82 | .Tn TCP | |
83 | protocol, | |
84 | .Fa level | |
85 | should be set to the protocol number of | |
86 | .Tn TCP ; | |
87 | see | |
88 | .Xr getprotoent 3 . | |
89 | .Pp | |
90 | The parameters | |
2d21ac55 | 91 | .Fa option_value |
9bccf70c | 92 | and |
2d21ac55 | 93 | .Fa option_len |
9bccf70c A |
94 | are used to access option values for |
95 | .Fn setsockopt . | |
96 | For | |
97 | .Fn getsockopt | |
98 | they identify a buffer in which the value for the | |
99 | requested option(s) are to be returned. For | |
100 | .Fn getsockopt , | |
2d21ac55 | 101 | .Fa option_len |
9bccf70c A |
102 | is a value-result parameter, initially containing the |
103 | size of the buffer pointed to by | |
2d21ac55 | 104 | .Fa option_value , |
9bccf70c A |
105 | and modified on return to indicate the actual size of |
106 | the value returned. If no option value is | |
107 | to be supplied or returned, | |
2d21ac55 | 108 | .Fa option_value |
9bccf70c A |
109 | may be NULL. |
110 | .Pp | |
2d21ac55 | 111 | .Fa option_name |
9bccf70c A |
112 | and any specified options are passed uninterpreted to the appropriate |
113 | protocol module for interpretation. | |
114 | The include file | |
115 | .Ao Pa sys/socket.h Ac | |
116 | contains definitions for | |
117 | socket level options, described below. | |
118 | Options at other protocol levels vary in format and | |
119 | name; consult the appropriate entries in | |
120 | section | |
121 | 4 of the manual. | |
122 | .Pp | |
123 | Most socket-level options utilize an | |
124 | .Fa int | |
125 | parameter for | |
2d21ac55 | 126 | .Fa option_value . |
9bccf70c A |
127 | For |
128 | .Fn setsockopt , | |
129 | the parameter should be non-zero to enable a boolean option, | |
130 | or zero if the option is to be disabled. | |
131 | .Dv SO_LINGER | |
132 | uses a | |
133 | .Fa struct linger | |
134 | parameter, defined in | |
135 | .Ao Pa sys/socket.h Ac , | |
136 | which specifies the desired state of the option and the | |
137 | linger interval (see below). | |
138 | .Dv SO_SNDTIMEO | |
139 | and | |
140 | .Dv SO_RCVTIMEO | |
141 | use a | |
142 | .Fa struct timeval | |
143 | parameter, defined in | |
144 | .Ao Pa sys/time.h Ac . | |
145 | .Pp | |
146 | The following options are recognized at the socket level. | |
147 | Except as noted, each may be examined with | |
148 | .Fn getsockopt | |
149 | and set with | |
150 | .Fn setsockopt . | |
151 | .Bl -column SO_OOBINLINE -offset indent | |
152 | .It Dv SO_DEBUG Ta "enables recording of debugging information" | |
153 | .It Dv SO_REUSEADDR Ta "enables local address reuse" | |
154 | .It Dv SO_REUSEPORT Ta "enables duplicate address and port bindings" | |
155 | .It Dv SO_KEEPALIVE Ta "enables keep connections alive" | |
156 | .It Dv SO_DONTROUTE Ta "enables routing bypass for outgoing messages" | |
157 | .It Dv SO_LINGER Ta "linger on close if data present" | |
158 | .It Dv SO_BROADCAST Ta "enables permission to transmit broadcast messages" | |
159 | .It Dv SO_OOBINLINE Ta "enables reception of out-of-band data in band" | |
160 | .It Dv SO_SNDBUF Ta "set buffer size for output" | |
161 | .It Dv SO_RCVBUF Ta "set buffer size for input" | |
162 | .It Dv SO_SNDLOWAT Ta "set minimum count for output" | |
163 | .It Dv SO_RCVLOWAT Ta "set minimum count for input" | |
164 | .It Dv SO_SNDTIMEO Ta "set timeout value for output" | |
165 | .It Dv SO_RCVTIMEO Ta "set timeout value for input" | |
166 | .It Dv SO_TYPE Ta "get the type of the socket (get only)" | |
167 | .It Dv SO_ERROR Ta "get and clear error on the socket (get only)" | |
168 | .It Dv SO_NOSIGPIPE Ta "do not generate SIGPIPE, instead return EPIPE" | |
b0d623f7 A |
169 | .It Dv SO_NREAD Ta "number of bytes to be read (get only)" |
170 | .It Dv SO_NWRITE Ta "number of bytes written not yet sent by the protocol (get only)" | |
171 | .It Dv SO_LINGER_SEC Ta "linger on close if data present with timeout in seconds" | |
9bccf70c A |
172 | .El |
173 | .Pp | |
174 | .Dv SO_DEBUG | |
175 | enables debugging in the underlying protocol modules. | |
b0d623f7 | 176 | .Pp |
9bccf70c A |
177 | .Dv SO_REUSEADDR |
178 | indicates that the rules used in validating addresses supplied | |
179 | in a | |
180 | .Xr bind 2 | |
181 | call should allow reuse of local addresses. | |
b0d623f7 | 182 | .Pp |
9bccf70c A |
183 | .Dv SO_REUSEPORT |
184 | allows completely duplicate bindings by multiple processes | |
185 | if they all set | |
186 | .Dv SO_REUSEPORT | |
187 | before binding the port. | |
188 | This option permits multiple instances of a program to each | |
189 | receive UDP/IP multicast or broadcast datagrams destined for the bound port. | |
b0d623f7 | 190 | .Pp |
9bccf70c A |
191 | .Dv SO_KEEPALIVE |
192 | enables the | |
193 | periodic transmission of messages on a connected socket. Should the | |
194 | connected party fail to respond to these messages, the connection is | |
195 | considered broken and processes using the socket are notified via a | |
196 | .Dv SIGPIPE | |
197 | signal when attempting to send data. | |
b0d623f7 | 198 | .Pp |
9bccf70c A |
199 | .Dv SO_DONTROUTE |
200 | indicates that outgoing messages should | |
201 | bypass the standard routing facilities. Instead, messages are directed | |
202 | to the appropriate network interface according to the network portion | |
203 | of the destination address. | |
204 | .Pp | |
205 | .Dv SO_LINGER | |
206 | controls the action taken when unsent messages | |
207 | are queued on socket and a | |
208 | .Xr close 2 | |
209 | is performed. | |
210 | If the socket promises reliable delivery of data and | |
211 | .Dv SO_LINGER is set, | |
212 | the system will block the process on the | |
213 | .Xr close | |
214 | attempt until it is able to transmit the data or until it decides it | |
215 | is unable to deliver the information (a timeout period, termed the | |
216 | linger interval, is specified in the | |
217 | .Fn setsockopt | |
218 | call when | |
219 | .Dv SO_LINGER | |
220 | is requested). | |
221 | If | |
222 | .Dv SO_LINGER | |
223 | is disabled and a | |
224 | .Xr close | |
225 | is issued, the system will process the close in a manner that allows | |
226 | the process to continue as quickly as possible. | |
227 | .Pp | |
b0d623f7 A |
228 | .Dv SO_LINGER_SEC |
229 | is the same option as | |
230 | .Dv SO_LINGER | |
231 | except the linger time is in seconds for | |
232 | .Dv SO_LINGER_SEC . | |
233 | .Pp | |
9bccf70c A |
234 | The option |
235 | .Dv SO_BROADCAST | |
236 | requests permission to send broadcast datagrams | |
237 | on the socket. | |
238 | Broadcast was a privileged operation in earlier versions of the system. | |
b0d623f7 | 239 | .Pp |
9bccf70c A |
240 | With protocols that support out-of-band data, the |
241 | .Dv SO_OOBINLINE | |
242 | option | |
243 | requests that out-of-band data be placed in the normal data input queue | |
244 | as received; it will then be accessible with | |
245 | .Xr recv | |
246 | or | |
247 | .Xr read | |
248 | calls without the | |
249 | .Dv MSG_OOB | |
250 | flag. | |
251 | Some protocols always behave as if this option is set. | |
b0d623f7 | 252 | .Pp |
9bccf70c A |
253 | .Dv SO_SNDBUF |
254 | and | |
255 | .Dv SO_RCVBUF | |
256 | are options to adjust the normal | |
257 | buffer sizes allocated for output and input buffers, respectively. | |
258 | The buffer size may be increased for high-volume connections, | |
259 | or may be decreased to limit the possible backlog of incoming data. | |
260 | The system places an absolute limit on these values. | |
261 | .Pp | |
262 | .Dv SO_SNDLOWAT | |
263 | is an option to set the minimum count for output operations. | |
2d21ac55 A |
264 | Most output operations process all of the data supplied by the call, |
265 | delivering data to the protocol for transmission | |
9bccf70c A |
266 | and blocking as necessary for flow control. |
267 | Nonblocking output operations will process as much data as permitted | |
2d21ac55 A |
268 | (subject to flow control) without blocking, |
269 | but will process no data if flow control | |
270 | does not allow the smaller of the low-water mark value | |
9bccf70c A |
271 | or the entire request to be processed. |
272 | A | |
273 | .Xr select 2 | |
274 | operation testing the ability to write to a socket will return true | |
2d21ac55 | 275 | only if the low-water mark amount could be processed. |
9bccf70c A |
276 | The default value for |
277 | .Dv SO_SNDLOWAT | |
316670eb | 278 | is set to a convenient size for network efficiency, often 2048. |
2d21ac55 | 279 | .Pp |
9bccf70c A |
280 | .Dv SO_RCVLOWAT |
281 | is an option to set the minimum count for input operations. | |
282 | In general, receive calls will block until any (non-zero) amount of data | |
2d21ac55 A |
283 | is received, then return with the smaller of the amount available |
284 | or the amount requested. | |
9bccf70c A |
285 | The default value for |
286 | .Dv SO_RCVLOWAT | |
287 | is 1. | |
288 | If | |
289 | .Dv SO_RCVLOWAT | |
2d21ac55 A |
290 | is set to a larger value, blocking receive calls |
291 | normally wait until they have received the smaller | |
292 | of the low-water mark value or the requested amount. | |
293 | Receive calls may still return less than the low-water mark | |
294 | if an error occurs, a signal is caught, | |
295 | or the type of data next in the receive queue | |
9bccf70c A |
296 | is different than that returned. |
297 | .Pp | |
298 | .Dv SO_SNDTIMEO | |
299 | is an option to set a timeout value for output operations. | |
300 | It accepts a | |
301 | .Fa struct timeval | |
302 | parameter with the number of seconds and microseconds | |
303 | used to limit waits for output operations to complete. | |
304 | If a send operation has blocked for this much time, | |
305 | it returns with a partial count | |
306 | or with the error | |
307 | .Er EWOULDBLOCK | |
308 | if no data were sent. | |
309 | In the current implementation, this timer is restarted each time additional | |
310 | data are delivered to the protocol, | |
311 | implying that the limit applies to output portions ranging in size | |
2d21ac55 A |
312 | from the low-water mark to the high-water mark for output. |
313 | .Pp | |
9bccf70c A |
314 | .Dv SO_RCVTIMEO |
315 | is an option to set a timeout value for input operations. | |
316 | It accepts a | |
317 | .Fa struct timeval | |
318 | parameter with the number of seconds and microseconds | |
319 | used to limit waits for input operations to complete. | |
320 | In the current implementation, this timer is restarted each time additional | |
321 | data are received by the protocol, | |
322 | and thus the limit is in effect an inactivity timer. | |
323 | If a receive operation has been blocked for this much time without | |
324 | receiving additional data, it returns with a short count | |
325 | or with the error | |
326 | .Er EWOULDBLOCK | |
2d21ac55 A |
327 | if no data were received. |
328 | The struct timeval parameter must represent a positive time interval; | |
329 | otherwise, | |
55e303ae A |
330 | .Fn setsockopt |
331 | returns with the error | |
332 | .Er EDOM . | |
9bccf70c A |
333 | .Pp |
334 | .Dv SO_NOSIGPIPE is an option that prevents SIGPIPE from being raised | |
335 | when a write fails on a socket to which there is no reader; | |
2d21ac55 | 336 | instead, the write to the socket returns with the error |
9bccf70c A |
337 | .Er EPIPE |
338 | when there is no reader. | |
339 | .Pp | |
340 | Finally, | |
b0d623f7 A |
341 | .Dv SO_TYPE , |
342 | .Dv SO_ERROR , | |
343 | .Dv SO_NREAD , and | |
344 | .Dv SO_NWRITE | |
9bccf70c A |
345 | are options used only with |
346 | .Fn getsockopt . | |
b0d623f7 | 347 | .Pp |
9bccf70c A |
348 | .Dv SO_TYPE |
349 | returns the type of the socket, such as | |
350 | .Dv SOCK_STREAM ; | |
351 | it is useful for servers that inherit sockets on startup. | |
b0d623f7 | 352 | .Pp |
9bccf70c A |
353 | .Dv SO_ERROR |
354 | returns any pending error on the socket and clears | |
355 | the error status. | |
356 | It may be used to check for asynchronous errors on connected | |
357 | datagram sockets or for other asynchronous errors. | |
b0d623f7 A |
358 | .Pp |
359 | .Dv SO_NREAD | |
360 | returns the amount of data in the input buffer that is available to be received. | |
361 | For datagram oriented sockets, | |
362 | .Dv SO_NREAD | |
363 | returns the size of the first packet -- this differs from the | |
364 | .Fn ioctl | |
365 | command | |
366 | .Dv FIONREAD | |
367 | that returns the total amount of data available. | |
368 | .Pp | |
369 | .Dv SO_NWRITE | |
370 | returns the amount of data in the output buffer not yet sent by the protocol. | |
9bccf70c | 371 | .Sh RETURN VALUES |
2d21ac55 | 372 | .Rv -std |
9bccf70c | 373 | .Sh ERRORS |
2d21ac55 A |
374 | The |
375 | .Fn getsockopt | |
376 | and | |
377 | .Fn setsockopt | |
378 | system calls will succeed unless: | |
9bccf70c | 379 | .Bl -tag -width Er |
2d21ac55 | 380 | .\" ========== |
9bccf70c A |
381 | .It Bq Er EBADF |
382 | The argument | |
2d21ac55 A |
383 | .Fa socket |
384 | is not a valid file descriptor. | |
385 | .\" ========== | |
9bccf70c A |
386 | .It Bq Er EFAULT |
387 | The address pointed to by | |
2d21ac55 | 388 | .Fa option_value |
9bccf70c A |
389 | is not in a valid part of the process address space. |
390 | For | |
391 | .Fn getsockopt , | |
392 | this error may also be returned if | |
2d21ac55 | 393 | .Fa option_len |
9bccf70c | 394 | is not in a valid part of the process address space. |
2d21ac55 A |
395 | .\" ========== |
396 | .It Bq Er EINVAL | |
397 | The option is invalid at the level indicated. | |
398 | .\" ========== | |
399 | .It Bq Er ENOBUFS | |
b0d623f7 A |
400 | Insufficient system resources available for the call to complete. |
401 | .\" ========== | |
402 | .It Bq Er ENOMEM | |
403 | Insufficient memory available for the system call to complete. | |
2d21ac55 A |
404 | .\" ========== |
405 | .It Bq Er ENOPROTOOPT | |
406 | The option is unknown at the level indicated. | |
407 | .\" ========== | |
408 | .It Bq Er ENOTSOCK | |
409 | The argument | |
410 | .Fa socket | |
411 | is not a socket (e.g., a plain file). | |
412 | .El | |
413 | .Pp | |
414 | The | |
415 | .Fn setsockopt | |
416 | system call will succeed unless: | |
417 | .Bl -tag -width Er | |
418 | .\" ========== | |
55e303ae | 419 | .It Bq Er EDOM |
2d21ac55 A |
420 | The argument |
421 | .Fa option_value | |
422 | is out of bounds. | |
423 | .\" ========== | |
424 | .It Bq Er EISCONN | |
425 | .Fa socket | |
426 | is already connected | |
427 | and a specified option cannot be set | |
428 | while this is the case. | |
b0d623f7 A |
429 | .\" ========== |
430 | .It Bq Er EINVAL | |
431 | The socket has been shut down. | |
9bccf70c | 432 | .El |
2d21ac55 A |
433 | .Sh LEGACY SYNOPSIS |
434 | .Fd #include <sys/types.h> | |
435 | .Fd #include <sys/socket.h> | |
436 | .Pp | |
437 | The include file | |
438 | .In sys/types.h | |
439 | is necessary. | |
9bccf70c | 440 | .Sh SEE ALSO |
9bccf70c | 441 | .Xr socket 2 , |
b0d623f7 A |
442 | .Xr bind 2 , |
443 | .Xr ioctl 2 , | |
2d21ac55 | 444 | .Xr getprotoent 3 , |
9bccf70c A |
445 | .Xr protocols 5 |
446 | .Sh BUGS | |
447 | Several of the socket options should be handled at lower levels of the system. | |
448 | .Sh HISTORY | |
449 | The | |
450 | .Fn getsockopt | |
451 | system call appeared in | |
452 | .Bx 4.2 . |