Provided by:
manpages-zh_1.5-1_all 
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