Provided by: manpages-zh_1.5.1-2_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