Chinaunix首页 | 论坛 | 博客
  • 博客访问: 316648
  • 博文数量: 79
  • 博客积分: 1480
  • 博客等级: 上尉
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 15:29
文章分类

全部博文(79)

文章存档

2012年(1)

2011年(5)

2010年(19)

2009年(54)

我的朋友

分类: C/C++

2010-09-19 09:53:12

UNIX Domain Sockets
1、概述
(1)用于同一机器IPC,比Internet domain sockets(也可用于同1机器IPC)更有效率,因为UDS只拷贝数据,没有协议执行,没有网络头的增加和移除,没有CRC,没有SEQ和ACK
(2)UDS像一个socket和pipe的交叉,提供stream和datagram接口;UDS服务是可靠的,信息不会丢失或者投递错序,可以用面向网络的socket接口,也可以用socketpair()创建一对unnamed, connected UDS

#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sockfd[2]);
           Returns: 0 if OK, -1 on error

2、Naming UNIX Domain Sockets
(1)socketpair()创建的socket没有名字,意味着不能被unrelated进程addressed(bind)
(2)UDS的地址格式

#include <sys/un.h>
struct sockaddr_un {
    sa_family_t sun_family; // AF_UNIX
    char sun_path[108]; // pathname
};

当bind一个地址到UDS,系统创建1个S_IFSOCK类型的文件,用的名字跟sun_path指定的一样
此文件存在只是给client一个共同的socket name,不能打开,不能用于应用程序通信;
如果文件已经存在,则bind出错; socket关闭,此文件自动删除,一般使用前都会unlink它
3、Unique Connections
UNIX Domain Socket版本的
serv_listen()
serv_accept()
cli_conn()
(P598)
阅读(707) | 评论(0) | 转发(0) |
0

上一篇:Advanced IPC(1)

下一篇:《牵挂》

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