15.1 Introduction
The Unix domain protocols are not an actual
protocol suite, but a way of performing client/server communication
on a single host using the same API that is used for clients and
servers on different hosts. The Unix domain protocols are an
alternative to the interprocess communication (IPC) methods
described in Volume 2 of this series, when the client and server
are on the same host. Details on the actual implementation of Unix
domain sockets in a Berkeley-derived kernel are provided in part 3
of TCPv3.
Two types of sockets are provided in the Unix
domain: stream sockets (similar to TCP) and datagram sockets
(similar to UDP). Even though a raw socket is also provided, its
semantics have never been documented, it is not used by any program
that the authors are aware of, and it is not defined by POSIX.
Unix domain sockets are used for three
reasons:
-
On
Berkeley-derived implementations, Unix domain sockets are often
twice as fast as a TCP socket when both peers are on the same host
(pp. 223鈥?24 of TCPv3). One application takes advantage of this:
the X Window System. When an X11 client starts and opens a
connection to the X11 server, the client checks the value of the
DISPLAY environment variable, which specifies the server's
hostname, window, and screen. If the server is on the same host as
the client, the client opens a Unix domain stream connection to the
server; otherwise the client opens a TCP connection to the
server.
-
Unix domain
sockets are used when passing descriptors between processes on the
same host. We will provide a complete example of this in Section
15.7.
-
Newer
implementations of Unix domain sockets provide the client's
credentials (user ID and group IDs) to the server, which can
provide additional security checking. We will describe this in
Section
15.8.
The protocol addresses used to identify clients
and servers in the Unix domain are pathnames within the normal
filesystem. Recall that IPv4 uses a combination of 32-bit addresses
and 16-bit port numbers for its protocol addresses, and IPv6 uses a
combination of 128-bit addresses and 16-bit port numbers for its
protocol addresses. These pathnames are not normal Unix files: We
cannot read from or write to these files except from a program that
has associated the pathname with a Unix domain socket.
|