1、Unix域的socket
•
与
Internet
域的
socket
机制相比,
Unix
域的
socket
更有效:
•
1
、无需执行协议处理
2
、无需计算校验和
3
、无需产生顺序号
4
、无需确认
•
缺点是,只能在同一个主机上通信
•
先看一下
socketpair
函数,创建一对连接的
Unix
域
socket
•
#include <sys/
socket.h
>
•
int
socketpair
(
int
domain,
int
type,
int
protocol,
int
sockfd
[2]);
•
命名
Unix
域
socket
,以便非相关进程间通信,示例:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
int main(void)
{
int fd, size;
struct sockaddr_un un;
un.sun_family = AF_UNIX;
strcpy(un.sun_path, "foo.socket");
if( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0 )
{
perror("socket");
exit(0);
}
size = (int)((long)(&((struct sockaddr_un *)0)->sun_path));
size += strlen(un.sun_path);
if( bind(fd, (struct sockaddr *)&un, size) < 0 )
{
perror("bind");
exit(0);
}
printf("UNIX domain socket bound\n");
exit(0);
}
•
剩余的操作与
Internet
域的
socket
机制类似,如:
listen
、
accept
…
2、传递文件描述符
•
文件描述符在进程间传递是可行的
•
发送进程与接收进程共享同一个
file table
项,类似
fork
之后父子进程间描述符的的关系