Ядро Linux - расположение дескриптора файла сокета - PullRequest
0 голосов
/ 26 апреля 2010

Где в ядре Linux происходит закрытие файлового дескриптора сокета? Я знаю, что для файла дескриптор файла закрывается в функции fs / open.cs sys_close (). Однако для дескриптора файла сокета это то же место или где-то еще?

Кроме того, сокеты используют файл.c alloc_fd для выделения файлового дескриптора или они используют какую-то другую функцию?

1 Ответ

3 голосов
/ 26 апреля 2010

Да, sys_close() является точкой входа для закрытия всех файловых дескрипторов, включая сокеты.

sys_close() вызывает filp_close(), что вызывает fput() для объекта struct file. Когда последняя ссылка на struct file установлена, fput() вызывает метод .release() объекта файла, который для сокетов является функцией sock_close() в net/socket.c.

Код сокета использует get_unused_fd() и put_unused_fd() для получения и выпуска файловых дескрипторов.

...