我需要打开多个TCP套接字,对应于linux中编程的每个命名空间
我想知道分配给这些套接字的fd是否相同,或者它们在系统范围内总是唯一的?
给定进程只能是一个命名空间的成员。文件描述符只与一个进程的上下文相关。
如果一个进程创建了多个套接字,那么这些文件描述符只为该进程所知,对外部进程(除了像/proc/PID/fd
这样的诊断工具)没有用处。
如果您在两个不同的命名空间中创建了套接字,那么根据定义,它们是在两个相同的进程中创建的,因此文件描述符不需要(也可能不会)是唯一的。
如果你想要全局唯一的东西,你可能会对套接字"inode"感兴趣。你可以在这里阅读如何列出这些:如何找到TCP套接字的inode。我怀疑,但尚未验证,无论命名空间如何,这些索引节点编号在机器上都是唯一的。