Unix域协议并不是一个实际的协议族,它只是在同一主机上进行客户-服务器通信时,使用
与在不同主机上进行客户-服务器通信时使用的相同的API(套接口或XTI)的一种方法。
Unix域提供了两种类型的套接口:字节流套接口(与TCP类型)和数据报套接口(与UDP类似)。
使用Unix域有哪些好处呢:
首先,速度上Unix域套接口的速度通常是TCP套接口的两倍。
其次,Unix域套接口可以用来在同一主机上的不同进程间传递描述字。
最后,Unix域套接口的较新的实现中可以向服务器提供客户的凭证,这能提供附加的安全检查。
注意:Unix域中用来标识客户和服务器的协议地址是通常的文件系统中的路径名。
Unix域套接口地址结构
struct sockaddr_un
{
__SOCKADDR_COMMON (sun_);
char sun_path[108]; /* Path name. */
};
通常是定义在<sys/un.h>中。
{
__SOCKADDR_COMMON (sun_);
char sun_path[108]; /* Path name. */
};
通常是定义在<sys/un.h>中。
__SOCKADDR_COMMON是定义在/usr/include/bits/sockaddr.h中
#define __SOCKADDR_COMMON(sa_prefix) \
sa_family_t sa_prefix##family
sa_family_t sa_prefix##family
sun_path数组中存放的路径名必须是以一个空字符结尾。
在不同的系统上sun_path数组的长度不一定都是108,因此在使用前首先要用sizeof获得sun_path的长度,
然后再存放合适长度的路径名。