Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在两个进程之间的通信中是否只有一个Unix域套接字?_Linux_Sockets_Unix_Operating System_Ipc - Fatal编程技术网

Linux 在两个进程之间的通信中是否只有一个Unix域套接字?

Linux 在两个进程之间的通信中是否只有一个Unix域套接字?,linux,sockets,unix,operating-system,ipc,Linux,Sockets,Unix,Operating System,Ipc,有两种套接字:网络套接字和Unix域套接字 当两个进程使用网络套接字进行通信时,每个进程创建自己的网络套接字,并且进程通过其套接字之间的连接进行通信。有两个套接字,每个套接字属于不同的进程,是每个进程的连接端点 当两个进程使用Unix域套接字进行通信时,Unix域套接字由文件系统中的文件名寻址 这是否意味着这两个进程只通过一个Unix域套接字而不是两个进行通信 Unix域套接字是否不属于任何进程,即Unix域套接字是否不是任何进程的连接端点,而是两个进程之间的“中间点” 有两个插座,每端一个。

有两种套接字:网络套接字和Unix域套接字

当两个进程使用网络套接字进行通信时,每个进程创建自己的网络套接字,并且进程通过其套接字之间的连接进行通信。有两个套接字,每个套接字属于不同的进程,是每个进程的连接端点

当两个进程使用Unix域套接字进行通信时,Unix域套接字由文件系统中的文件名寻址

  • 这是否意味着这两个进程只通过一个Unix域套接字而不是两个进行通信

  • Unix域套接字是否不属于任何进程,即Unix域套接字是否不是任何进程的连接端点,而是两个进程之间的“中间点”


有两个插座,每端一个。它们各自在文件系统中可能有名称,也可能没有名称

当您看到以srwx开头的
ls-l
并不是真正的“套接字”。它是一个绑定到套接字的名称(或者在过去绑定到套接字-它们死后不会自动删除)

打个比方:想想TCP套接字。其中大多数涉及具有已知端口号(22 SSH;25 SMTP;80 HTTP等)的端点。服务器创建套接字并绑定到已知端口。客户端创建套接字并连接到已知端口。客户端套接字也有一个端口号,可以在数据包跟踪(tcpdump/wireshark)中看到,但它不是一个固定的数字,它只是客户端内核自动选择的一个数字,因为它还没有被使用

在unix域套接字中,路径名类似于端口号。如果希望客户端能够找到服务器套接字,则需要将其绑定到一个众所周知的名称,如
/dev/log
/tmp/.X11 unix/X0
。但是客户端不需要有一个众所周知的名称,因此通常它不执行
bind()
。因此,名称
/tmp/.X11 unix/X0
仅与服务器套接字关联。您可以使用
netstat-x
确认这一点。列出的套接字中大约有一半具有路径名,而另一半则没有。或者编写自己的客户机/服务器对,并在客户机上调用
getsockname()
。其名称将为空,而服务器上的
getsockname()
提供路径名

自动分配给TCP客户端的临时端口号在unix域套接字地址中没有对应端口号。在TCP中,需要有一个本地端口号,以便传入的数据包可以匹配到正确的套接字。Unix域套接字直接链接到它们的内核数据结构中,因此没有必要。客户端可以连接到服务器,但没有名称

还有一个
socketpair()
,它创建了两个相互连接的unix域套接字,而不给它们任何一个命名


(这里没有提到,也不是很有趣:“抽象”名称空间。)

谢谢。每个进程是否都有一个unix域套接字作为该进程的连接端点,或者一个通信中的所有进程都只有一个unix域套接字?