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 指定的. 要发送它们, 可设置结构 cmsghdrcmsg_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 中传递无效的信用证明.

当生成一个文件系统套接字对象时, 可能会由通用套接层或者文件系统产生其它错误. 要获得更多信息,可参见合适的手册页.

unix, PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL - 用于本地内部进程通讯的套接字。的更多相关文章

  1. 《Unix网络编程》卷一(简介TCP/IP、基础套接字编程)

    通常说函数返回某个错误值,实际上是函数返回值为-1,而全局变量errno被置为指定的常值(即称函数返回这个错误值). exit终止进程,Unix在一个进程终止时总是关闭该进程所有打开的描述符. TCP ...

  2. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  3. Linux/UNIX套接字连接

    套接字连接 套接字是一种通信机子.凭借这样的机制.客户/server系统的开发工作既能够在本地单机上进行.也能够夸网络进行. 套接字的创建和使用与管道是有差别的.由于套接字明白地将客户和server区 ...

  4. Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级 ...

  5. 【UNIX网络编程(二)】基本TCP套接字编程函数

    基于TCP客户/server程序的套接字函数图例如以下: 运行网络I/O.一个进程必须做的第一件事就是调用socket函数.指定期望的通信协议类型. #include <sys/socket.h ...

  6. 【unix网络编程第三版】阅读笔记(三):基本套接字编程

    unp第三章主要介绍了基本套接字编程函数.主要有:socket(),bind(),connect(),accept(),listen()等. 本博文也直接进入正题,对这几个函数进行剖析和讲解. 1. ...

  7. unix网络编程——TCP套接字编程

    TCP客户端和服务端所需的基本套接字.服务器先启动,之后的某个时刻客户端启动并试图连接到服务器.之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响应.该过程一直持续下去,直到客户端关闭,给服 ...

  8. Unix网络编程代码 第13章 守护进程和inetd超级服务器

    1. 概述 守护进程是在后台运行且不与任何控制终端关联的进程.unix系统通常有很多守护进程在后台运行,执行不同的管理任务.    守护进程没有控制终端通常源于它们由系统初始化脚本启动.然而守护进程也 ...

  9. UNIX环境高级编程 第16章 网络IPC:套接字

    上一章(15章)中介绍了UNIX系统所提供的多种经典进程间通信机制(IPC):管道PIPE.命名管道FIFO.消息队列Message Queue.信号量Semaphore.共享内存Shared Mem ...

随机推荐

  1. 运维监控篇Zabbix简单的性能调优

    Zabbix是一款高性能的分布式监控报警系统.比如现在常见的家用台式机配置处理器I5-3470.内存4GB1600MHz.硬盘7200rpm就能够监控1000台左右的HOST,是的没错Zabbix就是 ...

  2. C#中的元组对象Tuple

    原文:C#中的元组对象Tuple 一.什么是元组 元组就是一些对象的集合,在我们编程时,比如一个人的信息,我们常常创建一个Person类去描述一个人,传统的做法如下: public class Per ...

  3. 循序渐进学.Net Core Web Api开发系列【13】:中间件(Middleware)【有源码】

    原文:循序渐进学.Net Core Web Api开发系列[13]:中间件(Middleware) 系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:ht ...

  4. Oracle中删表遇到ORA-14452

    删表的时候碰到表忙的情况,会报错. DROP TABLE TMP_TAB_T_AGENT * ERROR at line 1: ORA-14452: attempt to create, alter ...

  5. 求背景图片左边到#box盒子左边框外侧的距离

    box{ width: 100px; height: 200px; background: pink; padding: 100px; border: 80px solid; background-i ...

  6. InnoDB中没有主键是如何运转的

    本文章翻译自 https://blog.jcole.us/2013/05/02/how-does-innodb-behave-without-a-primary-key/ 原文作者的创作背景 一个下午 ...

  7. display: flex属性介绍

    参考文章: 阮大神的:Flexbox 布局的最简单表单(主要讲解项目item上的属性) 另一位大神的:布局神器display:flex(整体讲解的非常详细) 之前没有仔细看flex布局(弹性布局),设 ...

  8. css雪碧图(精灵图)与字体图标的介绍以及对比

    css雪碧图(精灵图)与字体图标的介绍以及对比 设想一个实际场景:在一个页面为了展示,我们放置了很多独立的小图片,浏览器在显示页面的时候,就需要向服务器就会发送很多请求,来获取并加载这些小图片,但是这 ...

  9. 游戏game

    1.log4cxx 日志 2.protobuf  数据交互(类似json 3.boost.asio  网络库 4.boost.python 脚本支持 5.语法树 +  c++处理excel资源

  10. 39th 迷迷糊糊 二豆玩不转了

    今天学的语法 1.   #  {} . format()的传送作用 请从键盘获取一个整数,求他的平方根,要求: 1 如果这个整数是大于等于0,则直接打印其平方根 2 否则, 打印其绝对值的平方根 x ...