LOCALDOMAIN(4) BSD Programmer's Manual LOCALDOMAIN(4)NAMElocaldomain - LOCAL-domain protocol family
SYNOPSIS
#include <sys/types.h>
#include <sys/un.h>
DESCRIPTION
The LOCAL-domain protocol family is a collection of protocols that pro-
vides local (on-machine) interprocess communication through the normal
socket(2) mechanisms. The LOCAL-domain family supports the SOCK_STREAM
and SOCK_DGRAM socket types and uses filesystem pathnames for addressing.
ADDRESSING
LOCAL-domain addresses are variable-length filesystem pathnames of at
most 104 characters. The include file <sys/un.h> defines this address:
struct sockaddr_un {
u_char sun_len;
u_char sun_family;
char sun_path[104];
};
sun_len The total length of the sockaddr, which includes the length
of the path string excluding the trailing null.
sun_family The address family, AF_LOCAL.
sun_path The path name of the socket end-point. A trailing null may
be included for convenience, but it should not be included in
the sun_len field.
Binding a name to a LOCAL-domain socket with bind(2) causes a socket file
to be created in the filesystem. This file is not removed when the sock-
et is closed--unlink(2) must be used to remove the file.
The LOCAL-domain protocol family does not support broadcast addressing or
any form of ``wildcard'' matching on incoming messages. All addresses
are absolute- or relative-pathnames of other LOCAL-domain sockets. Nor-
mal filesystem access-control mechanisms are also applied when referenc-
ing pathnames; e.g., the destination of a connect(2) or sendto(2) must be
writable.
PROTOCOLS
The LOCAL-domain protocol family is composed of simple transport proto-
cols that support the SOCK_STREAM and SOCK_DGRAM abstractions.
SOCK_STREAM sockets also support the communication of file descriptors
through the use of the msg_control field in the msg argument to
sendmsg(2) and recvmsg(2).
Any valid descriptor may be sent in a message. The file descriptor(s) to
be passed are described using a struct cmsghdr that is defined in the in-
clude file <sys/socket.h>. The type of the message is SCM_RIGHTS, and the
data portion of the messages is an array of integers representing the
file descriptors to be passed. The number of descriptors being passed is
defined by the length field of the message; the length field is the sum
of the size of the header plus the size of the array of file descriptors.
The received descriptor is a duplicate of the sender's descriptor, as if
it were created with a call to dup(2). Per-process descriptor flags, set
with fcntl(2), are not passed to a receiver. Descriptors that are
awaiting delivery, or that are purposely not received, are automatically
closed by the system when the destination socket is closed.
The credentials of the sending process are also available via the control
message interface. Credentials of a process consist of the its real and
effective uid, groups and login name (as specified by setlogin(2)) as
provided in the struct fcred struct defined in <sys/ucred.h>. On a
SOCK_DGRAM socket, the credentials are passed with every packet. On a
SOCK_STREAM socket, the credential are passed once, when the socket is
first read. Reception of credentials is controlled by using setsock-
opt(2) to enable LOCAL_CRED at the SOL_SOCKET level.
SEE ALSOrecv(2), send(2), socket(2), intro(4)
"An Introductory 4.3 BSD Interprocess Communication Tutorial", PS1, 7.
"An Advanced 4.3 BSD Interprocess Communication Tutorial", PS1, 8.
BSDI BSD/OS June 9, 1993 2