UNIX Domain Socket(UDS)是什么?同一台主机间进程间通信

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UNIX Domain Socket(UDS)是什么?同一台主机间进程间通信相关的知识,希望对你有一定的参考价值。

文章目录

概述

Linux下进程通讯方式有很多,比较典型的有套接字,平时比较常用的套接字是基于TCP/IP协议的,适用于两台不同主机上两个进程间通信, 通信之前需要指定IP地址. 但是如果同一台主机上两个进程间通信用套接字,还需要指定ip地址,有点过于繁琐. 这个时候就需要用到UNIX Domain Socket, 简称UDS,

UDS的优势:

  • UDS传输不需要经过网络协议栈,不需要打包拆包等操作,只是数据的拷贝过程
  • UDS分为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据包套接字),由于是在本机通过内核通信,不会丢包也不会出现发送包的次序和接收包的次序不一致的问题

流程介绍

如果熟悉Socket的话,UDS也是同样的方式, 区别如下:

  • UDS不需要IP和Port, 而是通过一个文件名来表示
  • domain 为 AF_UNIX
  • UDS中使用sockaddr_un表示
struct sockaddr_un 
    sa_family_t sun_family; /* AF_UNIX */
    char sun_path[UNIX_PATH_MAX];   /* pathname */
;

服务端: socket -> bind -> listen -> accet -> recv/send -> close
客户端: socket -> connect -> recv/send -> close

参考文章:Linux下进程间通讯方式 - UNIX Domain Socket

以上是关于UNIX Domain Socket(UDS)是什么?同一台主机间进程间通信的主要内容,如果未能解决你的问题,请参考以下文章

Dapr 1.7 之 Unix Domain socket 他来了

【socket】关于Unix域套接字(Unix Domain Socket)

Unix domain socket 简介

Unix域套接字-Unix Domain Socket(转)

Unix domain socket

unix domain socket 的 UDP 通信