diff options
Diffstat (limited to 'share/man/man4/unix.4')
-rw-r--r-- | share/man/man4/unix.4 | 275 |
1 files changed, 275 insertions, 0 deletions
diff --git a/share/man/man4/unix.4 b/share/man/man4/unix.4 new file mode 100644 index 000000000000..89944ce7a7e2 --- /dev/null +++ b/share/man/man4/unix.4 @@ -0,0 +1,275 @@ +.\" Copyright (c) 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)unix.4 8.1 (Berkeley) 6/9/93 +.\" $FreeBSD$ +.\" +.Dd July 15, 2001 +.Dt UNIX 4 +.Os +.Sh NAME +.Nm unix +.Nd UNIX-domain protocol family +.Sh SYNOPSIS +.In sys/types.h +.In sys/un.h +.Sh DESCRIPTION +The +.Ux Ns -domain +protocol family is a collection of protocols +that provides local (on-machine) interprocess +communication through the normal +.Xr socket 2 +mechanisms. +The +.Ux Ns -domain +family supports the +.Dv SOCK_STREAM +and +.Dv SOCK_DGRAM +socket types and uses +file system pathnames for addressing. +.Sh ADDRESSING +.Ux Ns -domain +addresses are variable-length file system pathnames of +at most 104 characters. +The include file +.In sys/un.h +defines this address: +.Bd -literal -offset indent +struct sockaddr_un { + u_char sun_len; + u_char sun_family; + char sun_path[104]; +}; +.Ed +.Pp +Binding a name to a +.Ux Ns -domain +socket with +.Xr bind 2 +causes a socket file to be created in the file system. +This file is +.Em not +removed when the socket is closed \(em +.Xr unlink 2 +must be used to remove the file. +.Pp +The length of +.Ux Ns -domain +address, required by +.Xr bind 2 +and +.Xr connect 2 , +can be calculated by the macro +.Fn SUN_LEN +defined in +.In sys/un.h . +The +.Va sun_path +field must be terminated by a +.Dv NUL +character to be used with +.Fn SUN_LEN , +but the terminating +.Dv NUL +is +.Em not +part of the address. +.Pp +The +.Ux Ns -domain +protocol family does not support broadcast addressing or any form +of +.Dq wildcard +matching on incoming messages. +All addresses are absolute- or relative-pathnames +of other +.Ux Ns -domain +sockets. +Normal file system access-control mechanisms are also +applied when referencing pathnames; e.g., the destination +of a +.Xr connect 2 +or +.Xr sendto 2 +must be writable. +.Sh PROTOCOLS +The +.Ux Ns -domain +protocol family is comprised of simple +transport protocols that support the +.Dv SOCK_STREAM +and +.Dv SOCK_DGRAM +abstractions. +.Dv SOCK_STREAM +sockets also support the communication of +.Ux +file descriptors through the use of the +.Va msg_control +field in the +.Fa msg +argument to +.Xr sendmsg 2 +and +.Xr recvmsg 2 . +.Pp +Any valid descriptor may be sent in a message. +The file descriptor(s) to be passed are described using a +.Vt "struct cmsghdr" +that is defined in the include file +.In sys/socket.h . +The type of the message is +.Dv 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. +.Pp +The received descriptor is a +.Em duplicate +of the sender's descriptor, as if it were created with a call to +.Xr dup 2 . +Per-process descriptor flags, set with +.Xr fcntl 2 , +are +.Em 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. +.Pp +The effective credentials (i.e., the user ID and group list) of a +peer on a +.Dv SOCK_STREAM +socket may be obtained using the +.Dv LOCAL_PEERCRED +socket option. +This may be used by a server to obtain and verify the credentials of +its client, and vice versa by the client to verify the credentials +of the server. +These will arrive in the form of a filled in +.Vt "struct xucred" +(defined in +.In sys/ucred.h ) . +The credentials presented to the server (the +.Xr listen 2 +caller) are those of the client when it called +.Xr connect 2 ; +the credentials presented to the client (the +.Xr connect 2 +caller) are those of the server when it called +.Xr listen 2 . +This mechanism is reliable; there is no way for either party to influence +the credentials presented to its peer except by calling the appropriate +system call (e.g., +.Xr connect 2 +or +.Xr listen 2 ) +under different effective credentials. +.Pp +.Tn UNIX +domain sockets support a number of socket options which can be set with +.Xr setsockopt 2 +and tested with +.Xr getsockopt 2 : +.Bl -tag -width ".Dv LOCAL_CONNWAIT" +.It Dv LOCAL_CREDS +This option may be enabled on a +.Dv SOCK_DGRAM +or a +.Dv SOCK_STREAM +socket. +This option provides a mechanism for the receiver to +receive the credentials of the process as a +.Xr recvmsg 2 +control message. +The +.Va msg_control +field in the +.Vt msghdr +structure points to a buffer that contains a +.Vt cmsghdr +structure followed by a variable length +.Vt sockcred +structure, defined in +.In sys/socket.h +as follows: +.Bd -literal +struct sockcred { + uid_t sc_uid; /* real user id */ + uid_t sc_euid; /* effective user id */ + gid_t sc_gid; /* real group id */ + gid_t sc_egid; /* effective group id */ + int sc_ngroups; /* number of supplemental groups */ + gid_t sc_groups[1]; /* variable length */ +}; +.Ed +.Pp +The +.Fn SOCKCREDSIZE +macro computes the size of the +.Vt sockcred +structure for a specified number +of groups. +The +.Vt cmsghdr +fields have the following values: +.Bd -literal +cmsg_len = CMSG_LEN(SOCKCREDSIZE(ngroups)) +cmsg_level = SOL_SOCKET +cmsg_type = SCM_CREDS +.Ed +.It Dv LOCAL_CONNWAIT +Used with +.Dv SOCK_STREAM +sockets, this option causes the +.Xr connect 2 +function to block until +.Xr accept 2 +has been called on the listening socket. +.El +.Sh SEE ALSO +.Xr socket 2 , +.Xr intro 4 +.Rs +.%T "An Introductory 4.3 BSD Interprocess Communication Tutorial" +.%B PS1 +.%N 7 +.Re +.Rs +.%T "An Advanced 4.3 BSD Interprocess Communication Tutorial" +.%B PS1 +.%N 8 +.Re |