UNIX域套接字接口相似性

简介: UNIX域套接字接口相似性

UNIX域套接字(Unix Domain Socket,UDS)接口在设计上与传统的Internet套接字(例如基于TCP/IP的套接字)具有很高的相似性。它们都采用了BSD套接字编程接口,这意味着开发者可以使用熟悉的系统调用来创建、绑定、连接、监听、发送和接收数据。

以下是一些主要的接口相似性:

  • 创建套接字:通过调用 socket() 函数创建套接字,其原型相同,只是domain参数设置为AF_UNIX(或PF_UNIX,两者等效)而非AF_INETAF_INET6

     int socket(AF_UNIX, SOCK_STREAM | SOCK_DGRAM, 0);
    
  • 绑定套接字:使用 bind() 函数将套接字绑定到一个地址,对于UNIX域套接字,地址是一个路径名,而不是IP地址和端口号。

     struct sockaddr_un addr;
     addr.sun_family = AF_UNIX;
     strcpy(addr.sun_path, "/path/to/socket");
     bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
    
  • 监听连接请求:对于面向连接的流式套接字(SOCK_STREAM),可以用 listen()accept() 函数来监听和接受连接。

     listen(sockfd, backlog);
     int newsockfd = accept(sockfd, (struct sockaddr *)NULL, NULL);
    
  • 发起连接:客户端进程使用 connect() 函数连接到服务器定义的路径名。

     connect(newsockfd, (struct sockaddr *)&addr, sizeof(addr));
    
  • 数据传输:无论是流式还是数据报式的UNIX域套接字,都可以使用 send()recv()sendto()recvfrom() 等函数来进行数据交换。

  • 关闭套接字:使用 close() 函数关闭套接字,就像对待网络套接字那样。

尽管接口相似,但UNIX域套接字和网络套接字在功能和行为上有重要区别:

  • UNIX域套接字只用于同一台主机上的进程间通信(IPC),而网络套接字则用于跨主机通信。
  • UNIX域套接字的数据传输更快,因为它不需要经过网络协议栈的完整处理,也不需要打包成网络帧或进行路由。
  • UNIX域套接字可以直接使用文件系统的路径作为标识符,这允许更灵活的命名和权限控制机制。
  • 数据可靠性方面,UNIX域数据报套接字(SOCK_DGRAM)也提供了可靠的服务,确保消息不会丢失或乱序传送,这一点与普通的UDP网络数据报套接字不同。
目录
相关文章
|
12天前
|
监控 安全 Unix
UNIX域套接字(Unix Domain Socket)在安全性和隐私性
UNIX域套接字(Unix Domain Socket)在安全性和隐私性
71 2
|
12天前
|
网络协议 Unix API
UNIX域套接字
UNIX域套接字
30 4
|
11月前
|
Unix Linux
Linux本地套接字(Unix域套接字)----SOCK_DGRAM方式
这里介绍一下Linux进程间通信的socket方式---Local socket。这篇主要是介绍下SOCK_DGRAM方式的通信,即数据包的方式(与UDP类似),面向无连接。
235 0
|
网络协议 Unix
UNIX 域套接字概述
UNIX 域套接字概述
110 0
|
JavaScript Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.14 UDP中的外出接口的确定
已连接UDP套接字还可用来确定用于某个特定目的地的外出接口。这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址(假设其进程未曾调用bind显式指派它)。这个本地IP地址通过为目的IP地址搜索路由表得到外出接口,然后选用该接口的主IP地址而选定。
1889 0
|
12天前
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
116 0
|
12天前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
30 2
|
12天前
|
Unix Shell Linux
在Linux和类Unix系统中,Shell提供了多种命令用于用户和权限管理
在Linux和类Unix系统中,Shell提供了多种命令用于用户和权限管理
39 4
|
12天前
|
Oracle Ubuntu Unix
Unix与Linux区别
Unix: Unix是一个操作系统家族的名称,最早由贝尔实验室(Bell Labs)的肖像电机公司(AT&T)开发。最早的Unix版本是在1969年创建的。 Linux: Linux是由芬兰计算机科学家Linus Torvalds在1991年创建的。它是作为一个免费、开放源代码的Unix克隆而开始的。
20 1