unix(7)





NAME

       unix,  PF_UNIX,  AF_UNIX, PF_LOCAL, AF_LOCAL - Sockets for
       local interprocess communication.


SYNOPSIS

       #include <sys/socket.h>
       #include <sys/un.h>

       unix_socket = socket(PF_UNIX, type, 0);
       error = socketpair(PF_UNIX, type, 0, int *sv);



DESCRIPTION

       The PF_UNIX (also known as PF_LOCAL  )  socket  family  is
       used  to communicate between processes on the same machine
       efficiently. Unix sockets can be either anonymous (created
       by  socketpair(2))  or  associated  with  a file of socket
       type.  Linux also supports an abstract namespace which  is
       independent of the file system.

       Valid  types  are SOCK_STREAM for a stream oriented socket
       and SOCK_DGRAM for a datagram oriented  socket  that  pre­
       serves  message  boundaries. Unix sockets are always reli­
       able and don't reorder datagrams.

       Unix sockets support passing file descriptors  or  process
       credentials  to other processes as ancillary data to data­
       grams.



ADDRESS FORMAT

       A unix address is defined as a filename in the  filesystem
       or  as  a unique string in the abstract namespace. Sockets
       created by socketpair(2) are anonymous. For  non-anonymous
       sockets  the  target  address can be set using connect(2).
       The local address can be set using bind(2).  When a socket
       is connected and it doesn't already have a local address a
       unique address in the abstract namespace will be generated
       automatically.

              #define UNIX_PATH_MAX    108

              struct sockaddr_un {
                  sa_family_t  sun_family;              /* AF_UNIX */
                  char         sun_path[UNIX_PATH_MAX]; /* pathname */
              };

       sun_family always contains AF_UNIX.  sun_path contains the
       zero-terminated pathname of the socket in the file system.
       If  sun_path  starts  with  a  zero  byte it refers to the
       abstract namespace maintained by the Unix protocol module.
       The  socket's  address  in  this namespace is given by the
       rest of the bytes in sun_path.  Note  that  names  in  the
       abstract namespace are not zero-terminated.




SOCKET OPTIONS

       For  historical reasons these socket options are specified
       with a SOL_SOCKET type even though they are  PF_UNIX  spe­
       cific.   They  can be set with setsockopt(2) and read with
       getsockopt(2) by specifying SOL_SOCKET as the socket  fam­
       ily.

       SO_PASSCRED  enables  the  receiving of the credentials of
       the sending process ancillary message. When this option is
       set  and the socket is not connected yet an unique name in
       the abstract namespace will  be  generated  automatically.
       Expects an integer boolean flag.



ANCILLARY MESSAGES

       For  historical  reasons  these ancillary message type are
       specified with a SOL_SOCKET  type  even  though  they  are
       PF_UNIX  specific.   To send them set the cmsg_level field
       of the struct cmsghdr  to  SOL_SOCKET  and  the  cmsg_type
       field to the type. For more information see cmsg(3).


       SCM_RIGHTS
              Send or receive a set of open file descriptors from
              another process.  The data portion contains a inte­
              ger array of the file descriptors.  The passed file
              descriptors behave as like they have  been  created
              with dup(2).


       SCM_CREDENTIALS
              Send or receive unix credentials.  This can be used
              for authentication.  The credentials are passed  as
              a struct ucred ancillary message.

              struct ucred {
                  pid_t  pid;  /* process id of the sending process */
                  uid_t  uid;  /* user id of the sending process */
                  gid_t  gid;  /* group id of the sending process */
              };

       The  credentials which the sender specifies are checked by
       the kernel.  A process with effective user id 0 is allowed
       to  specify  values that do not match his own.  The sender
       must  specify  its  own  process   id   (unless   it   has
       CAP_SYS_ADMIN), its user id, effective user id or set user
       id (unless it has CAP_SETUID), and its group id, effective
       group  id  or set group id (unless it has CAP_SETGID).  To
       receive a struct ucred message the SO_PASSCRED option must
       be enabled on the socket.



VERSIONS

       SCM_CREDENTIALS and the abstract namespace were introduced



       with Linux 2.2 and should not be  used  in  portable  pro­
       grams.



NOTES

       In  the Linux implementation, sockets which are visible in
       the filesystem honour the  permissions  of  the  directory
       they  are in. Their owner, group and their permissions can
       be changed.  Creation of a new socket  will  fail  if  the
       process  does  not have write and search (execute) permis­
       sion on the directory the socket is created in.   Connect­
       ing  to  the socket object requires read/write permission.
       This behavior differs from many BSD derived systems  which
       ignore  permissions  for  Unix  sockets. Portable programs
       should not rely on this feature for security.

       Binding to a socket with a filename creates  a  socket  in
       the file system that must be deleted by the caller when it
       is no longer needed (using  unlink(2)).   The  usual  Unix
       close-behind  semantics  apply; the socket can be unlinked
       at any time and will be finally removed from the file sys­
       tem when the last reference to it is closed.

       To  pass  file  descriptors  or  credentials  you  need to
       send/read at least one byte.



ERRORS

       ENOMEM Out of memory.


       ECONNREFUSED
              connect(2) called with a socket object  that  isn't
              listening.  This  can happen when the remote socket
              does not exist or the filename is not a socket.


       EINVAL Invalid argument passed.  A  common  cause  is  the
              missing setting of AF_UNIX in the sun_type field of
              passed addresses or the socket being in an  invalid
              state for the applied operation.


       EOPNOTSUPP
              Stream  operation  called  on  non-stream  oriented
              socket or tried to use the out-of-band data option.


       EPROTONOSUPPORT
              Passed protocol is not PF_UNIX.


       ESOCKTNOSUPPORT
              Unknown socket type.



       EPROTOTYPE
              Remote  socket does not match the local socket type
              (SOCK_DGRAM vs.  SOCK_STREAM)


       EADDRINUSE
              Selected local address is already taken or filesys­
              tem socket object already exists.


       EISCONN
              connect(2) called on an already connected socket or
              a target  address  was  specified  on  a  connected
              socket.


       ENOTCONN
              Socket  operation  needs  a target address, but the
              socket is not connected.


       ECONNRESET
              Remote socket was unexpectedly closed.

       EPIPE  Remote socket was closed on  a  stream  socket.  If
              enabled,  a  SIGPIPE  is  sent as well. This can be
              avoided  by  passing  the  MSG_NOSIGNAL   flag   to
              sendmsg(2) or recvmsg(2).

       EFAULT User memory address was not valid.

       EPERM  The sender passed invalid credentials in the struct
              ucred.

       Other errors can be generated by the generic socket  layer
       or  by the filesystem while generating a filesystem socket
       object. See the appropriate manual pages for more informa­
       tion.


SEE ALSO

       recvmsg(2), sendmsg(2), socket(2), socketpair(2), cmsg(3),
       socket(7)


CREDITS

       This man page was writen by Andi Kleen.












Man(1) output converted with man2html