Unix ___domain socket: Difference between revisions

Content deleted Content added
Southen (talk | contribs)
Added "IPC" template list
m MOS:AKA, MOS:BOLDLINKAVOID, MOS:BOLDSYN, delete incorrect commas
 
(142 intermediate revisions by 100 users not shown)
Line 1:
{{Short description|Communications endpoint for exchanging data between processes}}
A '''Unix ___domain socket''' or '''IPC socket''' (inter-process communication socket) is a data communications endpoint that is similar to an [[Internet socket]], but does not use a network protocol for communication. It is used in [[POSIX]] [[operating system]]s for [[inter-process communication]]. The correct standard POSIX term is '''POSIX Local IPC Sockets'''.
A '''Unix ___domain socket''' ('''UDS'''), '''local socket''', or '''inter-process communication''' ('''IPC''') '''socket''' is a [[communication endpoint]] for [[inter-process communication|exchanging data between processes]] executing in the same [[Unix]] or [[Unix-like]] operating system.
 
The name ''Unix ___domain socket'' refers to the <code>___domain</code> argument value <code>AF_UNIX</code> that is passed to the function that creates a socket [[system resource]]. The same communication ___domain is also selected by <code>AF_LOCAL</code>. <ref name="man-unix-sockets"></ref>
Unix ___domain connections appear as [[byte stream]]s, much like network connections, but all data remains within the local computer. UNIX ___domain sockets use the file system as address name space, i.e. they are referenced by processes as [[inodes]] in the file system. This allows two distinct processes to open the same socket in order to communicate. However, the actual communication (the data exchange) does not use the file system, but buffers in kernel memory.
 
Valid <code>type</code> argument values for a UDS are:<ref name="man-unix-sockets">{{cite web
In addition to sending data, processes can send [[file descriptor]]s across a Unix ___domain socket connection using the sendmsg() and recvmsg() system calls.
| url = http://man7.org/linux/man-pages/man7/unix.7.html
| date = 30 April 2018
| title = Linux Programmer's Manual (unix - sockets for local interprocess communication)
| access-date = 22 February 2019
| df = dmy-all}}</ref>
* <code>SOCK_STREAM</code> (compare to [[Transmission Control Protocol|TCP]]) – for a stream-oriented socket
* <code>SOCK_DGRAM</code> (compare to [[User Datagram Protocol|UDP]]) – for a datagram-oriented socket that preserves message boundaries (as on most UNIX implementations, UNIX ___domain datagram sockets are always reliable and don't reorder datagrams)
* <code>SOCK_SEQPACKET</code> (compare to [[SCTP]]) – for a sequenced-packet socket that is connection-oriented, preserves message boundaries, and delivers messages in the order that they were sent
 
The UDS facility is a standard component of a [[POSIX]] [[operating system]].
==External links==
*{{man|2|socketpair||create a pair of connected sockets}}
*{{man|2|sendmsg||send a message on a socket}}
*{{man|2|recvmsg||receive a message from a socket}}
*{{man|3|cmsg||socket ancillary data, including sending/receiving [[file descriptor]]s}}
*[http://untroubled.org/ucspi-unix/ ucspi-unix], UNIX-___domain socket client-server command-line tools
*[http://beej.us/guide/bgipc/output/html/multipage/unixsock.html unix ___domain sockets]
*[http://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html Unix sockets vs Internet sockets]
 
The [[API]] for a UDS is similar to that of an [[Internet socket]], but rather than using an underlying network protocol, all communication occurs entirely within the operating system [[kernel (operating system)|kernel]]. A UDS may use the file system as its address [[name space]]. Some operating systems, like [[Linux]], offer additional namespaces. Processes reference a UDS as a file system [[inode]], so two processes can communicate by opening the same socket.
{{IPC}}
 
In addition to sending data, processes may send [[file descriptor]]s across a UDS connection using the <code>sendmsg()</code> and <code>recvmsg()</code> system calls. This allows the sending processes to grant the receiving process access to a file descriptor for which the receiving process otherwise does not have access.<ref name="neohapsis">{{cite web |url=http://archives.neohapsis.com/archives/postfix/2000-09/1476.html |date=30 September 2000 |title=Archive of the "Postfix Discussions" mailing list |access-date=29 September 2014 |archive-url=https://web.archive.org/web/20130518084034/http://archives.neohapsis.com/archives/postfix/2000-09/1476.html |archive-date=18 May 2013 |url-status=dead |df=dmy-all}}</ref><ref name="linux-cmsg-man-page">{{cite web |url=https://linux.die.net/man/3/cmsg |title=Linux man page - cmsg(3): access ancillary data |access-date=9 October 2018 |df=dmy-all}}</ref> This can be used to implement a rudimentary form of [[capability-based security]].<ref name="wheeler-secure-linux-howto">{{cite web |url=https://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/sockets.html |title="Secure Programming for Linux and Unix HOWTO", Section 3.4 "Sockets and Network Connections" |date=22 August 2004 |website=dwheeler.com |publisher=David A. Wheeler |access-date=29 September 2014}}</ref>
 
==See also==
* {{Annotated link|Network socket}}
* {{Annotated link|Berkeley sockets}}
* {{Annotated link|Pipeline (Unix)}}
* {{Annotated link|Netlink}}
 
==References==
{{Reflist}}
 
==External links==
* {{man|sh|socket|SUS||create a socket}}
* {{man|2sh|socketpair|SUS||create a pair of connected sockets}}
* {{man|2sh|sendmsg|SUS||send a message on a socket}}
* {{man|2sh|recvmsg|SUS||receive a message from a socket}}
* {{man|3|cmsg|Linux||socket ancillary data, including sending/receiving [[file descriptor]]s}}
* [httphttps://untroubled.org/ucspi-unix/ ucspi-unix], UNIX-___domain socket client-server command-line tools
* [httphttps://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html Unix sockets vs Internet sockets]
* [https://beej.us/guide/bgipc/html/multi/index.html Unix Sockets - Beej's Guide to Unix IPC]
 
[[Category:{{Inter-process communication]]}}
{{compsci-stub}}
{{Use dmy dates|date=January 2019}}
 
[[Category:Network socket]]
[[Category:Unix]]
[[Category:Inter-process communication]]
 
[[esfr:Berkeley sockets#Socket UNIXunix]]
[[uk:Локальні сокети]]