【问题标题】:Are file descriptors corresponding to sockets in different namespaces assigned same numerical value?与不同命名空间中的套接字对应的文件描述符是否分配了相同的数值?
【发布时间】:2016-04-28 05:45:10
【问题描述】:

我需要打开多个 TCP 套接字,对应 linux 中编程的每个命名空间。
我想知道分配给这些套接字的 fd 是否相同,或者它们在系统范围内始终是唯一的?

【问题讨论】:

  • 一个 fd 在系统范围内永远不是唯一的。它是一个小整数,仅在进程中是唯一的!

标签: linux file-descriptor linux-namespaces


【解决方案1】:

一个给定的进程只能是一个命名空间的成员。文件描述符仅在一个进程的上下文中相关。

如果一个进程创建了多个套接字,则这些文件描述符只有该进程知道,并且对外部进程没有用(除了/proc/PID/fd 等诊断工具)。

如果您在两个不同的命名空间中创建了套接字,那么根据定义,它们是在两个不同的进程中创建的,因此文件描述符不必(也可能不会)唯一。

如果您想要全局唯一的东西,您可能会对套接字“inode”感兴趣。您可以在此处阅读有关如何列出这些内容的信息:How do I find the inode of a TCP socket?。我怀疑但尚未验证这些 inode 编号在机器上是唯一的,无论命名空间如何。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多