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) |