Chinaunix首页 | 论坛 | 博客
  • 博客访问: 120432
  • 博文数量: 41
  • 博客积分: 2564
  • 博客等级: 少校
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-20 19:17
文章分类

全部博文(41)

文章存档

2009年(41)

我的朋友

分类: LINUX

2009-04-16 11:23:29

咋一看名字,虽然有个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值有可能是不相等的。

阅读(3871) | 评论(0) | 转发(0) |
0

上一篇:高级I/O函数

下一篇:Nonblocking I/O

给主人留下些什么吧!~~