]>
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 | |
44 | .Fd #include <sys/types.h> | |
45 | .Fd #include <sys/socket.h> | |
46 | .Ft int | |
47 | .Fn getsockopt "int s" "int level" "int optname" "void *optval" "int *optlen" | |
48 | .Ft int | |
49 | .Fn setsockopt "int s" "int level" "int optname" "const void *optval" "int optlen" | |
50 | .Sh DESCRIPTION | |
51 | .Fn Getsockopt | |
52 | and | |
53 | .Fn setsockopt | |
54 | manipulate the | |
55 | .Em options | |
56 | associated with a socket. Options may exist at multiple | |
57 | protocol levels; they are always present at the uppermost | |
58 | .Dq socket | |
59 | level. | |
60 | .Pp | |
61 | When manipulating socket options the level at which the | |
62 | option resides and the name of the option must be specified. | |
63 | To manipulate options at the socket level, | |
64 | .Fa level | |
65 | is specified as | |
66 | .Dv SOL_SOCKET . | |
67 | To manipulate options at any | |
68 | other level the protocol number of the appropriate protocol | |
69 | controlling the option is supplied. For example, | |
70 | to indicate that an option is to be interpreted by the | |
71 | .Tn TCP | |
72 | protocol, | |
73 | .Fa level | |
74 | should be set to the protocol number of | |
75 | .Tn TCP ; | |
76 | see | |
77 | .Xr getprotoent 3 . | |
78 | .Pp | |
79 | The parameters | |
80 | .Fa optval | |
81 | and | |
82 | .Fa optlen | |
83 | are used to access option values for | |
84 | .Fn setsockopt . | |
85 | For | |
86 | .Fn getsockopt | |
87 | they identify a buffer in which the value for the | |
88 | requested option(s) are to be returned. For | |
89 | .Fn getsockopt , | |
90 | .Fa optlen | |
91 | is a value-result parameter, initially containing the | |
92 | size of the buffer pointed to by | |
93 | .Fa optval , | |
94 | and modified on return to indicate the actual size of | |
95 | the value returned. If no option value is | |
96 | to be supplied or returned, | |
97 | .Fa optval | |
98 | may be NULL. | |
99 | .Pp | |
100 | .Fa Optname | |
101 | and any specified options are passed uninterpreted to the appropriate | |
102 | protocol module for interpretation. | |
103 | The include file | |
104 | .Ao Pa sys/socket.h Ac | |
105 | contains definitions for | |
106 | socket level options, described below. | |
107 | Options at other protocol levels vary in format and | |
108 | name; consult the appropriate entries in | |
109 | section | |
110 | 4 of the manual. | |
111 | .Pp | |
112 | Most socket-level options utilize an | |
113 | .Fa int | |
114 | parameter for | |
115 | .Fa optval . | |
116 | For | |
117 | .Fn setsockopt , | |
118 | the parameter should be non-zero to enable a boolean option, | |
119 | or zero if the option is to be disabled. | |
120 | .Dv SO_LINGER | |
121 | uses a | |
122 | .Fa struct linger | |
123 | parameter, defined in | |
124 | .Ao Pa sys/socket.h Ac , | |
125 | which specifies the desired state of the option and the | |
126 | linger interval (see below). | |
127 | .Dv SO_SNDTIMEO | |
128 | and | |
129 | .Dv SO_RCVTIMEO | |
130 | use a | |
131 | .Fa struct timeval | |
132 | parameter, defined in | |
133 | .Ao Pa sys/time.h Ac . | |
134 | .Pp | |
135 | The following options are recognized at the socket level. | |
136 | Except as noted, each may be examined with | |
137 | .Fn getsockopt | |
138 | and set with | |
139 | .Fn setsockopt . | |
140 | .Bl -column SO_OOBINLINE -offset indent | |
141 | .It Dv SO_DEBUG Ta "enables recording of debugging information" | |
142 | .It Dv SO_REUSEADDR Ta "enables local address reuse" | |
143 | .It Dv SO_REUSEPORT Ta "enables duplicate address and port bindings" | |
144 | .It Dv SO_KEEPALIVE Ta "enables keep connections alive" | |
145 | .It Dv SO_DONTROUTE Ta "enables routing bypass for outgoing messages" | |
146 | .It Dv SO_LINGER Ta "linger on close if data present" | |
147 | .It Dv SO_BROADCAST Ta "enables permission to transmit broadcast messages" | |
148 | .It Dv SO_OOBINLINE Ta "enables reception of out-of-band data in band" | |
149 | .It Dv SO_SNDBUF Ta "set buffer size for output" | |
150 | .It Dv SO_RCVBUF Ta "set buffer size for input" | |
151 | .It Dv SO_SNDLOWAT Ta "set minimum count for output" | |
152 | .It Dv SO_RCVLOWAT Ta "set minimum count for input" | |
153 | .It Dv SO_SNDTIMEO Ta "set timeout value for output" | |
154 | .It Dv SO_RCVTIMEO Ta "set timeout value for input" | |
155 | .It Dv SO_TYPE Ta "get the type of the socket (get only)" | |
156 | .It Dv SO_ERROR Ta "get and clear error on the socket (get only)" | |
157 | .It Dv SO_NOSIGPIPE Ta "do not generate SIGPIPE, instead return EPIPE" | |
158 | .El | |
159 | .Pp | |
160 | .Dv SO_DEBUG | |
161 | enables debugging in the underlying protocol modules. | |
162 | .Dv SO_REUSEADDR | |
163 | indicates that the rules used in validating addresses supplied | |
164 | in a | |
165 | .Xr bind 2 | |
166 | call should allow reuse of local addresses. | |
167 | .Dv SO_REUSEPORT | |
168 | allows completely duplicate bindings by multiple processes | |
169 | if they all set | |
170 | .Dv SO_REUSEPORT | |
171 | before binding the port. | |
172 | This option permits multiple instances of a program to each | |
173 | receive UDP/IP multicast or broadcast datagrams destined for the bound port. | |
174 | .Dv SO_KEEPALIVE | |
175 | enables the | |
176 | periodic transmission of messages on a connected socket. Should the | |
177 | connected party fail to respond to these messages, the connection is | |
178 | considered broken and processes using the socket are notified via a | |
179 | .Dv SIGPIPE | |
180 | signal when attempting to send data. | |
181 | .Dv SO_DONTROUTE | |
182 | indicates that outgoing messages should | |
183 | bypass the standard routing facilities. Instead, messages are directed | |
184 | to the appropriate network interface according to the network portion | |
185 | of the destination address. | |
186 | .Pp | |
187 | .Dv SO_LINGER | |
188 | controls the action taken when unsent messages | |
189 | are queued on socket and a | |
190 | .Xr close 2 | |
191 | is performed. | |
192 | If the socket promises reliable delivery of data and | |
193 | .Dv SO_LINGER is set, | |
194 | the system will block the process on the | |
195 | .Xr close | |
196 | attempt until it is able to transmit the data or until it decides it | |
197 | is unable to deliver the information (a timeout period, termed the | |
198 | linger interval, is specified in the | |
199 | .Fn setsockopt | |
200 | call when | |
201 | .Dv SO_LINGER | |
202 | is requested). | |
203 | If | |
204 | .Dv SO_LINGER | |
205 | is disabled and a | |
206 | .Xr close | |
207 | is issued, the system will process the close in a manner that allows | |
208 | the process to continue as quickly as possible. | |
209 | .Pp | |
210 | The option | |
211 | .Dv SO_BROADCAST | |
212 | requests permission to send broadcast datagrams | |
213 | on the socket. | |
214 | Broadcast was a privileged operation in earlier versions of the system. | |
215 | With protocols that support out-of-band data, the | |
216 | .Dv SO_OOBINLINE | |
217 | option | |
218 | requests that out-of-band data be placed in the normal data input queue | |
219 | as received; it will then be accessible with | |
220 | .Xr recv | |
221 | or | |
222 | .Xr read | |
223 | calls without the | |
224 | .Dv MSG_OOB | |
225 | flag. | |
226 | Some protocols always behave as if this option is set. | |
227 | .Dv SO_SNDBUF | |
228 | and | |
229 | .Dv SO_RCVBUF | |
230 | are options to adjust the normal | |
231 | buffer sizes allocated for output and input buffers, respectively. | |
232 | The buffer size may be increased for high-volume connections, | |
233 | or may be decreased to limit the possible backlog of incoming data. | |
234 | The system places an absolute limit on these values. | |
235 | .Pp | |
236 | .Dv SO_SNDLOWAT | |
237 | is an option to set the minimum count for output operations. | |
238 | Most output operations process all of the data supplied | |
239 | by the call, delivering data to the protocol for transmission | |
240 | and blocking as necessary for flow control. | |
241 | Nonblocking output operations will process as much data as permitted | |
242 | subject to flow control without blocking, but will process no data | |
243 | if flow control does not allow the smaller of the low water mark value | |
244 | or the entire request to be processed. | |
245 | A | |
246 | .Xr select 2 | |
247 | operation testing the ability to write to a socket will return true | |
248 | only if the low water mark amount could be processed. | |
249 | The default value for | |
250 | .Dv SO_SNDLOWAT | |
251 | is set to a convenient size for network efficiency, often 1024. | |
252 | .Dv SO_RCVLOWAT | |
253 | is an option to set the minimum count for input operations. | |
254 | In general, receive calls will block until any (non-zero) amount of data | |
255 | is received, then return with the smaller of the amount available or the amount | |
256 | requested. | |
257 | The default value for | |
258 | .Dv SO_RCVLOWAT | |
259 | is 1. | |
260 | If | |
261 | .Dv SO_RCVLOWAT | |
262 | is set to a larger value, blocking receive calls normally | |
263 | wait until they have received the smaller of the low water mark value | |
264 | or the requested amount. | |
265 | Receive calls may still return less than the low water mark if an error | |
266 | occurs, a signal is caught, or the type of data next in the receive queue | |
267 | is different than that returned. | |
268 | .Pp | |
269 | .Dv SO_SNDTIMEO | |
270 | is an option to set a timeout value for output operations. | |
271 | It accepts a | |
272 | .Fa struct timeval | |
273 | parameter with the number of seconds and microseconds | |
274 | used to limit waits for output operations to complete. | |
275 | If a send operation has blocked for this much time, | |
276 | it returns with a partial count | |
277 | or with the error | |
278 | .Er EWOULDBLOCK | |
279 | if no data were sent. | |
280 | In the current implementation, this timer is restarted each time additional | |
281 | data are delivered to the protocol, | |
282 | implying that the limit applies to output portions ranging in size | |
283 | from the low water mark to the high water mark for output. | |
284 | .Dv SO_RCVTIMEO | |
285 | is an option to set a timeout value for input operations. | |
286 | It accepts a | |
287 | .Fa struct timeval | |
288 | parameter with the number of seconds and microseconds | |
289 | used to limit waits for input operations to complete. | |
290 | In the current implementation, this timer is restarted each time additional | |
291 | data are received by the protocol, | |
292 | and thus the limit is in effect an inactivity timer. | |
293 | If a receive operation has been blocked for this much time without | |
294 | receiving additional data, it returns with a short count | |
295 | or with the error | |
296 | .Er EWOULDBLOCK | |
297 | if no data were received. | |
298 | .Pp | |
299 | .Dv SO_NOSIGPIPE is an option that prevents SIGPIPE from being raised | |
300 | when a write fails on a socket to which there is no reader; | |
301 | instead the write to the socket returns with the error | |
302 | .Er EPIPE | |
303 | when there is no reader. | |
304 | .Pp | |
305 | Finally, | |
306 | .Dv SO_TYPE | |
307 | and | |
308 | .Dv SO_ERROR | |
309 | are options used only with | |
310 | .Fn getsockopt . | |
311 | .Dv SO_TYPE | |
312 | returns the type of the socket, such as | |
313 | .Dv SOCK_STREAM ; | |
314 | it is useful for servers that inherit sockets on startup. | |
315 | .Dv SO_ERROR | |
316 | returns any pending error on the socket and clears | |
317 | the error status. | |
318 | It may be used to check for asynchronous errors on connected | |
319 | datagram sockets or for other asynchronous errors. | |
320 | .Sh RETURN VALUES | |
321 | A 0 is returned if the call succeeds, -1 if it fails. | |
322 | .Sh ERRORS | |
323 | The call succeeds unless: | |
324 | .Bl -tag -width Er | |
325 | .It Bq Er EBADF | |
326 | The argument | |
327 | .Fa s | |
328 | is not a valid descriptor. | |
329 | .It Bq Er ENOTSOCK | |
330 | The argument | |
331 | .Fa s | |
332 | is a file, not a socket. | |
333 | .It Bq Er ENOPROTOOPT | |
334 | The option is unknown at the level indicated. | |
335 | .It Bq Er EFAULT | |
336 | The address pointed to by | |
337 | .Fa optval | |
338 | is not in a valid part of the process address space. | |
339 | For | |
340 | .Fn getsockopt , | |
341 | this error may also be returned if | |
342 | .Fa optlen | |
343 | is not in a valid part of the process address space. | |
344 | .El | |
345 | .Sh SEE ALSO | |
346 | .Xr ioctl 2 , | |
347 | .Xr socket 2 , | |
348 | .Xr getprotoent 3 | |
349 | .Xr protocols 5 | |
350 | .Sh BUGS | |
351 | Several of the socket options should be handled at lower levels of the system. | |
352 | .Sh HISTORY | |
353 | The | |
354 | .Fn getsockopt | |
355 | system call appeared in | |
356 | .Bx 4.2 . |