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