other languages
other sections
UNIX(7) | Linux程序员手册 | UNIX(7) |
NAME(名称)¶
unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - 用于本地内部进程通讯的套接字。SYNOPSIS(总览)¶
#include <sys/socket.h>DESCRIPTION(描述)¶
PF_UNIX (也称作 PF_LOCAL ) 套接字族用来在同一机器上的提供有效的进程间通讯.Unix 套接字可以是匿名的(由 socketpair(2) 创建), 也可以与套接字类型文件相关联. Linux 还支持一种抽象名字空间, 它是独立于文件系统的.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]; /* 路径名 */ };
SOCKET OPTIONS(套接字选项)¶
由于历史原因, 这些套接字选项通过 SOL_SOCKET 类型确定, 即使它们是 PF_UNIX 指定的. 它们可以由 setsockopt(2) 设置. 通过指定 SOL_SOCKET 作为套接字族 用 getsockopt(2) 来读取.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; /* 发送进程的组标识 */ };
VERSIONS(版本)¶
SCM_CREDENTIALS 和抽象名字空间是在 Linux 2.2 中引入的,不应该在要求可移植的程序中使用.NOTES(注意)¶
在 Linux 实现中, 在文件系统中可见的套接字拥有它们所在目录的权限许可. 它们的所有者,组和权限可以作修改. 如果进程不拥有对创建的套接字所在目录的写和搜索(执行)权限, 则创建一个新的套接字会失败. 这种执行方式与许多由 BSD 发展而来的系统不同, 那些系统会忽略 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《中国linux论坛man手册页翻译计划》:¶
http://cmpp.linuxforum.net1999年5月7日 | Linux 手册页 |