Мне нужно открыть несколько сокетов TCP, соответствующих каждому пространству имен, запрограммированному в linux.
Я хотел знать, могут ли fd, назначенные этим сокетам, быть одинаковыми или они всегда уникальны для всей системы?
Имеются ли файловые дескрипторы, соответствующие сокетам в разных пространствах имен, одинаковые числовые значения?
Ответы (1)
Данный процесс может быть членом только одного пространства имен. Дескриптор файла имеет значение только в контексте одного процесса.
Если один процесс создает несколько сокетов, эти файловые дескрипторы известны только этому процессу и бесполезны для внешних процессов (кроме диагностических инструментов, таких как /proc/PID/fd
).
Если у вас есть сокеты, созданные в двух разных пространствах имен, то по определению они создаются в двух разных процессах, и поэтому файловые дескрипторы не обязательно должны быть (и, вероятно, не будут) уникальными.
Если вам нужно что-то глобально уникальное, вас могут заинтересовать сокеты «inode». Вы можете прочитать о том, как перечислить их здесь: Я нахожу индекс сокета TCP? . Я подозреваю, но не проверял, что эти номера инодов будут уникальными на машине, независимо от пространства имен.