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