getsockopt.2 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623
  1. .\" Copyright (c) 1983, 1991, 1993
  2. .\" The Regents of the University of California. All rights reserved.
  3. .\"
  4. .\" Redistribution and use in source and binary forms, with or without
  5. .\" modification, are permitted provided that the following conditions
  6. .\" are met:
  7. .\" 1. Redistributions of source code must retain the above copyright
  8. .\" notice, this list of conditions and the following disclaimer.
  9. .\" 2. Redistributions in binary form must reproduce the above copyright
  10. .\" notice, this list of conditions and the following disclaimer in the
  11. .\" documentation and/or other materials provided with the distribution.
  12. .\" 3. Neither the name of the University nor the names of its contributors
  13. .\" may be used to endorse or promote products derived from this software
  14. .\" without specific prior written permission.
  15. .\"
  16. .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  17. .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  20. .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22. .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  23. .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26. .\" SUCH DAMAGE.
  27. .\"
  28. .Dd February 8, 2021
  29. .Dt GETSOCKOPT 2
  30. .Os
  31. .Sh NAME
  32. .Nm getsockopt ,
  33. .Nm setsockopt
  34. .Nd get and set options on sockets
  35. .Sh LIBRARY
  36. .Lb libc
  37. .Sh SYNOPSIS
  38. .In sys/types.h
  39. .In sys/socket.h
  40. .Ft int
  41. .Fn getsockopt "int s" "int level" "int optname" "void * restrict optval" "socklen_t * restrict optlen"
  42. .Ft int
  43. .Fn setsockopt "int s" "int level" "int optname" "const void *optval" "socklen_t optlen"
  44. .Sh DESCRIPTION
  45. The
  46. .Fn getsockopt
  47. and
  48. .Fn setsockopt
  49. system calls
  50. manipulate the
  51. .Em options
  52. associated with a socket.
  53. Options may exist at multiple
  54. protocol levels; they are always present at the uppermost
  55. .Dq socket
  56. level.
  57. .Pp
  58. When manipulating socket options the level at which the
  59. option resides and the name of the option must be specified.
  60. To manipulate options at the socket level,
  61. .Fa level
  62. is specified as
  63. .Dv SOL_SOCKET .
  64. To manipulate options at any
  65. other level the protocol number of the appropriate protocol
  66. controlling the option is supplied.
  67. For example,
  68. to indicate that an option is to be interpreted by the
  69. .Tn TCP
  70. protocol,
  71. .Fa level
  72. should be set to the protocol number of
  73. .Tn TCP ;
  74. see
  75. .Xr getprotoent 3 .
  76. .Pp
  77. The
  78. .Fa optval
  79. and
  80. .Fa optlen
  81. arguments
  82. are used to access option values for
  83. .Fn setsockopt .
  84. For
  85. .Fn getsockopt
  86. they identify a buffer in which the value for the
  87. requested option(s) are to be returned.
  88. For
  89. .Fn getsockopt ,
  90. .Fa optlen
  91. is a value-result argument, 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.
  96. If no option value is
  97. to be supplied or returned,
  98. .Fa optval
  99. may be NULL.
  100. .Pp
  101. The
  102. .Fa optname
  103. argument
  104. and any specified options are passed uninterpreted to the appropriate
  105. protocol module for interpretation.
  106. The include file
  107. .In sys/socket.h
  108. contains definitions for
  109. socket level options, described below.
  110. Options at other protocol levels vary in format and
  111. name; consult the appropriate entries in
  112. section
  113. 4 of the manual.
  114. .Pp
  115. Most socket-level options utilize an
  116. .Vt int
  117. argument for
  118. .Fa optval .
  119. For
  120. .Fn setsockopt ,
  121. the argument should be non-zero to enable a boolean option,
  122. or zero if the option is to be disabled.
  123. .Dv SO_LINGER
  124. uses a
  125. .Vt "struct linger"
  126. argument, defined in
  127. .In sys/socket.h ,
  128. which specifies the desired state of the option and the
  129. linger interval (see below).
  130. .Dv SO_SNDTIMEO
  131. and
  132. .Dv SO_RCVTIMEO
  133. use a
  134. .Vt "struct timeval"
  135. argument, defined in
  136. .In sys/time.h .
  137. .Pp
  138. The following options are recognized at the socket level.
  139. For protocol-specific options, see protocol manual pages,
  140. e.g.
  141. .Xr ip 4
  142. or
  143. .Xr tcp 4 .
  144. Except as noted, each may be examined with
  145. .Fn getsockopt
  146. and set with
  147. .Fn setsockopt .
  148. .Bl -column SO_ACCEPTFILTER -offset indent
  149. .It Dv SO_DEBUG Ta "enables recording of debugging information"
  150. .It Dv SO_REUSEADDR Ta "enables local address reuse"
  151. .It Dv SO_REUSEPORT Ta "enables duplicate address and port bindings"
  152. .It Dv SO_REUSEPORT_LB Ta "enables duplicate address and port bindings with load balancing"
  153. .It Dv SO_KEEPALIVE Ta "enables keep connections alive"
  154. .It Dv SO_DONTROUTE Ta "enables routing bypass for outgoing messages"
  155. .It Dv SO_LINGER Ta "linger on close if data present"
  156. .It Dv SO_BROADCAST Ta "enables permission to transmit broadcast messages"
  157. .It Dv SO_OOBINLINE Ta "enables reception of out-of-band data in band"
  158. .It Dv SO_SNDBUF Ta "set buffer size for output"
  159. .It Dv SO_RCVBUF Ta "set buffer size for input"
  160. .It Dv SO_SNDLOWAT Ta "set minimum count for output"
  161. .It Dv SO_RCVLOWAT Ta "set minimum count for input"
  162. .It Dv SO_SNDTIMEO Ta "set timeout value for output"
  163. .It Dv SO_RCVTIMEO Ta "set timeout value for input"
  164. .It Dv SO_ACCEPTFILTER Ta "set accept filter on listening socket"
  165. .It Dv SO_NOSIGPIPE Ta
  166. controls generation of
  167. .Dv SIGPIPE
  168. for the socket
  169. .It Dv SO_TIMESTAMP Ta "enables reception of a timestamp with datagrams"
  170. .It Dv SO_BINTIME Ta "enables reception of a timestamp with datagrams"
  171. .It Dv SO_ACCEPTCONN Ta "get listening status of the socket (get only)"
  172. .It Dv SO_DOMAIN Ta "get the domain of the socket (get only)"
  173. .It Dv SO_TYPE Ta "get the type of the socket (get only)"
  174. .It Dv SO_PROTOCOL Ta "get the protocol number for the socket (get only)"
  175. .It Dv SO_PROTOTYPE Ta "SunOS alias for the Linux SO_PROTOCOL (get only)"
  176. .It Dv SO_ERROR Ta "get and clear error on the socket (get only)"
  177. .It Dv SO_RERROR Ta "enables receive error reporting"
  178. .It Dv SO_SETFIB Ta "set the associated FIB (routing table) for the socket (set only)"
  179. .El
  180. .Pp
  181. The following options are recognized in
  182. .Fx :
  183. .Bl -column SO_LISTENINCQLEN -offset indent
  184. .It Dv SO_LABEL Ta "get MAC label of the socket (get only)"
  185. .It Dv SO_PEERLABEL Ta "get socket's peer's MAC label (get only)"
  186. .It Dv SO_LISTENQLIMIT Ta "get backlog limit of the socket (get only)"
  187. .It Dv SO_LISTENQLEN Ta "get complete queue length of the socket (get only)"
  188. .It Dv SO_LISTENINCQLEN Ta "get incomplete queue length of the socket (get only)"
  189. .It Dv SO_USER_COOKIE Ta "set the 'so_user_cookie' value for the socket (uint32_t, set only)"
  190. .It Dv SO_TS_CLOCK Ta "set specific format of timestamp returned by SO_TIMESTAMP"
  191. .It Dv SO_MAX_PACING_RATE Ta "set the maximum transmit rate in bytes per second for the socket"
  192. .It Dv SO_NO_OFFLOAD Ta "disables protocol offloads"
  193. .It Dv SO_NO_DDP Ta "disables direct data placement offload"
  194. .El
  195. .Pp
  196. .Dv SO_DEBUG
  197. enables debugging in the underlying protocol modules.
  198. .Pp
  199. .Dv SO_REUSEADDR
  200. indicates that the rules used in validating addresses supplied
  201. in a
  202. .Xr bind 2
  203. system call should allow reuse of local addresses.
  204. .Pp
  205. .Dv SO_REUSEPORT
  206. allows completely duplicate bindings by multiple processes
  207. if they all set
  208. .Dv SO_REUSEPORT
  209. before binding the port.
  210. This option permits multiple instances of a program to each
  211. receive UDP/IP multicast or broadcast datagrams destined for the bound port.
  212. .Pp
  213. .Dv SO_REUSEPORT_LB
  214. allows completely duplicate bindings by multiple sockets
  215. if they all set
  216. .Dv SO_REUSEPORT_LB
  217. before binding the port.
  218. Incoming TCP and UDP connections are distributed among the participating
  219. listening sockets based on a hash function of local port number, and foreign IP
  220. address and port number.
  221. A maximum of 256 sockets can be bound to the same load-balancing group.
  222. .Pp
  223. .Dv SO_KEEPALIVE
  224. enables the
  225. periodic transmission of messages on a connected socket.
  226. Should the
  227. connected party fail to respond to these messages, the connection is
  228. considered broken and processes using the socket are notified via a
  229. .Dv SIGPIPE
  230. signal when attempting to send data.
  231. .Pp
  232. .Dv SO_DONTROUTE
  233. indicates that outgoing messages should
  234. bypass the standard routing facilities.
  235. Instead, messages are directed
  236. to the appropriate network interface according to the network portion
  237. of the destination address.
  238. .Pp
  239. .Dv SO_LINGER
  240. controls the action taken when unsent messages
  241. are queued on socket and a
  242. .Xr close 2
  243. is performed.
  244. If the socket promises reliable delivery of data and
  245. .Dv SO_LINGER
  246. is set,
  247. the system will block the process on the
  248. .Xr close 2
  249. attempt until it is able to transmit the data or until it decides it
  250. is unable to deliver the information (a timeout period, termed the
  251. linger interval, is specified in seconds in the
  252. .Fn setsockopt
  253. system call when
  254. .Dv SO_LINGER
  255. is requested).
  256. If
  257. .Dv SO_LINGER
  258. is disabled and a
  259. .Xr close 2
  260. is issued, the system will process the close in a manner that allows
  261. the process to continue as quickly as possible.
  262. .Pp
  263. The option
  264. .Dv SO_BROADCAST
  265. requests permission to send broadcast datagrams
  266. on the socket.
  267. Broadcast was a privileged operation in earlier versions of the system.
  268. .Pp
  269. With protocols that support out-of-band data, the
  270. .Dv SO_OOBINLINE
  271. option
  272. requests that out-of-band data be placed in the normal data input queue
  273. as received; it will then be accessible with
  274. .Xr recv 2
  275. or
  276. .Xr read 2
  277. calls without the
  278. .Dv MSG_OOB
  279. flag.
  280. Some protocols always behave as if this option is set.
  281. .Pp
  282. .Dv SO_SNDBUF
  283. and
  284. .Dv SO_RCVBUF
  285. are options to adjust the normal
  286. buffer sizes allocated for output and input buffers, respectively.
  287. The buffer size may be increased for high-volume connections,
  288. or may be decreased to limit the possible backlog of incoming data.
  289. The system places an absolute maximum on these values, which is accessible
  290. through the
  291. .Xr sysctl 3
  292. MIB variable
  293. .Dq Li kern.ipc.maxsockbuf .
  294. .Pp
  295. .Dv SO_SNDLOWAT
  296. is an option to set the minimum count for output operations.
  297. Most output operations process all of the data supplied
  298. by the call, delivering data to the protocol for transmission
  299. and blocking as necessary for flow control.
  300. Nonblocking output operations will process as much data as permitted
  301. subject to flow control without blocking, but will process no data
  302. if flow control does not allow the smaller of the low water mark value
  303. or the entire request to be processed.
  304. A
  305. .Xr select 2
  306. operation testing the ability to write to a socket will return true
  307. only if the low water mark amount could be processed.
  308. The default value for
  309. .Dv SO_SNDLOWAT
  310. is set to a convenient size for network efficiency, often 1024.
  311. .Pp
  312. .Dv SO_RCVLOWAT
  313. is an option to set the minimum count for input operations.
  314. In general, receive calls will block until any (non-zero) amount of data
  315. is received, then return with the smaller of the amount available or the amount
  316. requested.
  317. The default value for
  318. .Dv SO_RCVLOWAT
  319. is 1.
  320. If
  321. .Dv SO_RCVLOWAT
  322. is set to a larger value, blocking receive calls normally
  323. wait until they have received the smaller of the low water mark value
  324. or the requested amount.
  325. Receive calls may still return less than the low water mark if an error
  326. occurs, a signal is caught, or the type of data next in the receive queue
  327. is different from that which was returned.
  328. .Pp
  329. .Dv SO_SNDTIMEO
  330. is an option to set a timeout value for output operations.
  331. It accepts a
  332. .Vt "struct timeval"
  333. argument with the number of seconds and microseconds
  334. used to limit waits for output operations to complete.
  335. If a send operation has blocked for this much time,
  336. it returns with a partial count
  337. or with the error
  338. .Er EWOULDBLOCK
  339. if no data were sent.
  340. In the current implementation, this timer is restarted each time additional
  341. data are delivered to the protocol,
  342. implying that the limit applies to output portions ranging in size
  343. from the low water mark to the high water mark for output.
  344. .Pp
  345. .Dv SO_RCVTIMEO
  346. is an option to set a timeout value for input operations.
  347. It accepts a
  348. .Vt "struct timeval"
  349. argument with the number of seconds and microseconds
  350. used to limit waits for input operations to complete.
  351. In the current implementation, this timer is restarted each time additional
  352. data are received by the protocol,
  353. and thus the limit is in effect an inactivity timer.
  354. If a receive operation has been blocked for this much time without
  355. receiving additional data, it returns with a short count
  356. or with the error
  357. .Er EWOULDBLOCK
  358. if no data were received.
  359. .Pp
  360. .Dv SO_SETFIB
  361. can be used to over-ride the default FIB (routing table) for the given socket.
  362. The value must be from 0 to one less than the number returned from
  363. the sysctl
  364. .Em net.fibs .
  365. .Pp
  366. .Dv SO_USER_COOKIE
  367. can be used to set the uint32_t so_user_cookie field in the socket.
  368. The value is an uint32_t, and can be used in the kernel code that
  369. manipulates traffic related to the socket.
  370. The default value for the field is 0.
  371. As an example, the value can be used as the skipto target or
  372. pipe number in
  373. .Nm ipfw/dummynet .
  374. .Pp
  375. .Dv SO_ACCEPTFILTER
  376. places an
  377. .Xr accept_filter 9
  378. on the socket,
  379. which will filter incoming connections
  380. on a listening stream socket before being presented for
  381. .Xr accept 2 .
  382. Once more,
  383. .Xr listen 2
  384. must be called on the socket before
  385. trying to install the filter on it,
  386. or else the
  387. .Fn setsockopt
  388. system call will fail.
  389. .Bd -literal
  390. struct accept_filter_arg {
  391. char af_name[16];
  392. char af_arg[256-16];
  393. };
  394. .Ed
  395. .Pp
  396. The
  397. .Fa optval
  398. argument
  399. should point to a
  400. .Fa struct accept_filter_arg
  401. that will select and configure the
  402. .Xr accept_filter 9 .
  403. The
  404. .Fa af_name
  405. argument
  406. should be filled with the name of the accept filter
  407. that the application wishes to place on the listening socket.
  408. The optional argument
  409. .Fa af_arg
  410. can be passed to the accept
  411. filter specified by
  412. .Fa af_name
  413. to provide additional configuration options at attach time.
  414. Passing in an
  415. .Fa optval
  416. of NULL will remove the filter.
  417. .Pp
  418. The
  419. .Dv SO_NOSIGPIPE
  420. option controls generation of the
  421. .Dv SIGPIPE
  422. signal normally sent
  423. when writing to a connected socket where the other end has been
  424. closed returns with the error
  425. .Er EPIPE .
  426. .Pp
  427. If the
  428. .Dv SO_TIMESTAMP
  429. or
  430. .Dv SO_BINTIME
  431. option is enabled on a
  432. .Dv SOCK_DGRAM
  433. socket, the
  434. .Xr recvmsg 2
  435. call may return a timestamp corresponding to when the datagram was received.
  436. However, it may not, for example due to a resource shortage.
  437. The
  438. .Va msg_control
  439. field in the
  440. .Vt msghdr
  441. structure points to a buffer that contains a
  442. .Vt cmsghdr
  443. structure followed by a
  444. .Vt "struct timeval"
  445. for
  446. .Dv SO_TIMESTAMP
  447. and
  448. .Vt "struct bintime"
  449. for
  450. .Dv SO_BINTIME .
  451. The
  452. .Vt cmsghdr
  453. fields have the following values for TIMESTAMP by default:
  454. .Bd -literal
  455. cmsg_len = CMSG_LEN(sizeof(struct timeval));
  456. cmsg_level = SOL_SOCKET;
  457. cmsg_type = SCM_TIMESTAMP;
  458. .Ed
  459. .Pp
  460. and for
  461. .Dv SO_BINTIME :
  462. .Bd -literal
  463. cmsg_len = CMSG_LEN(sizeof(struct bintime));
  464. cmsg_level = SOL_SOCKET;
  465. cmsg_type = SCM_BINTIME;
  466. .Ed
  467. .Pp
  468. Additional timestamp types are available by following
  469. .Dv SO_TIMESTAMP
  470. with
  471. .Dv SO_TS_CLOCK ,
  472. which requests a specific timestamp format to be returned instead of
  473. .Dv SCM_TIMESTAMP when
  474. .Dv SO_TIMESTAMP is enabled.
  475. These
  476. .Dv SO_TS_CLOCK
  477. values are recognized in
  478. .Fx :
  479. .Bl -column SO_TS_CLOCK -offset indent
  480. .It Dv SO_TS_REALTIME_MICRO Ta "realtime (SCM_TIMESTAMP, struct timeval), default"
  481. .It Dv SO_TS_BINTIME Ta "realtime (SCM_BINTIME, struct bintime)"
  482. .It Dv SO_TS_REALTIME Ta "realtime (SCM_REALTIME, struct timespec)"
  483. .It Dv SO_TS_MONOTONIC Ta "monotonic time (SCM_MONOTONIC, struct timespec)"
  484. .El
  485. .Pp
  486. .Dv SO_ACCEPTCONN ,
  487. .Dv SO_TYPE ,
  488. .Dv SO_PROTOCOL
  489. (and its alias
  490. .Dv SO_PROTOTYPE )
  491. and
  492. .Dv SO_ERROR
  493. are options used only with
  494. .Fn getsockopt .
  495. .Dv SO_ACCEPTCONN
  496. returns whether the socket is currently accepting connections,
  497. that is, whether or not the
  498. .Xr listen 2
  499. system call was invoked on the socket.
  500. .Dv SO_TYPE
  501. returns the type of the socket, such as
  502. .Dv SOCK_STREAM ;
  503. it is useful for servers that inherit sockets on startup.
  504. .Dv SO_PROTOCOL
  505. returns the protocol number for the socket, for
  506. .Dv AF_INET
  507. and
  508. .Dv AF_INET6
  509. address families.
  510. .Dv SO_ERROR
  511. returns any pending error on the socket and clears
  512. the error status.
  513. It may be used to check for asynchronous errors on connected
  514. datagram sockets or for other asynchronous errors.
  515. .Dv SO_RERROR
  516. indicates that receive buffer overflows should be handled as errors.
  517. Historically receive buffer overflows have been ignored and programs
  518. could not tell if they missed messages or messages had been truncated
  519. because of overflows.
  520. Since programs historically do not expect to get receive overflow errors,
  521. this behavior is not the default.
  522. .Pp
  523. .Dv SO_LABEL
  524. returns the MAC label of the socket.
  525. .Dv SO_PEERLABEL
  526. returns the MAC label of the socket's peer.
  527. Note that your kernel must be compiled with MAC support.
  528. See
  529. .Xr mac 3
  530. for more information.
  531. .Pp
  532. .Dv SO_LISTENQLIMIT
  533. returns the maximal number of queued connections, as set by
  534. .Xr listen 2 .
  535. .Dv SO_LISTENQLEN
  536. returns the number of unaccepted complete connections.
  537. .Dv SO_LISTENINCQLEN
  538. returns the number of unaccepted incomplete connections.
  539. .Pp
  540. .Dv SO_MAX_PACING_RATE
  541. instruct the socket and underlying network adapter layers to limit the
  542. transfer rate to the given unsigned 32-bit value in bytes per second.
  543. .Pp
  544. .Dv SO_NO_OFFLOAD
  545. disables support for protocol offloads.
  546. At present, this prevents TCP sockets from using TCP offload engines.
  547. .Dv SO_NO_DDP
  548. disables support for a specific TCP offload known as direct data
  549. placement (DDP).
  550. DDP is an offload supported by Chelsio network adapters that permits
  551. reassembled TCP data streams to be received via zero-copy in
  552. user-supplied buffers using
  553. .Xr aio_read 2 .
  554. .Sh RETURN VALUES
  555. .Rv -std
  556. .Sh ERRORS
  557. The
  558. .Fn getsockopt
  559. and
  560. .Fn setsockopt
  561. system calls succeed unless:
  562. .Bl -tag -width Er
  563. .It Bq Er EBADF
  564. The argument
  565. .Fa s
  566. is not a valid descriptor.
  567. .It Bq Er ENOTSOCK
  568. The argument
  569. .Fa s
  570. is a file, not a socket.
  571. .It Bq Er ENOPROTOOPT
  572. The option is unknown at the level indicated.
  573. .It Bq Er EFAULT
  574. The address pointed to by
  575. .Fa optval
  576. is not in a valid part of the process address space.
  577. For
  578. .Fn getsockopt ,
  579. this error may also be returned if
  580. .Fa optlen
  581. is not in a valid part of the process address space.
  582. .It Bq Er EINVAL
  583. Installing an
  584. .Xr accept_filter 9
  585. on a non-listening socket was attempted.
  586. .It Bq Er ENOMEM
  587. A memory allocation failed that was required to service the request.
  588. .El
  589. .Pp
  590. The
  591. .Fn setsockopt
  592. system call may also return the following error:
  593. .Bl -tag -width Er
  594. .It Bq Er ENOBUFS
  595. Insufficient resources were available in the system
  596. to perform the operation.
  597. .El
  598. .Sh SEE ALSO
  599. .Xr ioctl 2 ,
  600. .Xr listen 2 ,
  601. .Xr recvmsg 2 ,
  602. .Xr socket 2 ,
  603. .Xr getprotoent 3 ,
  604. .Xr mac 3 ,
  605. .Xr sysctl 3 ,
  606. .Xr ip 4 ,
  607. .Xr ip6 4 ,
  608. .Xr sctp 4 ,
  609. .Xr tcp 4 ,
  610. .Xr protocols 5 ,
  611. .Xr sysctl 8 ,
  612. .Xr accept_filter 9 ,
  613. .Xr bintime 9
  614. .Sh HISTORY
  615. The
  616. .Fn getsockopt
  617. and
  618. .Fn setsockopt
  619. system calls appeared in
  620. .Bx 4.2 .
  621. .Sh BUGS
  622. Several of the socket options should be handled at lower levels of the system.