2016-04-28 11 views
0

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

+2

Fd никогда не является общесистемным. Это небольшое целое, единственное в этом процессе! –

ответ

0

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

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

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

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