Ich muss mehrere TCP-Sockets öffnen, die jedem in Linux programmierten Namespace entsprechen.
Ich wollte wissen, ob die diesen Buchsen zugewiesenen fd identisch sein können oder sie immer systemweit eindeutig sind?Sind Dateideskriptoren, die Sockets in verschiedenen Namespaces entsprechen, demselben numerischen Wert zugeordnet?
Antwort
Ein bestimmter Prozess kann nur Mitglied eines Namespaces sein. Ein Dateideskriptor ist nur im Kontext eines Prozesses relevant.
Wenn ein Prozess mehrere Sockets erstellt, sind diese Dateideskriptoren nur diesem Prozess bekannt und für externe Prozesse nicht nützlich (abgesehen von Diagnosetools wie /proc/PID/fd
).
Wenn Sie Sockets in zwei verschiedenen Namespaces erstellt haben, werden sie definitionsgemäß in zwei verschiedenen Prozessen erstellt. Daher müssen die Dateideskriptoren nicht eindeutig sein (und wahrscheinlich auch nicht).
Wenn Sie etwas global einzigartig wollen, könnten Sie sich für die Socket "Inodes." Sie können darüber lesen, wie Sie diese hier auflisten: How do I find the inode of a TCP socket?. Ich vermute, habe aber nicht verifiziert, dass diese Inode-Nummern auf einer Maschine unabhängig vom Namespace eindeutig sind.
Ein fd ist nie systemweit einzigartig. Es ist eine kleine ganze Zahl, die nur innerhalb des Prozesses einzigartig ist! –