Provided by: manpages-zh_1.5.1-1_all bug

NAME(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()
       PF_UNIX                (也称作                PF_LOCAL                )
       套接字族用来在同一机器上的提供有效的进程间通讯.Unix
       套接字可以是匿名的(由               socketpair(2)                创建),
       也可以与套接字类型文件相关联.        Linux      还支持一种抽象名字空间,
       它是独立于文件系统的.

       有效的类型有:      SOCK_STREAM      用于面向流的套接字,      SOCK_DGRAM
       用于面向数据报的套接字,其可以保存消息界限.                         Unix
       套接字总是可靠的,而且不会重组数据报.

       Unix       套接字支持把文件描述符或者进程的信用证明作为数据报的辅助数据
       传递给其它进程.

ADDRESS FORMAT()
       unix                                   地址定义为文件系统中的一个文件名
       或者抽象名字空间中的一个单独的字符串.          由         socketpair(2)
       创建的套接字是匿名的.对于非匿名的套接字,目标地址可使用 connect(2) 设置.
       本地地址可使用 bind(2)  设置.   当套接字连接上而且它没有一个本地地址时,
       会自动在抽象名字空间中生成一个唯一的地址.

              #define UNIX_PATH_MAX   108

              struct sockaddr_un {
              sa_family_t     sun_family;     /* AF_UNIX */
              char    sun_path[UNIX_PATH_MAX];        /* 路径名 */
              };

       sun_family            总是包含            AF_UNIX.             sun_path
       包含空零结尾的套接字在文件系统中的路径名.         如果         sun_path
       以空零字节开头,它指向由         Unix         幸槟?槲さ某橄竺挚占.
       该套接字在此名字空间中的地址由        sun_path        中的剩余字节给定.
       注意抽象名字空间的名字都不是空零终止的.

SOCKET OPTIONS()
       由于历史砸, 这些套接字选项通过 SOL_SOCKET 类型确定, 即使它们是 PF_UNIX
       指定的.    它们可以由   setsockopt(2)   设置.    通过指定    SOL_SOCKET
       作为套接字族 用 getsockopt(2) 来读取.

       SO_PASSCRED                         允许接收进程辅助信息发送的信用证明.
       当设置了该选项且套接字尚未连接时,
       则会自动生成一个抽象名字空间的唯一名字.  值为一个整数布尔标识.

ANCILLARY MESSAGES()
       由于历史砸,这些辅助信息类型通过    SOL_SOCKET   类型确定,   即使它们是
       PF_UNIX 指定的.  要发送它们, 可设置结构 cmsghdr  的  cmsg_level  字段为
       SOL_SOCKET,   并设置  cmsg_type  字段为其类型.  要获得更多信息,  请参看
       cmsg(3).

       SCM_RIGHTS
              为其他进程发送或接收一套打开文件描述符.
              其数据部分包含一个文件描述符的整型数组.
              已传文件描述符的效果就如它们已由 dup(2) 创建过一样.

       SCM_CREDENTIALS
              发送或者接收 unix  信用证明.   可用作认证.信用证明传送以  struct
              ucred 辅助信息的形式传送.

              struct ucred {
              pid_t   pid;     /* 发送进程的进程标识 */
              uid_t   uid;     /* 发送进程的用户标识 */
              gid_t   gid;     /* 发送进程的组标识 */
              };

       发送者确定的信用证明由内核检查.          一个带有有效用户标识         0
       的进程允许指定不与其自身值相
       匹配的值.发送者必须确定其自身的进程标识(除非它带有      CAP_SYS_ADMIN),
       其用户标识,有效用户标识或者设置用户标识(除非它带有         CAP_SETUID),
       以及其组标识,有效组标识或者设置组标识(除非它带有           CAP_SETGID).
       为了接收一条 struct ucred 消息,必须在套接字上激活 SO_PASSCRED 选项.

VERSIONS()
       SCM_CREDENTIALS          和抽象名字空间是在          Linux          2.2
       中引入的,不应该在要求可移植的程序中使用.

NOTES()
       在  Linux  实现中,  在文件系统中可见的套接字拥有它们所在目录的权限许可.
       它们的所有者,组和权限可以作修改.
       如果进程不拥有对创建的套接字所在目录的写和搜索(执行)权限,
       则创建一个新的套接字会失败.           这种执行方式与许多由          BSD
       发展而来的系统不同,      那些系统会忽略      Unix     套接字所需的权限.
       可移植的程序不应把这项功能用于安全方面.

       绑定文件名到套接字会在文件系统中创建一个套接字,
       这个套接字在它不再需要时必须由调用者 删除(使用 unlink(2)).  通用的 Unix
       相关语义可适用;    套接字可在任何时候删除,    而且当最后一个引用关闭时,
       最终会从文件系统中删除.

       要传递文件描述符或者信用证明, 你需要发送/读取至少一个字节.

ERRORS()
       ENOMEM 内存溢出.

       ECONNREFUSED
              connect(2)                       调用了一个未在监听的套接字对象.
              这可能发生在远程套接字不存在或者文件名不是套接字的时候.

       EINVAL 传递了无效参数.    通常的产生砸蚴且汛刂返   sun_type   字段的
              AF_UNIX 设置丢失, 或者套接字对应用的操作处于无效状态.

       EOPNOTSUPP
              在非面向流的套接字上调用了流操作,或者试图使用出界的数据选项.

       EPROTONOSUPPORT
              传递的幸槭欠 PF_UNIX 的.

       ESOCKTNOSUPPORT
              未知的套接字类型.

       EPROTOTYPE
              远程套接字与本地套接字类型不匹配 (SOCK_DGRAM 对 SOCK_STREAM).

       EADDRINUSE
              选择的本地地址已菊加,或者文件系统套接字对象已敬嬖.

       EISCONN
              在一个已玖拥奶捉幼稚系饔                           connect(2)
              或者指定的目标地址在一个已连接的套接字上.

       ENOTCONN
              套接字操作需要一个目的地址,但是套接字尚未连接.

       ECONNRESET
              远程套接字意外关闭.

       EPIPE  远程套接字在一个流套接字上关闭了.如果激活,会同时发送一个 SIGPIPE
              标识.这可以通过传递    MSG_NOSIGNAL   标识给   sendmsg(2)   或者
              recvmsg(2) 来避免.

       EFAULT 用户内存地址无效.

       EPERM  发送者在 struct ucred 中传递无效的信用证明.

       当生成一个文件系统套接字对象时,
       可能会由通用套接层或者文件系统产生其它错误.
       要获得更多信息,可参见合适的手册页.

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

CREDITS()
       本man页作者Andi Kleen.

[riser <boomer@ccidnet.com>

[2001/07/19

ã€åä¸æ³å›é·linuxan:
       http://cmpp.linuxforum.net