1SOCKET(7)                  Linux Programmer's Manual                 SOCKET(7)
2
3
4

NAME

6       socket - Linux socket interface
7

SYNOPSIS

9       #include <sys/socket.h>
10
11       sockfd = socket(int socket_family, int socket_type, int protocol);
12

DESCRIPTION

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  like  AF_INET,
18       AF_IPX, AF_PACKET and socket types like SOCK_STREAM or SOCK_DGRAM.  See
19       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       (only implemented 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 non-zero position is
48       not supported on sockets.
49
50       It is possible to do non-blocking 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
86       An alternative to poll(2) and select(2) is to let the kernel inform the
87       application about events via a SIGIO signal.  For that the O_ASYNC flag
88       must be set on a socket file descriptor via fcntl(2) and a valid signal
89       handler for SIGIO must be installed via sigaction(2).  See the  Signals
90       discussion below.
91
92   Socket Options
93       These  socket  options  can be set by using setsockopt(2) and read with
94       getsockopt(2) with the socket level set to SOL_SOCKET for all sockets:
95
96       SO_ACCEPTCONN
97              Returns a value indicating whether or not this socket  has  been
98              marked  to accept connections with listen(2).  The value 0 indi‐
99              cates that this is not a listening socket, the value 1 indicates
100              that this is a listening socket.  Can only be read with getsock‐
101              opt(2).
102
103       SO_BINDTODEVICE
104              Bind this socket to a particular device like “eth0”,  as  speci‐
105              fied  in  the  passed  interface  name.  If the name is an empty
106              string or the option length is zero, the socket  device  binding
107              is  removed.  The passed option is a variable-length null-termi‐
108              nated interface name string with the maximum size  of  IFNAMSIZ.
109              If a socket is bound to an interface, only packets received from
110              that particular interface are processed  by  the  socket.   Note
111              that this only works for some socket types, particularly AF_INET
112              sockets.  It is not supported for  packet  sockets  (use  normal
113              bind(8) there).
114
115       SO_BROADCAST
116              Set  or  get the broadcast flag.  When enabled, datagram sockets
117              receive packets sent to a broadcast address and they are allowed
118              to  send  packets  to  a  broadcast address.  This option has no
119              effect on stream-oriented sockets.
120
121       SO_BSDCOMPAT
122              Enable BSD bug-to-bug compatibility.  This is used  by  the  UDP
123              protocol  module  in  Linux 2.0 and 2.2.  If enabled ICMP errors
124              received for a UDP socket will not be passed to  the  user  pro‐
125              gram.   In  later  kernel  versions, support for this option has
126              been phased out: Linux 2.4 silently ignores it,  and  Linux  2.6
127              generates  a  kernel  warning  (printk()) if a program uses this
128              option.  Linux 2.0 also  enabled  BSD  bug-to-bug  compatibility
129              options (random header changing, skipping of the broadcast flag)
130              for raw sockets with this option, but that was removed in  Linux
131              2.2.
132
133       SO_DEBUG
134              Enable  socket  debugging.   Only allowed for processes with the
135              CAP_NET_ADMIN capability or an effective user ID of 0.
136
137       SO_ERROR
138              Get and clear the pending socket error.  Only valid  as  a  get‐
139              sockopt(2).  Expects an integer.
140
141       SO_DONTROUTE
142              Don't send via a gateway, only send to directly connected hosts.
143              The same effect can be achieved  by  setting  the  MSG_DONTROUTE
144              flag  on a socket send(2) operation.  Expects an integer boolean
145              flag.
146
147       SO_KEEPALIVE
148              Enable sending of  keep-alive  messages  on  connection-oriented
149              sockets.  Expects an integer boolean flag.
150
151       SO_LINGER
152              Sets  or  gets  the  SO_LINGER option.  The argument is a linger
153              structure.
154
155                  struct linger {
156                      int l_onoff;    /* linger active */
157                      int l_linger;   /* how many seconds to linger for */
158                  };
159
160              When enabled, a close(2) or shutdown(2) will  not  return  until
161              all  queued  messages for the socket have been successfully sent
162              or the linger timeout has been  reached.   Otherwise,  the  call
163              returns  immediately  and the closing is done in the background.
164              When the socket is closed as part of exit(2), it always  lingers
165              in the background.
166
167       SO_OOBINLINE
168              If  this  option is enabled, out-of-band data is directly placed
169              into the receive data stream.   Otherwise  out-of-band  data  is
170              only passed when the MSG_OOB flag is set during receiving.
171
172       SO_PASSCRED
173              Enable  or  disable the receiving of the SCM_CREDENTIALS control
174              message.  For more information see unix(7).
175
176       SO_PEERCRED
177              Return the credentials of the foreign process connected to  this
178              socket.   This  is  only  possible  for connected AF_UNIX stream
179              sockets and AF_UNIX stream and  datagram  socket  pairs  created
180              using  socketpair(2); see unix(7).  The returned credentials are
181              those that were in effect at the time of the call to  connect(2)
182              or socketpair(2).  Argument is a ucred structure.  Only valid as
183              a getsockopt(2).
184
185       SO_PRIORITY
186              Set the protocol-defined priority for all packets to be sent  on
187              this  socket.   Linux  uses  this  value to order the networking
188              queues: packets with a higher priority may  be  processed  first
189              depending  on  the  selected  device  queueing  discipline.  For
190              ip(7), this also sets the IP  type-of-service  (TOS)  field  for
191              outgoing  packets.   Setting a priority outside the range 0 to 6
192              requires the CAP_NET_ADMIN capability.
193
194       SO_RCVBUF
195              Sets or gets the maximum socket receive buffer  in  bytes.   The
196              kernel  doubles this value (to allow space for bookkeeping over‐
197              head) when it is set using setsockopt(2), and this doubled value
198              is  returned  by getsockopt(2).  The default value is set by the
199              /proc/sys/net/core/rmem_default file, and  the  maximum  allowed
200              value is set by the /proc/sys/net/core/rmem_max file.  The mini‐
201              mum (doubled) value for this option is 256.
202
203       SO_RCVBUFFORCE (since Linux 2.6.14)
204              Using this socket option, a privileged  (CAP_NET_ADMIN)  process
205              can  perform  the same task as SO_RCVBUF, but the rmem_max limit
206              can be overridden.
207
208       SO_RCVLOWAT and SO_SNDLOWAT
209              Specify the minimum number of bytes  in  the  buffer  until  the
210              socket layer will pass the data to the protocol (SO_SNDLOWAT) or
211              the user on receiving (SO_RCVLOWAT).  These two values are  ini‐
212              tialized to 1.  SO_SNDLOWAT is not changeable on Linux (setsock‐
213              opt(2)  fails  with  the  error  ENOPROTOOPT).   SO_RCVLOWAT  is
214              changeable only since Linux 2.4.  The select(2) and poll(2) sys‐
215              tem calls currently do not respect the  SO_RCVLOWAT  setting  on
216              Linux,  and  mark  a  socket readable when even a single byte of
217              data is available.  A subsequent read from the socket will block
218              until SO_RCVLOWAT bytes are available.
219
220       SO_RCVTIMEO and SO_SNDTIMEO
221              Specify  the  receiving  or  sending timeouts until reporting an
222              error.  The argument is a struct timeval.  If an input or output
223              function  blocks for this period of time, and data has been sent
224              or received, the return value  of  that  function  will  be  the
225              amount  of data transferred; if no data has been transferred and
226              the timeout has been reached then -1 is returned with errno  set
227              to  EAGAIN or EWOULDBLOCK just as if the socket was specified to
228              be non-blocking.  If the timeout is set to  zero  (the  default)
229              then  the  operation  will  never  timeout.   Timeouts only have
230              effect for system calls that perform socket I/O (e.g.,  read(2),
231              recvmsg(2),  send(2),  sendmsg(2));  timeouts have no effect for
232              select(2), poll(2), epoll_wait(2), etc.
233
234       SO_REUSEADDR
235              Indicates that the rules used in validating  addresses  supplied
236              in  a  bind(2)  call should allow reuse of local addresses.  For
237              AF_INET sockets this means that a socket may bind,  except  when
238              there  is an active listening socket bound to the address.  When
239              the listening socket is bound to INADDR_ANY with a specific port
240              then  it  is  not  possible  to  bind to this port for any local
241              address.  Argument is an integer boolean flag.
242
243       SO_SNDBUF
244              Sets or gets the maximum socket send buffer in bytes.  The  ker‐
245              nel doubles this value (to allow space for bookkeeping overhead)
246              when it is set using setsockopt(2), and this  doubled  value  is
247              returned  by  getsockopt(2).   The  default  value is set by the
248              /proc/sys/net/core/wmem_default file  and  the  maximum  allowed
249              value is set by the /proc/sys/net/core/wmem_max file.  The mini‐
250              mum (doubled) value for this option is 2048.
251
252       SO_SNDBUFFORCE (since Linux 2.6.14)
253              Using this socket option, a privileged  (CAP_NET_ADMIN)  process
254              can  perform  the same task as SO_SNDBUF, but the wmem_max limit
255              can be overridden.
256
257       SO_TIMESTAMP
258              Enable or disable the receiving of the SO_TIMESTAMP control mes‐
259              sage.    The  timestamp  control  message  is  sent  with  level
260              SOL_SOCKET and the cmsg_data field is a struct timeval  indicat‐
261              ing  the reception time of the last packet passed to the user in
262              this call.  See cmsg(3) for details on control messages.
263
264       SO_TYPE
265              Gets the socket type as an integer (like SOCK_STREAM).  Can only
266              be read with getsockopt(2).
267
268   Signals
269       When  writing onto a connection-oriented socket that has been shut down
270       (by the local or the remote end) SIGPIPE is sent to the writing process
271       and  EPIPE  is  returned.   The  signal is not sent when the write call
272       specified the MSG_NOSIGNAL flag.
273
274       When requested with the FIOSETOWN fcntl(2) or SIOCSPGRP ioctl(2), SIGIO
275       is  sent  when  an  I/O event occurs.  It is possible to use poll(2) or
276       select(2) in the signal handler to find  out  which  socket  the  event
277       occurred  on.  An alternative (in Linux 2.2) is to set a real-time sig‐
278       nal using the F_SETSIG fcntl(2); the handler of the  real  time  signal
279       will  be called with the file descriptor in the si_fd field of its sig‐
280       info_t.  See fcntl(2) for more information.
281
282       Under some circumstances (e.g., multiple processes accessing  a  single
283       socket),  the  condition  that caused the SIGIO may have already disap‐
284       peared when the process reacts to the signal.   If  this  happens,  the
285       process should wait again because Linux will resend the signal later.
286
287   /proc interfaces
288       The  core socket networking parameters can be accessed via files in the
289       directory /proc/sys/net/core/.
290
291       rmem_default
292              contains the default setting in bytes of the socket receive buf‐
293              fer.
294
295       rmem_max
296              contains the maximum socket receive buffer size in bytes which a
297              user may set by using the SO_RCVBUF socket option.
298
299       wmem_default
300              contains the default setting in bytes of the socket send buffer.
301
302       wmem_max
303              contains the maximum socket send buffer size in  bytes  which  a
304              user may set by using the SO_SNDBUF socket option.
305
306       message_cost and message_burst
307              configure  the  token  bucket  filter used to load limit warning
308              messages caused by external network events.
309
310       netdev_max_backlog
311              Maximum number of packets in the global input queue.
312
313       optmem_max
314              Maximum length of ancillary data and user control data like  the
315              iovecs per socket.
316
317   Ioctls
318       These operations can be accessed using ioctl(2):
319
320           error = ioctl(ip_socket, ioctl_type, &value_result);
321
322       SIOCGSTAMP
323              Return  a  struct timeval with the receive timestamp of the last
324              packet passed to the user.  This is useful  for  accurate  round
325              trip  time  measurements.  See setitimer(2) for a description of
326              struct timeval.  This ioctl should only be used  if  the  socket
327              option  SO_TIMESTAMP  is  not  set on the socket.  Otherwise, it
328              returns the timestamp of the last packet that was received while
329              SO_TIMESTAMP was not set, or it fails if no such packet has been
330              received, (i.e., ioctl(2) returns -1 with errno set to ENOENT).
331
332       SIOCSPGRP
333              Set the process or process group to send SIGIO or SIGURG signals
334              to  when  an  asynchronous  I/O operation has finished or urgent
335              data is available.  The argument is a pointer to  a  pid_t.   If
336              the  argument is positive, send the signals to that process.  If
337              the argument is negative, send the signals to the process  group
338              with  the ID of the absolute value of the argument.  The process
339              may only choose itself or its own process group to receive  sig‐
340              nals  unless  it has the CAP_KILL capability or an effective UID
341              of 0.
342
343       FIOASYNC
344              Change the O_ASYNC flag to enable or  disable  asynchronous  I/O
345              mode  of the socket.  Asynchronous I/O mode means that the SIGIO
346              signal or the signal set with F_SETSIG is raised when a new  I/O
347              event occurs.
348
349              Argument is an integer boolean flag.  (This operation is synony‐
350              mous with the use of fcntl(2) to set the O_ASYNC flag.)
351
352       SIOCGPGRP
353              Get the current process or process group that receives SIGIO  or
354              SIGURG signals, or 0 when none is set.
355
356       Valid fcntl(2) operations:
357
358       FIOGETOWN
359              The same as the SIOCGPGRP ioctl(2).
360
361       FIOSETOWN
362              The same as the SIOCSPGRP ioctl(2).
363

VERSIONS

365       SO_BINDTODEVICE  was introduced in Linux 2.0.30.  SO_PASSCRED is new in
366       Linux 2.2.  The /proc interfaces was introduced in Linux 2.2.   SO_RCV‐
367       TIMEO and SO_SNDTIMEO are supported since Linux 2.3.41.  Earlier, time‐
368       outs were fixed to a protocol-specific setting, and could not  be  read
369       or written.
370

NOTES

372       Linux assumes that half of the send/receive buffer is used for internal
373       kernel structures; thus the values in the corresponding /proc files are
374       twice what can be observed on the wire.
375
376       Linux  will  only  allow  port re-use with the SO_REUSEADDR option when
377       this option was set both in  the  previous  program  that  performed  a
378       bind(2)  to  the port and in the program that wants to re-use the port.
379       This differs from some implementations (e.g., FreeBSD) where  only  the
380       later  program  needs  to  set the SO_REUSEADDR option.  Typically this
381       difference is invisible,  since,  for  example,  a  server  program  is
382       designed to always set this option.
383

BUGS

385       The  CONFIG_FILTER socket options SO_ATTACH_FILTER and SO_DETACH_FILTER
386       are not documented.  The suggested interface to use  them  is  via  the
387       libpcap library.
388

SEE ALSO

390       getsockopt(2),   setsockopt(2),   socket(2),  capabilities(7),  ddp(7),
391       ip(7), packet(7), tcp(7), udp(7), unix(7)
392

COLOPHON

394       This page is part of release 3.22 of the Linux  man-pages  project.   A
395       description  of  the project, and information about reporting bugs, can
396       be found at http://www.kernel.org/doc/man-pages/.
397
398
399
400Linux                             2008-12-03                         SOCKET(7)
Impressum