]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man7/unix.7
pldd.1, bpf.2, chdir.2, clone.2, fanotify_init.2, fanotify_mark.2, intro.2, ipc.2...
[thirdparty/man-pages.git] / man7 / unix.7
CommitLineData
15545eb6
HS
1.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>,
2.\" Copyright (C) 2008-2014, Michael Kerrisk <mtk.manpages@gmail.com>,
3.\" and Copyright (C) 2016, Heinrich Schuchardt <xypron.glpk@gmx.de>
2297bf0e 4.\"
00acdba1 5.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
77117f4f
MK
6.\" Permission is granted to distribute possibly modified copies
7.\" of this page provided the header is included verbatim,
8.\" and in case of nontrivial modification author and date
9.\" of the modification is added to the header.
8ff7380d 10.\" %%%LICENSE_END
77117f4f
MK
11.\"
12.\" Modified, 2003-12-02, Michael Kerrisk, <mtk.manpages@gmail.com>
13.\" Modified, 2003-09-23, Adam Langley
14.\" Modified, 2004-05-27, Michael Kerrisk, <mtk.manpages@gmail.com>
15.\" Added SOCK_SEQPACKET
16.\" 2008-05-27, mtk, Provide a clear description of the three types of
17.\" address that can appear in the sockaddr_un structure: pathname,
18.\" unnamed, and abstract.
19.\"
63121bd4 20.TH UNIX 7 2019-08-02 "Linux" "Linux Programmer's Manual"
77117f4f 21.SH NAME
f68512e9 22unix \- sockets for local interprocess communication
77117f4f
MK
23.SH SYNOPSIS
24.B #include <sys/socket.h>
25.br
26.B #include <sys/un.h>
f90f031e 27.PP
d4c8c97c 28.IB unix_socket " = socket(AF_UNIX, type, 0);"
77117f4f 29.br
d4c8c97c 30.IB error " = socketpair(AF_UNIX, type, 0, int *" sv ");"
77117f4f
MK
31.SH DESCRIPTION
32The
d4c8c97c 33.B AF_UNIX
77117f4f 34(also known as
d4c8c97c 35.BR AF_LOCAL )
77117f4f
MK
36socket family is used to communicate between processes on the same machine
37efficiently.
4891f52a 38Traditionally, UNIX domain sockets can be either unnamed,
9ee4a2b6 39or bound to a filesystem pathname (marked as being of type socket).
77117f4f 40Linux also supports an abstract namespace which is independent of the
9ee4a2b6 41filesystem.
5711c04f 42.PP
d02879f7 43Valid socket types in the UNIX domain are:
77117f4f 44.BR SOCK_STREAM ,
d02879f7 45for a stream-oriented socket;
77117f4f
MK
46.BR SOCK_DGRAM ,
47for a datagram-oriented socket that preserves message boundaries
008f1ecc 48(as on most UNIX implementations, UNIX domain datagram
77117f4f
MK
49sockets are always reliable and don't reorder datagrams);
50and (since Linux 2.6.4)
51.BR SOCK_SEQPACKET ,
0d7e8d59
MK
52for a sequenced-packet socket that is connection-oriented,
53preserves message boundaries,
77117f4f 54and delivers messages in the order that they were sent.
5711c04f 55.PP
4891f52a 56UNIX domain sockets support passing file descriptors or process credentials
77117f4f 57to other processes using ancillary data.
c634028a 58.SS Address format
008f1ecc 59A UNIX domain socket address is represented in the following structure:
e646a1ba 60.PP
77117f4f 61.in +4n
e646a1ba 62.EX
63bc262c 63.\" #define UNIX_PATH_MAX 108
5ffdc2fd 64.\"
77117f4f
MK
65struct sockaddr_un {
66 sa_family_t sun_family; /* AF_UNIX */
b65f4c69 67 char sun_path[108]; /* Pathname */
77117f4f 68};
b8302363 69.EE
77117f4f
MK
70.in
71.PP
d02879f7 72The
77117f4f 73.I sun_family
d02879f7 74field always contains
77117f4f 75.BR AF_UNIX .
05bf3361 76On Linux,
840aa3c7
MK
77.I sun_path
78is 108 bytes in size; see also NOTES, below.
5711c04f 79.PP
d02879f7
MK
80Various systems calls (for example,
81.BR bind (2),
82.BR connect (2),
83and
84.BR sendto (2))
85take a
b8017cf5 86.I sockaddr_un
d02879f7
MK
87argument as input.
88Some other system calls (for example,
89.BR getsockname (2),
90.BR getpeername (2),
91.BR recvfrom (2),
92and
93.BR accept (2))
94return an argument of this type.
5711c04f 95.PP
d02879f7
MK
96Three types of address are distinguished in the
97.I sockaddr_un
98structure:
77117f4f
MK
99.IP * 3
100.IR pathname :
1c7b2458
MK
101a UNIX domain socket can be bound to a null-terminated
102filesystem pathname using
77117f4f 103.BR bind (2).
d02879f7
MK
104When the address of a pathname socket is returned
105(by one of the system calls noted above),
77117f4f 106its length is
5711c04f 107.IP
6cd06646 108 offsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1
5711c04f 109.IP
77117f4f
MK
110and
111.I sun_path
112contains the null-terminated pathname.
d02879f7
MK
113(On Linux, the above
114.BR offsetof ()
115expression equates to the same value as
116.IR sizeof(sa_family_t) ,
117but some other implementations include other fields before
118.IR sun_path ,
119so the
120.BR offsetof ()
121expression more portably describes the size of the address structure.)
122.IP
123For further details of pathname sockets, see below.
77117f4f
MK
124.IP *
125.IR unnamed :
126A stream socket that has not been bound to a pathname using
127.BR bind (2)
128has no name.
129Likewise, the two sockets created by
130.BR socketpair (2)
131are unnamed.
d02879f7 132When the address of an unnamed socket is returned,
77117f4f
MK
133its length is
134.IR "sizeof(sa_family_t)" ,
135and
136.I sun_path
137should not be inspected.
138.\" There is quite some variation across implementations: FreeBSD
139.\" says the length is 16 bytes, HP-UX 11 says it's zero bytes.
140.IP *
141.IR abstract :
d02879f7
MK
142an abstract socket address is distinguished (from a pathname socket)
143by the fact that
77117f4f 144.IR sun_path[0]
d1a71985 145is a null byte (\(aq\e0\(aq).
156a0e0d
MK
146The socket's address in this namespace is given by the additional
147bytes in
148.IR sun_path
149that are covered by the specified length of the address structure.
77117f4f 150(Null bytes in the name have no special significance.)
9ee4a2b6 151The name has no connection with filesystem pathnames.
d02879f7 152When the address of an abstract socket is returned,
156a0e0d
MK
153the returned
154.I addrlen
155is greater than
156.IR "sizeof(sa_family_t)"
157(i.e., greater than 2), and the name of the socket is contained in
158the first
159.IR "(addrlen \- sizeof(sa_family_t))"
160bytes of
161.IR sun_path .
d02879f7
MK
162.SS Pathname sockets
163When binding a socket to a pathname, a few rules should be observed
164for maximum portability and ease of coding:
165.IP * 3
166The pathname in
167.I sun_path
168should be null-terminated.
169.IP *
170The length of the pathname, including the terminating null byte,
171should not exceed the size of
172.IR sun_path .
173.IP *
174The
175.I addrlen
176argument that describes the enclosing
177.I sockaddr_un
178structure should have a value of at least:
5711c04f 179.IP
d02879f7
MK
180.nf
181 offsetof(struct sockaddr_un, sun_path)+strlen(addr.sun_path)+1
182.fi
183.IP
b8017cf5 184or, more simply,
d02879f7
MK
185.I addrlen
186can be specified as
187.IR "sizeof(struct sockaddr_un)" .
188.PP
189There is some variation in how implementations handle UNIX domain
190socket addresses that do not follow the above rules.
191For example, some (but not all) implementations
192.\" Linux does this, including for the case where the supplied path
193.\" is 108 bytes
194append a null terminator if none is present in the supplied
195.IR sun_path .
5711c04f 196.PP
d02879f7
MK
197When coding portable applications,
198keep in mind that some implementations
199.\" HP-UX
200have
201.I sun_path
202as short as 92 bytes.
203.\" Modern BSDs generally have 104, Tru64 and AIX have 104,
204.\" Solaris and Irix have 108
5711c04f 205.PP
d02879f7
MK
206Various system calls
207.RB ( accept (2),
208.BR recvfrom (2),
209.BR getsockname (2),
210.BR getpeername (2))
211return socket address structures.
212When applied to UNIX domain sockets, the value-result
213.I addrlen
214argument supplied to the call should be initialized as above.
215Upon return, the argument is set to indicate the
216.I actual
217size of the address structure.
218The caller should check the value returned in this argument:
219if the output value exceeds the input value,
220then there is no guarantee that a null terminator is present in
221.IR sun_path .
222(See BUGS.)
9f213833
MK
223.\"
224.SS Pathname socket ownership and permissions
225In the Linux implementation,
226pathname sockets honor the permissions of the directory they are in.
a23d8efa 227Creation of a new socket fails if the process does not have write and
9f213833 228search (execute) permission on the directory in which the socket is created.
5711c04f 229.PP
9f213833
MK
230On Linux,
231connecting to a stream socket object requires write permission on that socket;
232sending a datagram to a datagram socket likewise
233requires write permission on that socket.
234POSIX does not make any statement about the effect of the permissions
7f98a239 235on a socket file, and on some systems (e.g., older BSDs),
9f213833
MK
236the socket permissions are ignored.
237Portable programs should not rely on
238this feature for security.
5711c04f 239.PP
9f213833
MK
240When creating a new socket, the owner and group of the socket file
241are set according to the usual rules.
242The socket file has all permissions enabled,
243other than those that are turned off by the process
244.BR umask (2).
5711c04f 245.PP
9f213833
MK
246The owner, group, and permissions of a pathname socket can be changed (using
247.BR chown (2)
248and
249.BR chmod (2)).
250.\" However, fchown() and fchmod() do not seem to have an effect
251.\"
d1875c13 252.SS Abstract sockets
44cca454
MK
253Socket permissions have no meaning for abstract sockets:
254the process
255.BR umask (2)
256has no effect when binding an abstract socket,
257and changing the ownership and permissions of the object (via
258.BR fchown (2)
259and
260.BR fchmod (2))
261has no effect on the accessibility of the socket.
5711c04f 262.PP
d1875c13
MK
263Abstract sockets automatically disappear when all open references
264to the socket are closed.
5711c04f 265.PP
d1875c13
MK
266The abstract socket namespace is a nonportable Linux extension.
267.\"
c634028a 268.SS Socket options
464b254b 269For historical reasons, these socket options are specified with a
77117f4f
MK
270.B SOL_SOCKET
271type even though they are
d4c8c97c 272.B AF_UNIX
77117f4f
MK
273specific.
274They can be set with
275.BR setsockopt (2)
276and read with
277.BR getsockopt (2)
278by specifying
279.B SOL_SOCKET
280as the socket family.
281.TP
282.B SO_PASSCRED
928c3e7c 283Enabling this socket option causes receipt of the credentials of
421d34c6
MK
284the sending process in an
285.B SCM_CREDENTIALS ancillary
928c3e7c 286message in each subsequently received message.
421d34c6
MK
287The returned credentials are those specified by the sender using
288.BR SCM_CREDENTIALS ,
289or a default that includes the sender's PID, real user ID, and real group ID,
290if the sender did not specify
291.B SCM_CREDENTIALS
292ancillary data.
c02ed554
MK
293.IP
294When this option is set and the socket is not yet connected,
77117f4f 295a unique name in the abstract namespace will be generated automatically.
744c8fa8
MK
296.IP
297The value given as an argument to
298.BR setsockopt (2)
299and returned as the result of
300.BR getsockopt (2)
301is an integer boolean flag.
366a9bff
MK
302.TP
303.B SO_PASSSEC
ffad6a01
MK
304Enables receiving of the SELinux security label of the peer socket
305in an ancillary message of type
306.BR SCM_SECURITY
307(see below).
744c8fa8
MK
308.IP
309The value given as an argument to
310.BR setsockopt (2)
311and returned as the result of
312.BR getsockopt (2)
313is an integer boolean flag.
314.IP
315The
316.B SO_PASSSEC
317option is supported for UNIX domain datagram sockets
366a9bff
MK
318.\" commit 877ce7c1b3afd69a9b1caeb1b9964c992641f52a
319since Linux 2.6.18;
320support for UNIX domain stream sockets was added
321.\" commit 37a9a8df8ce9de6ea73349c9ac8bdf6ba4ec4f70
322in Linux 4.2.
ffab8460
MK
323.TP
324.BR SO_PEEK_OFF
325See
326.BR socket (7).
94950b9a
MK
327.TP
328.B SO_PEERCRED
3d3cddde
MK
329This read-only socket option returns the
330credentials of the peer process connected to this socket.
94950b9a
MK
331The returned credentials are those that were in effect at the time
332of the call to
333.BR connect (2)
334or
335.BR socketpair (2).
3d3cddde
MK
336.IP
337The argument to
338.BR getsockopt (2)
339is a pointer to a
94950b9a
MK
340.I ucred
341structure; define the
342.B _GNU_SOURCE
343feature test macro to obtain the definition of that structure from
344.IR <sys/socket.h> .
3d3cddde
MK
345.IP
346The use of this option is possible only for connected
347.B AF_UNIX
348stream sockets and for
349.B AF_UNIX
350stream and datagram socket pairs created using
351.BR socketpair (2).
366a9bff 352.\"
c634028a 353.SS Autobind feature
0cf2caa4 354If a
0b80cf56 355.BR bind (2)
0cf2caa4
MK
356call specifies
357.I addrlen
358as
359.IR sizeof(sa_family_t) ,
449dd4e2 360.\" i.e., sizeof(short)
0cf2caa4
MK
361or the
362.BR SO_PASSCRED
363socket option was specified for a socket that was
364not explicitly bound to an address,
365then the socket is autobound to an abstract address.
366The address consists of a null byte
367followed by 5 bytes in the character set
9bc87ed0 368.IR [0\-9a\-f] .
1e4e3bad
MK
369Thus, there is a limit of 2^20 autobind addresses.
370(From Linux 2.1.15, when the autobind feature was added,
3718 bytes were used, and the limit was thus 2^32 autobind addresses.
372The change to 5 bytes came in Linux 2.3.15.)
19e19f5f 373.SS Sockets API
77117f4f 374The following paragraphs describe domain-specific details and
008f1ecc 375unsupported features of the sockets API for UNIX domain sockets on Linux.
5711c04f 376.PP
008f1ecc 377UNIX domain sockets do not support the transmission of
77117f4f
MK
378out-of-band data (the
379.B MSG_OOB
380flag for
381.BR send (2)
382and
383.BR recv (2)).
5711c04f 384.PP
77117f4f
MK
385The
386.BR send (2)
387.B MSG_MORE
008f1ecc 388flag is not supported by UNIX domain sockets.
5711c04f 389.PP
c9a39fea
MK
390Before Linux 3.4,
391.\" commit 9f6f9af7694ede6314bed281eec74d588ba9474f
392the use of
77e75b90
MK
393.B MSG_TRUNC
394in the
395.I flags
396argument of
397.BR recv (2)
c9a39fea 398was not supported by UNIX domain sockets.
5711c04f 399.PP
77117f4f
MK
400The
401.B SO_SNDBUF
008f1ecc 402socket option does have an effect for UNIX domain sockets, but the
77117f4f
MK
403.B SO_RCVBUF
404option does not.
405For datagram sockets, the
406.B SO_SNDBUF
407value imposes an upper limit on the size of outgoing datagrams.
408This limit is calculated as the doubled (see
409.BR socket (7))
410option value less 32 bytes used for overhead.
c634028a 411.SS Ancillary messages
77117f4f
MK
412Ancillary data is sent and received using
413.BR sendmsg (2)
414and
415.BR recvmsg (2).
05bf3361 416For historical reasons, the ancillary message types listed below
77117f4f
MK
417are specified with a
418.B SOL_SOCKET
419type even though they are
d4c8c97c 420.B AF_UNIX
77117f4f 421specific.
05bf3361 422To send them, set the
77117f4f
MK
423.I cmsg_level
424field of the struct
425.I cmsghdr
426to
427.B SOL_SOCKET
428and the
429.I cmsg_type
430field to the type.
05bf3361 431For more information, see
77117f4f
MK
432.BR cmsg (3).
433.TP
434.B SCM_RIGHTS
435Send or receive a set of open file descriptors from another process.
436The data portion contains an integer array of the file descriptors.
87996200 437.IP
13600496
MK
438Commonly, this operation is referred to as "passing a file descriptor"
439to another process.
440However, more accurately,
441what is being passed is a reference to an open file description (see
442.BR open (2)),
443and in the receiving process it is likely that a different
444file descriptor number will be used.
445Semantically, this operation is equivalent to duplicating
446.RB ( dup (2))
447a file descriptor into the file descriptor table of another process.
8bdcf4bf 448.IP
4564dd1f
MK
449If the buffer used to receive the ancillary data containing
450file descriptors is too small (or is absent),
451then the ancillary data is truncated (or discarded)
452and the excess file descriptors are automatically closed
453in the receiving process.
454.IP
e2340cf7
MK
455If the number of file descriptors received in the ancillary data would
456cause the process to exceed its
457.B RLIMIT_NOFILE
458resource limit (see
459.BR getrlimit (2)),
460the excess file descriptors are automatically closed
461in the receiving process.
462.IP
8bdcf4bf
MK
463The kernel constant
464.BR SCM_MAX_FD
465defines a limit on the number of file descriptors in the array.
1221abb6 466Attempting to send an array larger than this limit causes
8bdcf4bf
MK
467.BR sendmsg (2)
468to fail with the error
469.BR EINVAL .
470.BR SCM_MAX_FD
471has the value 253
472(or 255 in kernels
473.\" commit bba14de98753cb6599a2dae0e520714b2153522d
474before 2.6.38).
77117f4f
MK
475.TP
476.B SCM_CREDENTIALS
008f1ecc 477Send or receive UNIX credentials.
77117f4f
MK
478This can be used for authentication.
479The credentials are passed as a
480.I struct ucred
481ancillary message.
b1587ca8
MK
482Thus structure is defined in
483.I <sys/socket.h>
484as follows:
5711c04f 485.IP
77117f4f 486.in +4n
b8302363 487.EX
77117f4f 488struct ucred {
b65f4c69
MK
489 pid_t pid; /* Process ID of the sending process */
490 uid_t uid; /* User ID of the sending process */
491 gid_t gid; /* Group ID of the sending process */
77117f4f 492};
b8302363 493.EE
77117f4f 494.in
5711c04f 495.IP
b1587ca8 496Since glibc 2.8, the
1bc510f5 497.B _GNU_SOURCE
e417acb0
MK
498feature test macro must be defined (before including
499.I any
500header files) in order to obtain the definition
b1587ca8 501of this structure.
5711c04f 502.IP
77117f4f 503The credentials which the sender specifies are checked by the kernel.
f1081bdc 504A privileged process is allowed to specify values that do not match its own.
77117f4f
MK
505The sender must specify its own process ID (unless it has the capability
506.BR CAP_SYS_ADMIN ),
06b8a13b 507its real user ID, effective user ID, or saved set-user-ID (unless it has
77117f4f 508.BR CAP_SETUID ),
06b8a13b 509and its real group ID, effective group ID, or saved set-group-ID
77117f4f
MK
510(unless it has
511.BR CAP_SETGID ).
bdef8021 512.IP
77117f4f
MK
513To receive a
514.I struct ucred
b66d5714 515message, the
77117f4f
MK
516.B SO_PASSCRED
517option must be enabled on the socket.
ffad6a01
MK
518.TP
519.B SCM_SECURITY
520Receive the SELinux security context (the security label)
521of the peer socket.
522The received ancillary data is a null-terminated string containing
523the security context.
524The receiver should allocate at least
525.BR NAME_MAX
526bytes in the data portion of the ancillary message for this data.
527.IP
528To receive the security context, the
529.B SO_PASSSEC
530option must be enabled on the socket (see above).
c8772146 531.PP
5b5cb195
MK
532When sending ancillary data with
533.BR sendmsg (2),
534only one item of each of the above types may be included in the sent message.
535.PP
5219daec
MK
536At least one byte of real data should be sent when sending ancillary data.
537On Linux, this is required to successfully send ancillary data over
538a UNIX domain stream socket.
539When sending ancillary data over a UNIX domain datagram socket,
540it is not necessary on Linux to send any accompanying real data.
541However, portable applications should also include at least one byte
542of real data when sending ancillary data over a datagram socket.
543.PP
5af0f223
MK
544When receiving from a stream socket,
545ancillary data forms a kind of barrier for the received data.
546For example, suppose that the sender transmits as follows:
547.PP
548.RS
549.PD 0
550.IP 1. 3
551.BR sendmsg (2)
552of four bytes, with no ancillary data.
553.IP 2.
554.BR sendmsg (2)
555of one byte, with ancillary data.
556.IP 3.
557.BR sendmsg (2)
558of four bytes, with no ancillary data.
559.PD
560.RE
561.PP
562Suppose that the receiver now performs
563.BR recvmsg (2)
564calls each with a buffer size of 20 bytes.
565The first call will receive five bytes of data,
566along with the ancillary data sent by the second
567.BR sendmsg (2)
568call.
569The next call will receive the remaining five bytes of data.
570.PP
c0e56ed6 571If the space allocated for receiving incoming ancillary data is too small
c8772146
MK
572then the ancillary data is truncated to the number of headers
573that will fit in the supplied buffer (or, in the case of an
574.BR SCM_RIGHTS
575file descriptor list, the list of file descriptors may be truncated).
c0e56ed6
MK
576If no buffer is provided for incoming ancillary data (i.e., the
577.I msg_control
578field of the
579.I msghdr
580structure supplied to
581.BR recvmsg (2)
582is NULL),
583then the incoming ancillary data is discarded.
584In both of these cases, the
c8772146
MK
585.BR MSG_CTRUNC
586flag will be set in the
587.I msg.msg_flags
588value returned by
589.BR recvmsg (2).
590.\"
fbea0f81
MK
591.SS Ioctls
592The following
593.BR ioctl (2)
594calls return information in
595.IR value .
596The correct syntax is:
597.PP
598.RS
599.nf
600.BI int " value";
f0d77d97 601.IB error " = ioctl(" unix_socket ", " ioctl_type ", &" value ");"
fbea0f81
MK
602.fi
603.RE
604.PP
605.I ioctl_type
606can be:
607.TP
608.B SIOCINQ
170e5f0d
JC
609For
610.B SOCK_STREAM
311bf2f6 611sockets, this call returns the number of unread bytes in the receive buffer.
fbea0f81
MK
612The socket must not be in LISTEN state, otherwise an error
613.RB ( EINVAL )
614is returned.
615.B SIOCINQ
616is defined in
617.IR <linux/sockios.h> .
bea08fec 618.\" FIXME . http://sources.redhat.com/bugzilla/show_bug.cgi?id=12002,
fbea0f81
MK
619.\" filed 2010-09-10, may cause SIOCINQ to be defined in glibc headers
620Alternatively,
621you can use the synonymous
622.BR FIONREAD ,
623defined in
624.IR <sys/ioctl.h> .
7aed61d9 625.\" SIOCOUTQ also has an effect for UNIX domain sockets, but not
fbea0f81
MK
626.\" quite what userland might expect. It seems to return the number
627.\" of bytes allocated for buffers containing pending output.
628.\" That number is normally larger than the number of bytes of pending
629.\" output. Since this info is, from userland's point of view, imprecise,
630.\" and it may well change, probably best not to document this now.
170e5f0d
JC
631For
632.B SOCK_DGRAM
311bf2f6 633sockets,
170e5f0d 634the returned value is the same as
311bf2f6 635for Internet domain datagram sockets;
170e5f0d
JC
636see
637.BR udp (7).
77117f4f
MK
638.SH ERRORS
639.TP
640.B EADDRINUSE
9ee4a2b6 641The specified local address is already in use or the filesystem socket
77117f4f
MK
642object already exists.
643.TP
7934bcdf
MK
644.B EBADF
645This error can occur for
646.BR sendmsg (2)
647when sending a file descriptor as ancillary data over
648a UNIX domain socket (see the description of
649.BR SCM_RIGHTS ,
650above), and indicates that the file descriptor number that
3eb078c5 651is being sent is not valid (e.g., it is not an open file descriptor).
7934bcdf 652.TP
77117f4f 653.B ECONNREFUSED
1fe284ab 654The remote address specified by
77117f4f 655.BR connect (2)
1fe284ab 656was not a listening socket.
d02879f7 657This error can also occur if the target pathname is not a socket.
77117f4f
MK
658.TP
659.B ECONNRESET
660Remote socket was unexpectedly closed.
661.TP
662.B EFAULT
663User memory address was not valid.
664.TP
665.B EINVAL
666Invalid argument passed.
1fe284ab 667A common cause is that the value
40656bc7 668.B AF_UNIX
1fe284ab 669was not specified in the
77117f4f 670.I sun_type
1fe284ab 671field of passed addresses, or the socket was in an
77117f4f
MK
672invalid state for the applied operation.
673.TP
674.B EISCONN
675.BR connect (2)
676called on an already connected socket or a target address was
677specified on a connected socket.
678.TP
ec55a2b6
MK
679.B ENOENT
680The pathname in the remote address specified to
9470f355 681.BR connect (2)
ec55a2b6
MK
682did not exist.
683.TP
77117f4f
MK
684.B ENOMEM
685Out of memory.
686.TP
687.B ENOTCONN
688Socket operation needs a target address, but the socket is not connected.
689.TP
690.B EOPNOTSUPP
691Stream operation called on non-stream oriented socket or tried to
692use the out-of-band data option.
693.TP
694.B EPERM
695The sender passed invalid credentials in the
696.IR "struct ucred" .
697.TP
698.B EPIPE
699Remote socket was closed on a stream socket.
700If enabled, a
701.B SIGPIPE
702is sent as well.
703This can be avoided by passing the
704.B MSG_NOSIGNAL
705flag to
110039c1 706.BR send (2)
77117f4f 707or
110039c1 708.BR sendmsg (2).
77117f4f
MK
709.TP
710.B EPROTONOSUPPORT
cd0221ea
MK
711Passed protocol is not
712.BR AF_UNIX .
77117f4f
MK
713.TP
714.B EPROTOTYPE
715Remote socket does not match the local socket type
716.RB ( SOCK_DGRAM
d1c9ea80 717versus
9ca2e0c1 718.BR SOCK_STREAM ).
77117f4f
MK
719.TP
720.B ESOCKTNOSUPPORT
721Unknown socket type.
dc4eea68
MK
722.TP
723.B ETOOMANYREFS
724This error can occur for
725.BR sendmsg (2)
4529d4e5 726when sending a file descriptor as ancillary data over
dc4eea68
MK
727a UNIX domain socket (see the description of
728.BR SCM_RIGHTS ,
729above).
730It occurs if the number of "in-flight" file descriptors exceeds the
731.B RLIMIT_NOFILE
732resource limit and the caller does not have the
733.BR CAP_SYS_RESOURCE
734capability.
735An in-flight file descriptor is one that has been sent using
736.BR sendmsg (2)
737but has not yet been accepted in the recipient process using
738.BR recvmsg (2).
5711c04f 739.IP
70fdcbc2
MK
740This error is diagnosed since mainline Linux 4.5
741(and in some earlier kernel versions where the fix has been backported).
dc4eea68
MK
742.\" commit 712f4aad406bb1ed67f3f98d04c044191f0ff593
743In earlier kernel versions,
744it was possible to place an unlimited number of file descriptors in flight,
745by sending each file descriptor with
746.BR sendmsg (2)
747and then closing the file descriptor so that it was not accounted against the
748.B RLIMIT_NOFILE
749resource limit.
77117f4f
MK
750.PP
751Other errors can be generated by the generic socket layer or
9ee4a2b6 752by the filesystem while generating a filesystem socket object.
77117f4f
MK
753See the appropriate manual pages for more information.
754.SH VERSIONS
755.B SCM_CREDENTIALS
756and the abstract namespace were introduced with Linux 2.2 and should not
757be used in portable programs.
758(Some BSD-derived systems also support credential passing,
759but the implementation details differ.)
760.SH NOTES
00b78c5f
MK
761Binding to a socket with a filename creates a socket
762in the filesystem that must be deleted by the caller when it is no
763longer needed (using
764.BR unlink (2)).
765The usual UNIX close-behind semantics apply; the socket can be unlinked
766at any time and will be finally removed from the filesystem when the last
767reference to it is closed.
5711c04f 768.PP
00b78c5f 769To pass file descriptors or credentials over a
d3e7786d
MK
770.BR SOCK_STREAM
771socket, you must
00b78c5f
MK
772to send or receive at least one byte of nonancillary data in the same
773.BR sendmsg (2)
774or
775.BR recvmsg (2)
776call.
5711c04f 777.PP
00b78c5f
MK
778UNIX domain stream sockets do not support the notion of out-of-band data.
779.\"
d02879f7
MK
780.SH BUGS
781When binding a socket to an address,
782Linux is one of the implementations that appends a null terminator
783if none is supplied in
784.IR sun_path .
785In most cases this is unproblematic:
786when the socket address is retrieved,
787it will be one byte longer than that supplied when the socket was bound.
788However, there is one case where confusing behavior can result:
789if 108 non-null bytes are supplied when a socket is bound,
790then the addition of the null terminator takes the length of
791the pathname beyond
792.IR sizeof(sun_path) .
793Consequently, when retrieving the socket address
794(for example, via
795.BR accept (2)),
796.\" The behavior on Solaris is quite similar.
797if the input
798.I addrlen
799argument for the retrieving call is specified as
800.IR "sizeof(struct sockaddr_un)" ,
801then the returned address structure
802.I won't
803have a null terminator in
804.IR sun_path .
5711c04f 805.PP
d02879f7
MK
806In addition, some implementations
807.\" i.e., traditional BSD
808don't require a null terminator when binding a socket (the
809.I addrlen
810argument is used to determine the length of
811.IR sun_path )
812and when the socket address is retrieved on these implementations,
813there is no null terminator in
814.IR sun_path .
5711c04f 815.PP
b8017cf5 816Applications that retrieve socket addresses can (portably) code
d02879f7
MK
817to handle the possibility that there is no null terminator in
818.IR sun_path
819by respecting the fact that the number of valid bytes in the pathname is:
5711c04f 820.PP
d02879f7
MK
821 strnlen(addr.sun_path, addrlen \- offsetof(sockaddr_un, sun_path))
822.\" The following patch to amend kernel behavior was rejected:
823.\" http://thread.gmane.org/gmane.linux.kernel.api/2437
824.\" Subject: [patch] Fix handling of overlength pathname in AF_UNIX sun_path
825.\" 2012-04-17
826.\" And there was a related discussion in the Austin list:
827.\" http://thread.gmane.org/gmane.comp.standards.posix.austin.general/5735
828.\" Subject: Having a sun_path with no null terminator
829.\" 2012-04-18
830.\"
831.\" FIXME . Track http://austingroupbugs.net/view.php?id=561
5711c04f 832.PP
d02879f7
MK
833Alternatively, an application can retrieve
834the socket address by allocating a buffer of size
835.I "sizeof(struct sockaddr_un)+1"
836that is zeroed out before the retrieval.
837The retrieving call can specify
838.I addrlen
839as
840.IR "sizeof(struct sockaddr_un)" ,
841and the extra zero byte ensures that there will be
842a null terminator for the string returned in
843.IR sun_path :
5711c04f 844.PP
a2b7a144
MK
845.in +4n
846.EX
d02879f7
MK
847void *addrp;
848
849addrlen = sizeof(struct sockaddr_un);
850addrp = malloc(addrlen + 1);
851if (addrp == NULL)
852 /* Handle error */ ;
853memset(addrp, 0, addrlen + 1);
854
3e35b19b 855if (getsockname(sfd, (struct sockaddr *) addrp, &addrlen)) == \-1)
d02879f7
MK
856 /* handle error */ ;
857
d1a71985 858printf("sun_path = %s\en", ((struct sockaddr_un *) addrp)\->sun_path);
b8302363 859.EE
e646a1ba 860.in
5711c04f 861.PP
d02879f7
MK
862This sort of messiness can be avoided if it is guaranteed
863that the applications that
864.I create
865pathname sockets follow the rules outlined above under
866.IR "Pathname sockets" .
77117f4f 867.SH EXAMPLE
84c8cae2
MK
868The following code demonstrates the use of sequenced-packet
869sockets for local interprocess communication.
eb73e8ad 870It consists of two programs.
15545eb6 871The server program waits for a connection from the client program.
84c8cae2
MK
872The client sends each of its command-line arguments in separate messages.
873The server treats the incoming messages as integers and adds them up.
eb73e8ad 874The client sends the command string "END".
84c8cae2
MK
875The server sends back a message containing the sum of the client's integers.
876The client prints the sum and exits.
15545eb6 877The server waits for the next client to connect.
84c8cae2 878To stop the server, the client is called with the command-line argument "DOWN".
15545eb6
HS
879.PP
880The following output was recorded while running the server in the background
84c8cae2
MK
881and repeatedly executing the client.
882Execution of the server program ends when it receives the "DOWN" command.
15545eb6
HS
883.SS Example output
884.in +4n
b8302363 885.EX
eb73e8ad 886$ \fB./server &\fP
15545eb6 887[1] 25887
eb73e8ad 888$ \fB./client 3 4\fP
15545eb6 889Result = 7
eb73e8ad 890$ \fB./client 11 \-5\fP
15545eb6 891Result = 6
eb73e8ad 892$ \fB./client DOWN\fP
15545eb6
HS
893Result = 0
894[1]+ Done ./server
895$
b8302363 896.EE
15545eb6
HS
897.in
898.SS Program source
c7885256 899\&
e7d0bb47 900.EX
15545eb6
HS
901/*
902 * File connection.h
903 */
904
905#define SOCKET_NAME "/tmp/9Lq7BNBnBycd6nxy.socket"
906#define BUFFER_SIZE 12
907
908/*
909 * File server.c
910 */
911
912#include <stdio.h>
913#include <stdlib.h>
914#include <string.h>
915#include <sys/socket.h>
916#include <sys/un.h>
917#include <unistd.h>
918#include "connection.h"
919
920int
921main(int argc, char *argv[])
922{
923 struct sockaddr_un name;
924 int down_flag = 0;
925 int ret;
926 int connection_socket;
927 int data_socket;
928 int result;
929 char buffer[BUFFER_SIZE];
930
931 /*
eb73e8ad 932 * In case the program exited inadvertently on the last run,
15545eb6
HS
933 * remove the socket.
934 */
935
936 unlink(SOCKET_NAME);
937
938 /* Create local socket. */
939
940 connection_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0);
941 if (connection_socket == \-1) {
942 perror("socket");
943 exit(EXIT_FAILURE);
944 }
945
946 /*
eb73e8ad
MK
947 * For portability clear the whole structure, since some
948 * implementations have additional (nonstandard) fields in
949 * the structure.
15545eb6
HS
950 */
951
952 memset(&name, 0, sizeof(struct sockaddr_un));
953
954 /* Bind socket to socket name. */
955
956 name.sun_family = AF_UNIX;
957 strncpy(name.sun_path, SOCKET_NAME, sizeof(name.sun_path) \- 1);
958
959 ret = bind(connection_socket, (const struct sockaddr *) &name,
960 sizeof(struct sockaddr_un));
961 if (ret == \-1) {
962 perror("bind");
963 exit(EXIT_FAILURE);
964 }
965
966 /*
eb73e8ad
MK
967 * Prepare for accepting connections. The backlog size is set
968 * to 20. So while one request is being processed other requests
969 * can be waiting.
15545eb6
HS
970 */
971
972 ret = listen(connection_socket, 20);
973 if (ret == \-1) {
974 perror("listen");
975 exit(EXIT_FAILURE);
976 }
977
978 /* This is the main loop for handling connections. */
979
980 for (;;) {
981
15545eb6
HS
982 /* Wait for incoming connection. */
983
984 data_socket = accept(connection_socket, NULL, NULL);
3cb43b95 985 if (data_socket == \-1) {
15545eb6
HS
986 perror("accept");
987 exit(EXIT_FAILURE);
988 }
989
990 result = 0;
52900faa 991 for (;;) {
15545eb6
HS
992
993 /* Wait for next data packet. */
994
995 ret = read(data_socket, buffer, BUFFER_SIZE);
996 if (ret == \-1) {
eb73e8ad 997 perror("read");
15545eb6
HS
998 exit(EXIT_FAILURE);
999 }
1000
1001 /* Ensure buffer is 0\-terminated. */
1002
1003 buffer[BUFFER_SIZE \- 1] = 0;
1004
1005 /* Handle commands. */
1006
1007 if (!strncmp(buffer, "DOWN", BUFFER_SIZE)) {
1008 down_flag = 1;
1009 break;
1010 }
1011
1012 if (!strncmp(buffer, "END", BUFFER_SIZE)) {
1013 break;
1014 }
1015
1016 /* Add received summand. */
1017
1018 result += atoi(buffer);
1019 }
c751683c 1020
15545eb6
HS
1021 /* Send result. */
1022
1023 sprintf(buffer, "%d", result);
1024 ret = write(data_socket, buffer, BUFFER_SIZE);
15545eb6 1025 if (ret == \-1) {
eb73e8ad 1026 perror("write");
15545eb6
HS
1027 exit(EXIT_FAILURE);
1028 }
1029
1030 /* Close socket. */
1031
1032 close(data_socket);
1033
1034 /* Quit on DOWN command. */
1035
1036 if (down_flag) {
1037 break;
1038 }
1039 }
1040
1041 close(connection_socket);
1042
1043 /* Unlink the socket. */
1044
1045 unlink(SOCKET_NAME);
1046
1047 exit(EXIT_SUCCESS);
1048}
1049
1050/*
1051 * File client.c
1052 */
1053
1054#include <errno.h>
1055#include <stdio.h>
1056#include <stdlib.h>
1057#include <string.h>
1058#include <sys/socket.h>
1059#include <sys/un.h>
1060#include <unistd.h>
1061#include "connection.h"
1062
1063int
1064main(int argc, char *argv[])
1065{
24a31d63 1066 struct sockaddr_un addr;
15545eb6
HS
1067 int i;
1068 int ret;
1069 int data_socket;
1070 char buffer[BUFFER_SIZE];
1071
1072 /* Create local socket. */
1073
1074 data_socket = socket(AF_UNIX, SOCK_SEQPACKET, 0);
1075 if (data_socket == \-1) {
1076 perror("socket");
1077 exit(EXIT_FAILURE);
1078 }
1079
1080 /*
eb73e8ad
MK
1081 * For portability clear the whole structure, since some
1082 * implementations have additional (nonstandard) fields in
1083 * the structure.
15545eb6
HS
1084 */
1085
24a31d63 1086 memset(&addr, 0, sizeof(struct sockaddr_un));
15545eb6 1087
24a31d63 1088 /* Connect socket to socket address */
15545eb6 1089
24a31d63
MK
1090 addr.sun_family = AF_UNIX;
1091 strncpy(addr.sun_path, SOCKET_NAME, sizeof(addr.sun_path) \- 1);
15545eb6 1092
24a31d63 1093 ret = connect (data_socket, (const struct sockaddr *) &addr,
15545eb6
HS
1094 sizeof(struct sockaddr_un));
1095 if (ret == \-1) {
d1a71985 1096 fprintf(stderr, "The server is down.\en");
15545eb6
HS
1097 exit(EXIT_FAILURE);
1098 }
1099
1100 /* Send arguments. */
1101
1102 for (i = 1; i < argc; ++i) {
1103 ret = write(data_socket, argv[i], strlen(argv[i]) + 1);
1104 if (ret == \-1) {
eb73e8ad 1105 perror("write");
15545eb6
HS
1106 break;
1107 }
1108 }
1109
1110 /* Request result. */
1111
1112 strcpy (buffer, "END");
1113 ret = write(data_socket, buffer, strlen(buffer) + 1);
1114 if (ret == \-1) {
eb73e8ad 1115 perror("write");
15545eb6
HS
1116 exit(EXIT_FAILURE);
1117 }
1118
15545eb6
HS
1119 /* Receive result. */
1120
1121 ret = read(data_socket, buffer, BUFFER_SIZE);
1122 if (ret == \-1) {
eb73e8ad 1123 perror("read");
15545eb6
HS
1124 exit(EXIT_FAILURE);
1125 }
1126
1127 /* Ensure buffer is 0\-terminated. */
1128
1129 buffer[BUFFER_SIZE \- 1] = 0;
1130
d1a71985 1131 printf("Result = %s\en", buffer);
15545eb6
HS
1132
1133 /* Close socket. */
1134
1135 close(data_socket);
1136
1137 exit(EXIT_SUCCESS);
1138}
e7d0bb47 1139.EE
15545eb6 1140.PP
c751683c
MK
1141For an example of the use of
1142.BR SCM_RIGHTS
1143see
1144.BR cmsg (3).
47297adb 1145.SH SEE ALSO
77117f4f
MK
1146.BR recvmsg (2),
1147.BR sendmsg (2),
1148.BR socket (2),
1149.BR socketpair (2),
1150.BR cmsg (3),
1151.BR capabilities (7),
1152.BR credentials (7),
170e5f0d
JC
1153.BR socket (7),
1154.BR udp (7)