13

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

我还是想知道为什么 Unix 域的 Socket 纪录片比 Pipe 或 FIFO 少?也许是因为它是多年前出生的?

谁能告诉我任何想法或阅读哪些书籍/链接?

提前致谢!

4

1 回答 1

28

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

Unix 套接字作为文件寻址。它允许使用文件权限进行访问控制。

Unix 套接字是由套接字系统调用创建的(而 FIFO 是由 mkfifo 创建的)。如果您需要客户端套接字,则调用 connect,将其传递给服务器套接字地址。如果你需要服务器套接字,你可以绑定分配它的地址。同时,对于 FIFO 开放调用被使用。IO 操作是通过读/写来执行的。

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

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

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

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

于 2013-02-17T09:04:42.710 回答