leo*_*aka 9 unix sockets unix-socket
我正在研究Unix域套接字.特别是关于它是如何工作的.我用许多关键字搜索了很多次,但结果都是关于API,系统调用,如何使用它,示例.... 我也读过有关Pipe和FIFO的内容,因为据说Unix Domain套接字与Pipe和FIFO相同,但我仍然想知道更多关于Unix Domain Socket的概念/原理.它是如何工作的?(也许在内核级别,因为Wiki说:"这允许两个进程打开同一个套接字以进行通信.但是,通信完全发生在操作系统内核中."
我仍然想知道为什么Unix域Socket纪录片少于Pipe或FIFO?也许是因为它出生在很多年前?
任何人都可以向我展示任何想法或阅读哪些书籍/链接?
提前致谢!
Анд*_*чёв 18
Unix套接字用作任何其他套接字类型.这意味着,比使用套接字系统调用.FIFO和Unix套接字之间的区别在于FIFO使用文件sys调用,而Unix套接字使用套接字调用.
Unix套接字作为文件进行寻址.它允许使用文件权限进行访问控制.
Unix套接字由socket sys调用创建(而mkfifo创建的FIFO).如果需要客户端套接字,则调用connect,传递服务器套接字地址.如果需要服务器套接字,可以绑定以分配它的地址.而对于FIFO开放呼叫则使用.IO操作通过读/写执行.
Unix套接字可以区分它的客户端,而FIFO不是.有关peer的信息由accept调用提供,它返回peer的地址.
Unix套接字是双向的.这意味着每一方都可以执行读写操作.虽然,FIFO是单向的:它有一个作家同伴和一个读者同伴.
与localhost IP套接字相比,Unix套接字创建的开销更少,通信速度更快.数据包不需要像localhost套接字一样通过网络堆栈.因为它们只存在于本地,所以没有路由.
如果您需要有关Unix套接字在内核级别如何工作的更多详细信息,请查看Linux内核源代码中的net/unix/af_unix.c文件.