[外一篇]关于Unix Domain Socket

本文详细阐述了UnixDomainSocket的特点及优势,特别是其在本地进程间通信上的高效性和独特功能——传递描述符。解释了描述符传递的概念,并说明了其与普通socket的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

咋一看名字,虽然有个socket,但是它的用场和常说的“网络”socket有所不同。它实际上是一种本地IPC,以socket为名是因为它和普通socket使用的接口是一致的。

虽说普通的socket也可以用作本地IPC,但是从效率上和功能上,要逊于Unix Domain Socket。首先,Unix Domain Socket虽然有socket的名,但是它的数据不需要经过网络协议栈处理,而是通过其它的机制,比经过协议栈要快;再次,重要的是,它提供普通socket提供不了的功能----在进程间传递描述符。

进程间传递描述符是个什么概念呢?比如,主机有2个进程A和B,A有一个描述符fd(可以是任意的描述符,文件或socket都可以),那么A可以通过Unix Domain Socket将fd“传”给B,B收到之后,就可以对fd所对应的文件/socket进行操作。第一次听到的时候感觉很神奇!

需要理解的时候,传递描述符并不是指将fd的值传递。将fd传递是没有任何意义的,因为fd只是一个数字代号而已。所谓的传递,其实是在进程B的上下文中打开fd所指的对象(会使对象的引用数加1),因此利用sendmsg发送的fd值,和用recvmsg收到的fd值有可能是不相等的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值