Имеются ли файловые дескрипторы, соответствующие сокетам в разных пространствах имен, одинаковые числовые значения?

Мне нужно открыть несколько сокетов TCP, соответствующих каждому пространству имен, запрограммированному в linux.
Я хотел знать, могут ли fd, назначенные этим сокетам, быть одинаковыми или они всегда уникальны для всей системы?


person rango    schedule 28.04.2016    source источник
comment
fd никогда не бывает уникальным для всей системы. Это небольшое целое число, уникальное только внутри процесса!   -  person Basile Starynkevitch    schedule 28.04.2016


Ответы (1)


Данный процесс может быть членом только одного пространства имен. Дескриптор файла имеет значение только в контексте одного процесса.

Если один процесс создает несколько сокетов, эти файловые дескрипторы известны только этому процессу и бесполезны для внешних процессов (кроме диагностических инструментов, таких как /proc/PID/fd).

Если у вас есть сокеты, созданные в двух разных пространствах имен, то по определению они создаются в двух разных процессах, и поэтому файловые дескрипторы не обязательно должны быть (и, вероятно, не будут) уникальными.

Если вам нужно что-то глобально уникальное, вас могут заинтересовать сокеты «inode». Вы можете прочитать о том, как перечислить их здесь: Я нахожу индекс сокета TCP? . Я подозреваю, но не проверял, что эти номера инодов будут уникальными на машине, независимо от пространства имен.

person John Zwinck    schedule 28.04.2016