天天看点

nginx源码学习Unix - Unix域协议socket地址结构:服务器端:客户端:参考文档:socketpair函数nginx中的socketpair使用:

说到什么是域协议就会出现这么个解释:

unix域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用api与在不同主机上执行客户/服务器通信所使用的api相同。unix域协议可以视为ipc方法之一。

我们白话解释下unix域协议在什么情况下使用和怎么使用?

unix域协议主要用在同一台机子的不同进程之间传递套接字。为什么不用tcp或者udp套接字呢?一是因为快。源自berkeley的实现中,unix域套接字往往比通信两端位于同一个主机的tcp套接字快出一倍。二是因为安全。unix套接字能提供额外的安全检查措施。

注意:unix域协议表示协议地址的是路径名,而不是inet域的ip地址和端口号

至于他们的程序和tcpsocket没有什么区别

服务端命令:

nginx源码学习Unix - Unix域协议socket地址结构:服务器端:客户端:参考文档:socketpair函数nginx中的socketpair使用:

客户端命令:

nginx源码学习Unix - Unix域协议socket地址结构:服务器端:客户端:参考文档:socketpair函数nginx中的socketpair使用:

<a href="http://memorymyann.iteye.com/blog/649619">http://memorymyann.iteye.com/blog/649619</a>

<a href="http://hi.baidu.com/wangjianzhong1981/blog/item/d91d1c1073b2e409203f2e4d.html">http://hi.baidu.com/wangjianzhong1981/blog/item/d91d1c1073b2e409203f2e4d.html</a>

#include &lt;sys/socket.h&gt;

int socketpair(int family, int type, int protocol, int sockfd[2]);

1 socketpair创建两个socket,并连接起来,只用于unix域

2 family参数必须为af_local,protocol参数必须为0,

socketpair函数主要用在什么地方呢?当父进程fork出一个子进程的时候,两个进程需要使用unix套接字进行进程间通信,那么socketpair就可以使用到了

发现说什么还是不如写代码实在:

执行程序:

nginx源码学习Unix - Unix域协议socket地址结构:服务器端:客户端:参考文档:socketpair函数nginx中的socketpair使用:

在nginx_process.c中你会看到这个:

nginx源码学习Unix - Unix域协议socket地址结构:服务器端:客户端:参考文档:socketpair函数nginx中的socketpair使用:

这里得到几个信息:

1 solaris 9 没有af_local这个属性,所以使用af_unix属性来代替

2 nginx每个worker进程之间都有channel通道,通道就是使用socketpair创建的

继续阅读