【发布时间】:2016-04-28 05:45:10
【问题描述】:
我需要打开多个 TCP 套接字,对应 linux 中编程的每个命名空间。
我想知道分配给这些套接字的 fd 是否相同,或者它们在系统范围内始终是唯一的?
【问题讨论】:
-
一个 fd 在系统范围内永远不是唯一的。它是一个小整数,仅在进程中是唯一的!
标签: linux file-descriptor linux-namespaces
我需要打开多个 TCP 套接字,对应 linux 中编程的每个命名空间。
我想知道分配给这些套接字的 fd 是否相同,或者它们在系统范围内始终是唯一的?
【问题讨论】:
标签: linux file-descriptor linux-namespaces
一个给定的进程只能是一个命名空间的成员。文件描述符仅在一个进程的上下文中相关。
如果一个进程创建了多个套接字,则这些文件描述符只有该进程知道,并且对外部进程没有用(除了/proc/PID/fd 等诊断工具)。
如果您在两个不同的命名空间中创建了套接字,那么根据定义,它们是在两个不同的进程中创建的,因此文件描述符不必(也可能不会)唯一。
如果您想要全局唯一的东西,您可能会对套接字“inode”感兴趣。您可以在此处阅读有关如何列出这些内容的信息:How do I find the inode of a TCP socket?。我怀疑但尚未验证这些 inode 编号在机器上是唯一的,无论命名空间如何。
【讨论】: