Tim*_*Tim 3 ipc socket unix-sockets
我说得对吗
当两个进程通过网络套接字通信时,每个进程创建一个套接字(每个套接字属于一个进程),进程通过它们的套接字进行通信。
当两个进程通过Unix域套接字通信时,只创建一个套接字(不属于任何进程),并且两个进程都连接到同一个套接字?
你在这里混淆了两件事。
套接字是一个文件描述符 - 一个句柄 - 提供给程序,以便它可以以几乎与使用文件相同的方式使用网络连接。套接字 API 与协议无关;可以为 IPv4 连接或 IPv6 连接创建套接字,但(如果有内核支持)也可以为 DECnet、AppleTalk 或读取以太网之类的东西创建。
由于套接字 API 相当容易使用,但由于使用实际网络协议与同一台机器上的进程交谈效率相当低,因此在某些时候创建了 UNIX 域套接字以允许使用套接字 API 而不会效率低下。它还增加了一些额外的功能;例如,可以通过 UNIX 域套接字将文件描述符传递给另一个进程。
当一个人使用 UNIX 域套接字时,两个进程仍然持有一个套接字,连接的每一侧一个。除了初始连接设置之外,套接字的使用与 IPv4 套接字没有什么不同。
套接字 API 不能缺少的一件事是地址;如果不向套接字传递要与之通信的地址,就无法创建套接字,这对于 UNIX 域套接字也没有什么不同。由于它是 UNIX,无论如何一切都是文件,因此决定使这些地址看起来像文件名。既然我们已经这样做了,那么让这些地址出现在文件系统中是有意义的,因为这样可以很容易地发现它们。
不幸的是,文件系统中这些东西的名称也是“UNIX 域套接字”(或者至少,人们开始这么称呼它们)。然而,它们不是套接字 API 意义上的实际套接字;他们不可能,因为那些只是一个数字。因此,它们在 IPv4 套接字中的对应物不是那个数字,而是您正在与之交谈的对等方的 IP 地址和端口号。
有时,我会补充一点,因为套接字 API 不直接处理文件,所以这些文件系统表示并不是绝对必要的。事实上,Linux 有一个“匿名 UNIX 域套接字”的概念,即:在文件系统中没有任何链接的 UNIX 域套接字......
归档时间: |
|
查看次数: |
5407 次 |
最近记录: |