gpt4 book ai didi

sockets - Unix域套接字原理。它是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 23:31:49 26 4
gpt4 key购买 nike

我正在研究Unix域套接字。特别是关于它是如何工作的。我用很多关键词用谷歌搜索了很多次,但结果都是关于 API、系统调用、如何使用它、示例......。我也读过有关 Pipe 和 FIFO 的内容,因为据说 Unix Domain 套接字与 Pipe 和 FIFO 相同,但我仍然想了解更多有关 Unix Domain Socket 的概念/原理。它是如何工作的? (也许在内核级别,因为 Wiki 是这么说的:“这允许两个进程打开同一个套接字以便进行通信。但是,通信完全发生在操作系统内核内。”

我仍然想知道为什么Unix域Socket纪录片少于Pipe或FIFO?也许是因为它诞生了很多年?

有人可以告诉我任何想法或要阅读哪些书籍/链接吗?

提前致谢!

最佳答案

Unix 套接字与任何其他套接字类型一样使用。这意味着,套接字系统调用用于它们。 FIFO 和 Unix 套接字之间的区别在于 FIFO 使用文件系统调用,而 Unix 套接字使用套接字调用。

Unix 套接字以文件的形式寻址。它允许使用文件权限进行访问控制。

Unix套接字是由socket sys调用创建的(而FIFO是由mkfifo创建的)。如果您需要客户端套接字,请调用 connect,并向其传递服务器套接字地址。如果需要服务器套接字,可以通过绑定(bind)来分配其地址。同时,对于 FIFO 使用 open 调用。 IO操作是通过读/写来进行的。

Unix 套接字可以区分其客户端,而 FIFO 则不能。有关对等点的信息由接受调用提供,它返回对等点的地址。

Unix 套接字是双向的。这意味着每一方都可以执行读和写操作。然而,FIFO 是单向的:它有一个写入端和一个读取端。

与本地主机 IP 套接字相比,Unix 套接字产生的开销更少,并且通信速度更快。数据包不需要像本地主机套接字那样通过网络堆栈。由于它们仅存在于本地,因此没有路由。

如果您需要有关 Unix 套接字如何在内核级别工作的更多详细信息,请查看 Linux 内核源代码中的 net/unix/af_unix.c 文件。

关于sockets - Unix域套接字原理。它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com