UnixDomainSocket
Socket: A socket is one endpoint of a two-way communication link between two programs running on the network. This is a very low-level thing, everything else is implemented on top of TCP sockets.
Ref: https://zhuanlan.zhihu.com/p/234806787
最关键的一点是 若是远程的 net 连接,可以叫做 internet socket;而如果是本地的,则叫 domain socket( docker 有使用).
unix domain socket
Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信。与主机间的进程通信不同,它不是通过 "IP地址 + TCP或UDP端口号" 的方式进程通信,而是使用 socket 类型的文件来完成通信,因此在稳定性、可靠性以及效率方面的表现都很不错。
不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC 机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。
# socket 文件
server_sock = socket(AF_UNIX, SOCK_STREAM, 0);
if (server_sock == -1) {
printf("%s\n", "SOCKET ERROR");
exit(1);
}
Ref: https://yangleisx.github.io/2020/11/13/unix-socket/
了解Docker的同学应该知道Docker daemon监听一个docker.sock文件,这个docker.sock文件的默认路径是
/var/run/docker.sock
,这个Socket就是一个Unix domain socket