NAME(名 稱 )
unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - 用 於 本 地 內 部 進 程 通 訊 的 套 接 字 。
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 [AT] ccidnet.com>
[中 文 版 最 新 更 新 ]
2001/07/19
《 中 國 linux論 壇 man手 冊 頁 翻 譯 計 劃 》 :
跋
本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。 中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh