2013-02-17 160 views
5

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

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

谁能告诉我任何意见或书籍/链接阅读?提前

谢谢!

+0

对于一本书,请尝试W. Richard Stevens的* Unix Network Programming,Volume 1 *。第三版是最新的版本,但如果在当地图书馆找不到它,第二版的使用版本将花费更少且足够的费用。 – 2013-02-18 03:49:56

+0

感谢@robmayoff为你的书,我读过它。但是它谈到了UDS API :(我需要的信息可能是数据如何在内核级别发送或接收数据,就像他们在这里讨论管道一样: http://www.tldp.org/LDP/lpg/node10 .html#SECTION00721000000000000000 谢谢! – leokaka 2013-02-21 01:12:44

+0

[* TCP/IP说明,卷3:TCP for Transactions,HTTP,NNTP和UNIX域协议*](http://amzn.com/0201634953),也由W理查德史蒂文斯 – 2013-02-21 03:28:04

回答

16

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

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

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

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

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

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

如果您需要更多的细节,请在Linux内核源代码中查看net/unix/af_unix.c文件。

+0

如果你满意我的答案,请把它设置为最佳答案。或者添加评论,还有什么需要说明的。 – 2013-02-17 17:33:54

+0

感谢您提供的信息,但我已经阅读了这些信息:(可以给我一些关于它如何发送和接收数据的详细信息吗?它是否使用文件I/O?谢谢小号! – leokaka 2013-02-18 01:40:02

+0

Unix套接字使用与其他类型的套接字相同的API。它们由socket sys调用创建,然后可以通过连接调用连接到服务器套接字,或者将其绑定(如果需要服务器套接字)。读/写调用可用于执行IO。 – 2013-02-18 05:49:15