UNIX 域套接字
UNIX 域套接字(UNIX Domain Socket,简称 UDS)是一种在同一台机器上的进程间通信(IPC,Inter-Process Communication)机制,允许不同的进程通过文件系统中的特殊文件进行数据交换,而不需要通过网络协议栈。这使得 UNIX 域套接字在本地通信中比传统的 TCP/IP 套接字更高效。
UNIX 域套接字的特点
本地通信:UNIX 域套接字仅限于同一台机器上的进程之间的通信。它不涉及网络层的协议,因此通信延迟较低,效率较高。
基于文件系统:UNIX 域套接字使用文件系统中的特殊文件(通常是以 .socket 为扩展名的文件)作为通信的端点。这些文件通常位于 /tmp 或 /var/run 等目录下。
流式数据:和 TCP 套接字类似,UNIX 域套接字也支持面向流的通信(SOCK_STREAM),以及无连接的报文通信(SOCK_DGRAM)。
创建套接字时使用本地协议PF_UNIX(或PF_LOCAL)。
socket(AF_LOCAL, SOCK_STREAM, 0)
socket(AF_LOCAL, SOCK_DGRAM, 0)
本地地址结构
struct sockaddr_un // <sys/un.h>
{
sa_family_t sun_family;
char sun_path[108]; // 套接字文件的路径
};
填充地址结构
struct sockaddr_un myaddr;
bzero(&myaddr, sizeof(myaddr));
myaddr.sun_family = AF_UNIX;
strcpy(myaddr.sun_path, “/tmp/mysocket”);