Provided by: manpages-zh_1.5-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(z)
       PF_UNIX                (也稱作                PF_LOCAL                )
       套接字族用來在同一機器上的提供有效的進程間通訊.Unix
       套接字可以是匿名的(由               socketpair(2)                創建),
       也可以與套接字類型檔案相關聯.        Linux      還支持一種抽象名字空間,
       它是獨立於檔案系統的.

       有效的類型有:   SOCK_STREAM   用於惘V流的套接字,    SOCK_DGRAM    用於-
       惘V數據報的套接字,其可以保存消息界.    Unix  套接字總是可靠的,而且不會-
       垓梩痝.

       Unix        套接字支持把檔案描z符或者進程的信用証明作為數據報的輔助數據
       傳遞給其它進程.

ADDRESS FORMAT()
       unix 地址定義為檔案系統中的一蚗犰W 或者抽象名字空間中的一茬瞈W的字符串.
       由 socketpair(2) 創建的套接字是匿名的.對於非匿名的套接字,目標地址可使用
       connect(2)        設置.        本地地址可使用       bind(2)       設置.
       當套接字連接上而且它沒有一茈誚a地址時,    會自動在抽象名字空間中生成一-
       荌艉@的地址.

              #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 類型確定, 即使它怓O PF_UNIX
       指定的.    它怚i以由   setsockopt(2)   設置.     通過指定    SOL_SOCKET
       作為套接字族 用 getsockopt(2) 來讀取.

       SO_PASSCRED                         允許接收進程輔助信息發送的信用証明.
       當設置了該選項且套接字尚未連接時,                       則會自動生成一-
       茤漍H名字空間的唯一名字.  陘@蚞蒱牯蜈陏.

ANCILLARY MESSAGES()
       由於歷史鴞],這些輔助信息類型通過 SOL_SOCKET 類型確定, 即使它怓O PF_UNIX
       指定的.  n發送它, 可設置結構 cmsghdr 的 cmsg_level 字段為  SOL_SOCKET,
       並設置 cmsg_type 字段為其類型. n獲得更多信息, 請參看 cmsg(3).

       SCM_RIGHTS
              為其他進程發送或接收一套打開檔案描z符.  其數據部分包含一蚗仵袨y-
              z符的整型數組.       已傳檔案描z符的效果就如它怳w由       dup(2)
              創建過一樣.

       SCM_CREDENTIALS
              發送或者接收  unix  信用証明.   可用作認証.信用証明傳送以 struct
              ucred 輔助信息的形式傳送.

              struct ucred {
              pid_t   pid;     /* 發送進程的進程標識 */
              uid_t   uid;     /* 發送進程的使用者標識 */
              gid_t   gid;     /* 發送進程的組標識 */
              };

       發送者確定的信用証明由核心檢查.         一荓a有有效使用者標識         0
       的進程允許指定不與其自亞相                 匹配的.發送者必須確定其自-
       的進程標識(除非它帶有                                   CAP_SYS_ADMIN),
       其使用者標識,有效使用者標識或者設置使用者標識(除非它帶有   CAP_SETUID),
       以及其組標識,有效組標識或者設置組標識(除非它帶有           CAP_SETGID).
       為了接收一條 struct ucred 消息,必須在套接字上激活 SO_PASSCRED 選項.

VERSIONS()
       SCM_CREDENTIALS   和抽象名字空間是在   Linux   2.2   中引入的,不應該在-
       n求可移植的程式中使用.

NOTES()
       在 Linux 實現中, 在檔案系統中可見的套接字擁有它怍狾b目錄的權許可.   它-
       怐漫狾釭,組和權可以作蚹.
       如果進程不擁有對創建的套接字所在目錄的寫和搜索(執行)權,       則創建一-
       虓s的套接字會失敗.     這種執行方式與許多由   BSD   發展而來的系統不同,
       那些系統會忽略                   Unix                   套接字所需的權.
       可移植的程式不應把這項功能用於安全方情D

       綁定檔名到套接字會在檔案系統中創建一荇M接字,       這荇M接字在它不再需-
       n時必須由調用者  刪除(使用  unlink(2)).   通用的  Unix  相關語義可適用;
       套接字可在任何時唭R除, 而且當最後一茪犍恞鶶洫, 最終會從檔案系統中刪除.

       n傳遞檔案描z符或者信用証明, 你需n發送/讀取至少一茼r節.

ERRORS()
       ENOMEM 記憶體溢出.

       ECONNREFUSED
              connect(2)                        調用了一茈憐b監聽的套接字對象.
              這可能發生在遠程套接字不存在或者檔名不是套接字的時.

       EINVAL 傳遞了無效參數.    通常的產生鴞]是已傳地址的   sun_type   字段的
              AF_UNIX 設置丟失, 或者套接字對應用的操作處於無效狀態.

       EOPNOTSUPP
              在非惘V流的套接字上調用了流操作,或者試圖使用出界的數據選項.

       EPROTONOSUPPORT
              傳遞的協議是非 PF_UNIX 的.

       ESOCKTNOSUPPORT
              未知的套接字類型.

       EPROTOTYPE
              遠程套接字與本地套接字類型不匹配 (SOCK_DGRAM 對 SOCK_STREAM).

       EADDRINUSE
              選擇的本地地址已經佔用,或者檔案系統套接字對象已經存在.

       EISCONN
              在一茪w經連接的套接字上調用  connect(2)  或者指定的目標地址在一-
              茪w連接的套接字上.

       ENOTCONN
              套接字操作需n一茈堛漲a址,但是套接字尚未連接.

       ECONNRESET
              遠程套接字意外關閉.

       EPIPE  遠程套接字在一茯y套接字上關閉了.如果激活,會同時發送一   SIGPIPE
              標識.這可以通過傳遞   MSG_NOSIGNAL   標識給   sendmsg(2)    或者
              recvmsg(2) 來避免.

       EFAULT 使用者記憶體地址無效.

       EPERM  發送者在 struct ucred 中傳遞無效的信用証明.

       當生成一蚗仵蚳t統套接字對象時,
       可能會由通用套接層或者檔案系統產生其它錯誤.
       n獲得更多信息,可參見合適的手冊.

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

ã€mä¸ä»åœç˜linuxan:
       http://cmpp.linuxforum.net