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网络数据报套接字不同。
目录
相关文章
|
5月前
|
监控 安全 Unix
UNIX域套接字(Unix Domain Socket)在安全性和隐私性
UNIX域套接字(Unix Domain Socket)在安全性和隐私性
202 2
|
5月前
|
网络协议 Unix API
UNIX域套接字
UNIX域套接字
201 4
|
Unix Linux
Linux本地套接字(Unix域套接字)----SOCK_DGRAM方式
这里介绍一下Linux进程间通信的socket方式---Local socket。这篇主要是介绍下SOCK_DGRAM方式的通信,即数据包的方式(与UDP类似),面向无连接。
293 0
|
网络协议 Unix
UNIX 域套接字概述
UNIX 域套接字概述
149 0
|
JavaScript Unix API
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.14 UDP中的外出接口的确定
已连接UDP套接字还可用来确定用于某个特定目的地的外出接口。这是由connect函数应用到UDP套接字时的一个副作用造成的:内核选择本地IP地址(假设其进程未曾调用bind显式指派它)。这个本地IP地址通过为目的IP地址搜索路由表得到外出接口,然后选用该接口的主IP地址而选定。
1908 0
|
5月前
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
160 0
|
5月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
62 2
|
2月前
|
Unix Linux 程序员
Unix:Linux的“逗趣祖师爷”与它的不凡传承
在科技长河中,Unix犹如一颗恒星,既是历史见证者也是未来的启发者。1969年,因程序员肯·汤普森想在他的PDP-7上玩“Space Travel”游戏,意外创造了Unix,以简洁优雅的代码改变了操作系统的世界。进入90年代,林纳斯·托瓦兹受Unix启发,开发了开源免费的Linux,像是Unix调皮的孙子,不仅继承其精髓还增添了开放共享的精神。Unix与Linux之间的传承,就像是智者与追蝶孩童的故事,充满了岁月的智慧与新生的活力,提醒我们科技传奇往往源于不起眼的小事。下次使用Linux时,不妨会心一笑吧!
39 0
|
2月前
|
开发框架 Unix Linux
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
LangChain 构建问题之在Unix/Linux系统上设置OpenAI API密钥如何解决
41 0