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

时间:2013-02-17 08:50:03

标签: sockets unix unix-socket

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:17)

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

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

Unix套接字是由socket sys调用创建的(而mkfifo创建的是FIFO)。如果需要客户端套接字,则调用connect,传递服务器套接字地址。如果需要服务器套接字,可以绑定以分配它的地址。而对于FIFO开放呼叫则使用。 IO操作通过读/写执行。

Unix套接字可以区分它的客户端,而FIFO不是。有关peer的信息由accept调用提供,它返回peer的地址。

Unix套接字是双向的。这意味着每一方都可以执行读写操作。虽然,FIFO是单向的:它有一个作家同伴和一个读者同伴。

Unix套接字比localhost IP套接字创建更少的开销和通信更快。数据包不需要像localhost套接字一样通过网络堆栈。因为它们只存在于本地,所以没有路由。

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