1SOCKET(7) Linux Programmer's Manual SOCKET(7)
2
3
4
6 socket - Linux socket interface
7
9 #include <sys/socket.h>
10
11 sockfd = socket(int socket_family, int socket_type, int protocol);
12
14 This manual page describes the Linux networking socket layer user
15 interface. The BSD compatible sockets are the uniform interface
16 between the user process and the network protocol stacks in the kernel.
17 The protocol modules are grouped into protocol families such as
18 AF_INET, AF_IPX, and AF_PACKET, and socket types such as SOCK_STREAM or
19 SOCK_DGRAM. See socket(2) for more information on families and types.
20
21 Socket-layer functions
22 These functions are used by the user process to send or receive packets
23 and to do other socket operations. For more information see their
24 respective manual pages.
25
26 socket(2) creates a socket, connect(2) connects a socket to a remote
27 socket address, the bind(2) function binds a socket to a local socket
28 address, listen(2) tells the socket that new connections shall be
29 accepted, and accept(2) is used to get a new socket with a new incoming
30 connection. socketpair(2) returns two connected anonymous sockets
31 (implemented only for a few local families like AF_UNIX)
32
33 send(2), sendto(2), and sendmsg(2) send data over a socket, and
34 recv(2), recvfrom(2), recvmsg(2) receive data from a socket. poll(2)
35 and select(2) wait for arriving data or a readiness to send data. In
36 addition, the standard I/O operations like write(2), writev(2), send‐
37 file(2), read(2), and readv(2) can be used to read and write data.
38
39 getsockname(2) returns the local socket address and getpeername(2)
40 returns the remote socket address. getsockopt(2) and setsockopt(2) are
41 used to set or get socket layer or protocol options. ioctl(2) can be
42 used to set or read some other options.
43
44 close(2) is used to close a socket. shutdown(2) closes parts of a
45 full-duplex socket connection.
46
47 Seeking, or calling pread(2) or pwrite(2) with a nonzero position is
48 not supported on sockets.
49
50 It is possible to do nonblocking I/O on sockets by setting the O_NON‐
51 BLOCK flag on a socket file descriptor using fcntl(2). Then all opera‐
52 tions that would block will (usually) return with EAGAIN (operation
53 should be retried later); connect(2) will return EINPROGRESS error.
54 The user can then wait for various events via poll(2) or select(2).
55
56 ┌────────────────────────────────────────────────────────────────────┐
57 │ I/O events │
58 ├───────────┬───────────┬────────────────────────────────────────────┤
59 │Event │ Poll flag │ Occurrence │
60 ├───────────┼───────────┼────────────────────────────────────────────┤
61 │Read │ POLLIN │ New data arrived. │
62 ├───────────┼───────────┼────────────────────────────────────────────┤
63 │Read │ POLLIN │ A connection setup has been completed (for │
64 │ │ │ connection-oriented sockets) │
65 ├───────────┼───────────┼────────────────────────────────────────────┤
66 │Read │ POLLHUP │ A disconnection request has been initiated │
67 │ │ │ by the other end. │
68 ├───────────┼───────────┼────────────────────────────────────────────┤
69 │Read │ POLLHUP │ A connection is broken (only for connec‐ │
70 │ │ │ tion-oriented protocols). When the socket │
71 │ │ │ is written SIGPIPE is also sent. │
72 ├───────────┼───────────┼────────────────────────────────────────────┤
73 │Write │ POLLOUT │ Socket has enough send buffer space for │
74 │ │ │ writing new data. │
75 ├───────────┼───────────┼────────────────────────────────────────────┤
76 │Read/Write │ POLLIN | │ An outgoing connect(2) finished. │
77 │ │ POLLOUT │ │
78 ├───────────┼───────────┼────────────────────────────────────────────┤
79 │Read/Write │ POLLERR │ An asynchronous error occurred. │
80 ├───────────┼───────────┼────────────────────────────────────────────┤
81 │Read/Write │ POLLHUP │ The other end has shut down one direction. │
82 ├───────────┼───────────┼────────────────────────────────────────────┤
83 │Exception │ POLLPRI │ Urgent data arrived. SIGURG is sent then. │
84 └───────────┴───────────┴────────────────────────────────────────────┘
85 An alternative to poll(2) and select(2) is to let the kernel inform the
86 application about events via a SIGIO signal. For that the O_ASYNC flag
87 must be set on a socket file descriptor via fcntl(2) and a valid signal
88 handler for SIGIO must be installed via sigaction(2). See the Signals
89 discussion below.
90
91 Socket address structures
92 Each socket domain has its own format for socket addresses, with a
93 domain-specific address structure. Each of these structures begins
94 with an integer "family" field (typed as sa_family_t) that indicates
95 the type of the address structure. This allows the various system
96 calls (e.g., connect(2), bind(2), accept(2), getsockname(2), getpeer‐
97 name(2)), which are generic to all socket domains, to determine the
98 domain of a particular socket address.
99
100 To allow any type of socket address to be passed to interfaces in the
101 sockets API, the type struct sockaddr is defined. The purpose of this
102 type is purely to allow casting of domain-specific socket address types
103 to a "generic" type, so as to avoid compiler warnings about type mis‐
104 matches in calls to the sockets API.
105
106 In addition, the sockets API provides the data type struct sock‐
107 addr_storage. This type is suitable to accommodate all supported
108 domain-specific socket address structures; it is large enough and is
109 aligned properly. (In particular, it is large enough to hold IPv6
110 socket addresses.) The structure includes the following field, which
111 can be used to identify the type of socket address actually stored in
112 the structure:
113
114 sa_family_t ss_family;
115
116 The sockaddr_storage structure is useful in programs that must handle
117 socket addresses in a generic way (e.g., programs that must deal with
118 both IPv4 and IPv6 socket addresses).
119
120 Socket options
121 The socket options listed below can be set by using setsockopt(2) and
122 read with getsockopt(2) with the socket level set to SOL_SOCKET for all
123 sockets. Unless otherwise noted, optval is a pointer to an int.
124
125 SO_ACCEPTCONN
126 Returns a value indicating whether or not this socket has been
127 marked to accept connections with listen(2). The value 0 indi‐
128 cates that this is not a listening socket, the value 1 indicates
129 that this is a listening socket. This socket option is read-
130 only.
131
132 SO_ATTACH_FILTER (since Linux 2.2), SO_ATTACH_BPF (since Linux 3.19)
133 Attach a classic BPF (SO_ATTACH_FILTER) or an extended BPF
134 (SO_ATTACH_BPF) program to the socket for use as a filter of
135 incoming packets. A packet will be dropped if the filter pro‐
136 gram returns zero. If the filter program returns a nonzero
137 value which is less than the packet's data length, the packet
138 will be truncated to the length returned. If the value returned
139 by the filter is greater than or equal to the packet's data
140 length, the packet is allowed to proceed unmodified.
141
142 The argument for SO_ATTACH_FILTER is a sock_fprog structure,
143 defined in <linux/filter.h>:
144
145 struct sock_fprog {
146 unsigned short len;
147 struct sock_filter *filter;
148 };
149
150 The argument for SO_ATTACH_BPF is a file descriptor returned by
151 the bpf(2) system call and must refer to a program of type
152 BPF_PROG_TYPE_SOCKET_FILTER.
153
154 These options may be set multiple times for a given socket, each
155 time replacing the previous filter program. The classic and
156 extended versions may be called on the same socket, but the pre‐
157 vious filter will always be replaced such that a socket never
158 has more than one filter defined.
159
160 Both classic and extended BPF are explained in the kernel source
161 file Documentation/networking/filter.txt
162
163 SO_ATTACH_REUSEPORT_CBPF, SO_ATTACH_REUSEPORT_EBPF
164 For use with the SO_REUSEPORT option, these options allow the
165 user to set a classic BPF (SO_ATTACH_REUSEPORT_CBPF) or an
166 extended BPF (SO_ATTACH_REUSEPORT_EBPF) program which defines
167 how packets are assigned to the sockets in the reuseport group
168 (that is, all sockets which have SO_REUSEPORT set and are using
169 the same local address to receive packets).
170
171 The BPF program must return an index between 0 and N-1 repre‐
172 senting the socket which should receive the packet (where N is
173 the number of sockets in the group). If the BPF program returns
174 an invalid index, socket selection will fall back to the plain
175 SO_REUSEPORT mechanism.
176
177 Sockets are numbered in the order in which they are added to the
178 group (that is, the order of bind(2) calls for UDP sockets or
179 the order of listen(2) calls for TCP sockets). New sockets
180 added to a reuseport group will inherit the BPF program. When a
181 socket is removed from a reuseport group (via close(2)), the
182 last socket in the group will be moved into the closed socket's
183 position.
184
185 These options may be set repeatedly at any time on any socket in
186 the group to replace the current BPF program used by all sockets
187 in the group.
188
189 SO_ATTACH_REUSEPORT_CBPF takes the same argument type as
190 SO_ATTACH_FILTER and SO_ATTACH_REUSEPORT_EBPF takes the same
191 argument type as SO_ATTACH_BPF.
192
193 UDP support for this feature is available since Linux 4.5; TCP
194 support is available since Linux 4.6.
195
196 SO_BINDTODEVICE
197 Bind this socket to a particular device like “eth0”, as speci‐
198 fied in the passed interface name. If the name is an empty
199 string or the option length is zero, the socket device binding
200 is removed. The passed option is a variable-length null-termi‐
201 nated interface name string with the maximum size of IFNAMSIZ.
202 If a socket is bound to an interface, only packets received from
203 that particular interface are processed by the socket. Note
204 that this works only for some socket types, particularly AF_INET
205 sockets. It is not supported for packet sockets (use normal
206 bind(2) there).
207
208 Before Linux 3.8, this socket option could be set, but could not
209 retrieved with getsockopt(2). Since Linux 3.8, it is readable.
210 The optlen argument should contain the buffer size available to
211 receive the device name and is recommended to be IFNAMSIZ bytes.
212 The real device name length is reported back in the optlen argu‐
213 ment.
214
215 SO_BROADCAST
216 Set or get the broadcast flag. When enabled, datagram sockets
217 are allowed to send packets to a broadcast address. This option
218 has no effect on stream-oriented sockets.
219
220 SO_BSDCOMPAT
221 Enable BSD bug-to-bug compatibility. This is used by the UDP
222 protocol module in Linux 2.0 and 2.2. If enabled, ICMP errors
223 received for a UDP socket will not be passed to the user pro‐
224 gram. In later kernel versions, support for this option has
225 been phased out: Linux 2.4 silently ignores it, and Linux 2.6
226 generates a kernel warning (printk()) if a program uses this
227 option. Linux 2.0 also enabled BSD bug-to-bug compatibility
228 options (random header changing, skipping of the broadcast flag)
229 for raw sockets with this option, but that was removed in Linux
230 2.2.
231
232 SO_DEBUG
233 Enable socket debugging. Allowed only for processes with the
234 CAP_NET_ADMIN capability or an effective user ID of 0.
235
236 SO_DETACH_FILTER (since Linux 2.2), SO_DETACH_BPF (since Linux 3.19)
237 These two options, which are synonyms, may be used to remove the
238 classic or extended BPF program attached to a socket with either
239 SO_ATTACH_FILTER or SO_ATTACH_BPF. The option value is ignored.
240
241 SO_DOMAIN (since Linux 2.6.32)
242 Retrieves the socket domain as an integer, returning a value
243 such as AF_INET6. See socket(2) for details. This socket
244 option is read-only.
245
246 SO_ERROR
247 Get and clear the pending socket error. This socket option is
248 read-only. Expects an integer.
249
250 SO_DONTROUTE
251 Don't send via a gateway, send only to directly connected hosts.
252 The same effect can be achieved by setting the MSG_DONTROUTE
253 flag on a socket send(2) operation. Expects an integer boolean
254 flag.
255
256 SO_INCOMING_CPU (gettable since Linux 3.19, settable since Linux 4.4)
257 Sets or gets the CPU affinity of a socket. Expects an integer
258 flag.
259
260 int cpu = 1;
261 setsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu, sizeof(cpu));
262
263 Because all of the packets for a single stream (i.e., all pack‐
264 ets for the same 4-tuple) arrive on the single RX queue that is
265 associated with a particular CPU, the typical use case is to
266 employ one listening process per RX queue, with the incoming
267 flow being handled by a listener on the same CPU that is han‐
268 dling the RX queue. This provides optimal NUMA behavior and
269 keeps CPU caches hot.
270
271 SO_KEEPALIVE
272 Enable sending of keep-alive messages on connection-oriented
273 sockets. Expects an integer boolean flag.
274
275 SO_LINGER
276 Sets or gets the SO_LINGER option. The argument is a linger
277 structure.
278
279 struct linger {
280 int l_onoff; /* linger active */
281 int l_linger; /* how many seconds to linger for */
282 };
283
284 When enabled, a close(2) or shutdown(2) will not return until
285 all queued messages for the socket have been successfully sent
286 or the linger timeout has been reached. Otherwise, the call
287 returns immediately and the closing is done in the background.
288 When the socket is closed as part of exit(2), it always lingers
289 in the background.
290
291 SO_LOCK_FILTER
292 When set, this option will prevent changing the filters associ‐
293 ated with the socket. These filters include any set using the
294 socket options SO_ATTACH_FILTER, SO_ATTACH_BPF, SO_ATTACH_REUSE‐
295 PORT_CBPF, and SO_ATTACH_REUSEPORT_EBPF.
296
297 The typical use case is for a privileged process to set up a raw
298 socket (an operation that requires the CAP_NET_RAW capability),
299 apply a restrictive filter, set the SO_LOCK_FILTER option, and
300 then either drop its privileges or pass the socket file descrip‐
301 tor to an unprivileged process via a UNIX domain socket.
302
303 Once the SO_LOCK_FILTER option has been enabled, attempts to
304 change or remove the filter attached to a socket, or to disable
305 the SO_LOCK_FILTER option will fail with the error EPERM.
306
307 SO_MARK (since Linux 2.6.25)
308 Set the mark for each packet sent through this socket (similar
309 to the netfilter MARK target but socket-based). Changing the
310 mark can be used for mark-based routing without netfilter or for
311 packet filtering. Setting this option requires the
312 CAP_NET_ADMIN capability.
313
314 SO_OOBINLINE
315 If this option is enabled, out-of-band data is directly placed
316 into the receive data stream. Otherwise, out-of-band data is
317 passed only when the MSG_OOB flag is set during receiving.
318
319 SO_PASSCRED
320 Enable or disable the receiving of the SCM_CREDENTIALS control
321 message. For more information see unix(7).
322
323 SO_PASSSEC
324 Enable or disable the receiving of the SCM_SECURITY control mes‐
325 sage. For more information see unix(7).
326
327 SO_PEEK_OFF (since Linux 3.4)
328 This option, which is currently supported only for unix(7) sock‐
329 ets, sets the value of the "peek offset" for the recv(2) system
330 call when used with MSG_PEEK flag.
331
332 When this option is set to a negative value (it is set to -1 for
333 all new sockets), traditional behavior is provided: recv(2) with
334 the MSG_PEEK flag will peek data from the front of the queue.
335
336 When the option is set to a value greater than or equal to zero,
337 then the next peek at data queued in the socket will occur at
338 the byte offset specified by the option value. At the same
339 time, the "peek offset" will be incremented by the number of
340 bytes that were peeked from the queue, so that a subsequent peek
341 will return the next data in the queue.
342
343 If data is removed from the front of the queue via a call to
344 recv(2) (or similar) without the MSG_PEEK flag, the "peek off‐
345 set" will be decreased by the number of bytes removed. In other
346 words, receiving data without the MSG_PEEK flag will cause the
347 "peek offset" to be adjusted to maintain the correct relative
348 position in the queued data, so that a subsequent peek will
349 retrieve the data that would have been retrieved had the data
350 not been removed.
351
352 For datagram sockets, if the "peek offset" points to the middle
353 of a packet, the data returned will be marked with the MSG_TRUNC
354 flag.
355
356 The following example serves to illustrate the use of
357 SO_PEEK_OFF. Suppose a stream socket has the following queued
358 input data:
359
360 aabbccddeeff
361
362 The following sequence of recv(2) calls would have the effect
363 noted in the comments:
364
365 int ov = 4; // Set peek offset to 4
366 setsockopt(fd, SOL_SOCKET, SO_PEEK_OFF, &ov, sizeof(ov));
367
368 recv(fd, buf, 2, MSG_PEEK); // Peeks "cc"; offset set to 6
369 recv(fd, buf, 2, MSG_PEEK); // Peeks "dd"; offset set to 8
370 recv(fd, buf, 2, 0); // Reads "aa"; offset set to 6
371 recv(fd, buf, 2, MSG_PEEK); // Peeks "ee"; offset set to 8
372
373 SO_PEERCRED
374 Return the credentials of the peer process connected to this
375 socket. For further details, see unix(7).
376
377 SO_PRIORITY
378 Set the protocol-defined priority for all packets to be sent on
379 this socket. Linux uses this value to order the networking
380 queues: packets with a higher priority may be processed first
381 depending on the selected device queueing discipline. Setting a
382 priority outside the range 0 to 6 requires the CAP_NET_ADMIN
383 capability.
384
385 SO_PROTOCOL (since Linux 2.6.32)
386 Retrieves the socket protocol as an integer, returning a value
387 such as IPPROTO_SCTP. See socket(2) for details. This socket
388 option is read-only.
389
390 SO_RCVBUF
391 Sets or gets the maximum socket receive buffer in bytes. The
392 kernel doubles this value (to allow space for bookkeeping over‐
393 head) when it is set using setsockopt(2), and this doubled value
394 is returned by getsockopt(2). The default value is set by the
395 /proc/sys/net/core/rmem_default file, and the maximum allowed
396 value is set by the /proc/sys/net/core/rmem_max file. The mini‐
397 mum (doubled) value for this option is 256.
398
399 SO_RCVBUFFORCE (since Linux 2.6.14)
400 Using this socket option, a privileged (CAP_NET_ADMIN) process
401 can perform the same task as SO_RCVBUF, but the rmem_max limit
402 can be overridden.
403
404 SO_RCVLOWAT and SO_SNDLOWAT
405 Specify the minimum number of bytes in the buffer until the
406 socket layer will pass the data to the protocol (SO_SNDLOWAT) or
407 the user on receiving (SO_RCVLOWAT). These two values are ini‐
408 tialized to 1. SO_SNDLOWAT is not changeable on Linux (setsock‐
409 opt(2) fails with the error ENOPROTOOPT). SO_RCVLOWAT is
410 changeable only since Linux 2.4.
411
412 Before Linux 2.6.28 select(2), poll(2), and epoll(7) did not
413 respect the SO_RCVLOWAT setting on Linux, and indicated a socket
414 as readable when even a single byte of data was available. A
415 subsequent read from the socket would then block until
416 SO_RCVLOWAT bytes are available.
417
418 SO_RCVTIMEO and SO_SNDTIMEO
419 Specify the receiving or sending timeouts until reporting an
420 error. The argument is a struct timeval. If an input or output
421 function blocks for this period of time, and data has been sent
422 or received, the return value of that function will be the
423 amount of data transferred; if no data has been transferred and
424 the timeout has been reached, then -1 is returned with errno set
425 to EAGAIN or EWOULDBLOCK, or EINPROGRESS (for connect(2)) just
426 as if the socket was specified to be nonblocking. If the time‐
427 out is set to zero (the default), then the operation will never
428 timeout. Timeouts only have effect for system calls that per‐
429 form socket I/O (e.g., read(2), recvmsg(2), send(2),
430 sendmsg(2)); timeouts have no effect for select(2), poll(2),
431 epoll_wait(2), and so on.
432
433 SO_REUSEADDR
434 Indicates that the rules used in validating addresses supplied
435 in a bind(2) call should allow reuse of local addresses. For
436 AF_INET sockets this means that a socket may bind, except when
437 there is an active listening socket bound to the address. When
438 the listening socket is bound to INADDR_ANY with a specific port
439 then it is not possible to bind to this port for any local
440 address. Argument is an integer boolean flag.
441
442 SO_REUSEPORT (since Linux 3.9)
443 Permits multiple AF_INET or AF_INET6 sockets to be bound to an
444 identical socket address. This option must be set on each
445 socket (including the first socket) prior to calling bind(2) on
446 the socket. To prevent port hijacking, all of the processes
447 binding to the same address must have the same effective UID.
448 This option can be employed with both TCP and UDP sockets.
449
450 For TCP sockets, this option allows accept(2) load distribution
451 in a multi-threaded server to be improved by using a distinct
452 listener socket for each thread. This provides improved load
453 distribution as compared to traditional techniques such using a
454 single accept(2)ing thread that distributes connections, or hav‐
455 ing multiple threads that compete to accept(2) from the same
456 socket.
457
458 For UDP sockets, the use of this option can provide better dis‐
459 tribution of incoming datagrams to multiple processes (or
460 threads) as compared to the traditional technique of having mul‐
461 tiple processes compete to receive datagrams on the same socket.
462
463 SO_RXQ_OVFL (since Linux 2.6.33)
464 Indicates that an unsigned 32-bit value ancillary message (cmsg)
465 should be attached to received skbs indicating the number of
466 packets dropped by the socket since its creation.
467
468 SO_SNDBUF
469 Sets or gets the maximum socket send buffer in bytes. The ker‐
470 nel doubles this value (to allow space for bookkeeping overhead)
471 when it is set using setsockopt(2), and this doubled value is
472 returned by getsockopt(2). The default value is set by the
473 /proc/sys/net/core/wmem_default file and the maximum allowed
474 value is set by the /proc/sys/net/core/wmem_max file. The mini‐
475 mum (doubled) value for this option is 2048.
476
477 SO_SNDBUFFORCE (since Linux 2.6.14)
478 Using this socket option, a privileged (CAP_NET_ADMIN) process
479 can perform the same task as SO_SNDBUF, but the wmem_max limit
480 can be overridden.
481
482 SO_TIMESTAMP
483 Enable or disable the receiving of the SO_TIMESTAMP control mes‐
484 sage. The timestamp control message is sent with level
485 SOL_SOCKET and the cmsg_data field is a struct timeval indicat‐
486 ing the reception time of the last packet passed to the user in
487 this call. See cmsg(3) for details on control messages.
488
489 SO_TYPE
490 Gets the socket type as an integer (e.g., SOCK_STREAM). This
491 socket option is read-only.
492
493 SO_BUSY_POLL (since Linux 3.11)
494 Sets the approximate time in microseconds to busy poll on a
495 blocking receive when there is no data. Increasing this value
496 requires CAP_NET_ADMIN. The default for this option is con‐
497 trolled by the /proc/sys/net/core/busy_read file.
498
499 The value in the /proc/sys/net/core/busy_poll file determines
500 how long select(2) and poll(2) will busy poll when they operate
501 on sockets with SO_BUSY_POLL set and no events to report are
502 found.
503
504 In both cases, busy polling will only be done when the socket
505 last received data from a network device that supports this
506 option.
507
508 While busy polling may improve latency of some applications,
509 care must be taken when using it since this will increase both
510 CPU utilization and power usage.
511
512 Signals
513 When writing onto a connection-oriented socket that has been shut down
514 (by the local or the remote end) SIGPIPE is sent to the writing process
515 and EPIPE is returned. The signal is not sent when the write call
516 specified the MSG_NOSIGNAL flag.
517
518 When requested with the FIOSETOWN fcntl(2) or SIOCSPGRP ioctl(2), SIGIO
519 is sent when an I/O event occurs. It is possible to use poll(2) or
520 select(2) in the signal handler to find out which socket the event
521 occurred on. An alternative (in Linux 2.2) is to set a real-time sig‐
522 nal using the F_SETSIG fcntl(2); the handler of the real time signal
523 will be called with the file descriptor in the si_fd field of its sig‐
524 info_t. See fcntl(2) for more information.
525
526 Under some circumstances (e.g., multiple processes accessing a single
527 socket), the condition that caused the SIGIO may have already disap‐
528 peared when the process reacts to the signal. If this happens, the
529 process should wait again because Linux will resend the signal later.
530
531 /proc interfaces
532 The core socket networking parameters can be accessed via files in the
533 directory /proc/sys/net/core/.
534
535 rmem_default
536 contains the default setting in bytes of the socket receive buf‐
537 fer.
538
539 rmem_max
540 contains the maximum socket receive buffer size in bytes which a
541 user may set by using the SO_RCVBUF socket option.
542
543 wmem_default
544 contains the default setting in bytes of the socket send buffer.
545
546 wmem_max
547 contains the maximum socket send buffer size in bytes which a
548 user may set by using the SO_SNDBUF socket option.
549
550 message_cost and message_burst
551 configure the token bucket filter used to load limit warning
552 messages caused by external network events.
553
554 netdev_max_backlog
555 Maximum number of packets in the global input queue.
556
557 optmem_max
558 Maximum length of ancillary data and user control data like the
559 iovecs per socket.
560
561 Ioctls
562 These operations can be accessed using ioctl(2):
563
564 error = ioctl(ip_socket, ioctl_type, &value_result);
565
566 SIOCGSTAMP
567 Return a struct timeval with the receive timestamp of the last
568 packet passed to the user. This is useful for accurate round
569 trip time measurements. See setitimer(2) for a description of
570 struct timeval. This ioctl should be used only if the socket
571 option SO_TIMESTAMP is not set on the socket. Otherwise, it
572 returns the timestamp of the last packet that was received while
573 SO_TIMESTAMP was not set, or it fails if no such packet has been
574 received, (i.e., ioctl(2) returns -1 with errno set to ENOENT).
575
576 SIOCSPGRP
577 Set the process or process group that is to receive SIGIO or
578 SIGURG signals when I/O becomes possible or urgent data is
579 available. The argument is a pointer to a pid_t. For further
580 details, see the description of F_SETOWN in fcntl(2).
581
582 FIOASYNC
583 Change the O_ASYNC flag to enable or disable asynchronous I/O
584 mode of the socket. Asynchronous I/O mode means that the SIGIO
585 signal or the signal set with F_SETSIG is raised when a new I/O
586 event occurs.
587
588 Argument is an integer boolean flag. (This operation is synony‐
589 mous with the use of fcntl(2) to set the O_ASYNC flag.)
590
591 SIOCGPGRP
592 Get the current process or process group that receives SIGIO or
593 SIGURG signals, or 0 when none is set.
594
595 Valid fcntl(2) operations:
596
597 FIOGETOWN
598 The same as the SIOCGPGRP ioctl(2).
599
600 FIOSETOWN
601 The same as the SIOCSPGRP ioctl(2).
602
604 SO_BINDTODEVICE was introduced in Linux 2.0.30. SO_PASSCRED is new in
605 Linux 2.2. The /proc interfaces were introduced in Linux 2.2. SO_RCV‐
606 TIMEO and SO_SNDTIMEO are supported since Linux 2.3.41. Earlier, time‐
607 outs were fixed to a protocol-specific setting, and could not be read
608 or written.
609
611 Linux assumes that half of the send/receive buffer is used for internal
612 kernel structures; thus the values in the corresponding /proc files are
613 twice what can be observed on the wire.
614
615 Linux will allow port reuse only with the SO_REUSEADDR option when this
616 option was set both in the previous program that performed a bind(2) to
617 the port and in the program that wants to reuse the port. This differs
618 from some implementations (e.g., FreeBSD) where only the later program
619 needs to set the SO_REUSEADDR option. Typically this difference is
620 invisible, since, for example, a server program is designed to always
621 set this option.
622
624 wireshark(1), bpf(2), connect(2), getsockopt(2), setsockopt(2),
625 socket(2), pcap(3), address_families(7), capabilities(7), ddp(7),
626 ip(7), packet(7), tcp(7), udp(7), unix(7), tcpdump(8)
627
629 This page is part of release 5.04 of the Linux man-pages project. A
630 description of the project, information about reporting bugs, and the
631 latest version of this page, can be found at
632 https://www.kernel.org/doc/man-pages/.
633
634
635
636Linux 2019-08-02 SOCKET(7)