AF_UNIX与AF_LOCAL是一样的,只是历史遗留原因。
有SOCK_STREAM、SOCK_DGRAM、SOCK_SEQPACKET三种工作模式
1、SOCK_STREAM
流字节套,类似TCP,由于socket发送缓冲区的缘故,多次write数据会被缓冲区整合为一次底层send。禁用TCP Nagle算法的方式对AF_UNIX无效。
#include <netinet/in.h> // for IPPROTO_TCP
#include <netinet/tcp.h> // for TCP_NODELAY
int nodelay = 1;
ret = setsockopt(mSocket, IPPROTO_TCP, TCP_NODELAY,(void*)&nodelay,sizeof(nodelay));
if (ret == -1) {
printf("Couldn't setsockopt(TCP_NODELAY)\n");
}
2、SOCK_DGRAM
报文字节套,类似UDP的报文方式,理论上会导致错乱、丢失等风险,只是AF_UNIX性能很高,风险概率较小。SOCK_DGRAM的应用场合很少,因为流式套接字在本地的连接时间可以忽略,而SOCK_DGRAM发送接收都需要携带对方的本地地址,所以效率并没有提高。
3、SOCK_SEQPACKET
SOCK_SEQPACKET提供一个顺序确定的,可靠的,双向基于连接的so