Linux内核 - 套接字文件描述符关闭位置

问题描述:

在Linux内核中,关闭套接字的文件描述符发生在哪里?我知道一个文件,该文件的文件描述符在fs/open.cs函数sys_close()中关闭。但是,对于套接字文件描述符,这是相同的位置还是其他地方?Linux内核 - 套接字文件描述符关闭位置

另外,套接字是否利用file.c alloc_fd来分配文件描述符,还是使用其他函数?

是的,sys_close()是关闭的入口点全部文件描述符,包括套接字。

sys_close()调用filp_close(),它在struct file对象上调用fput()。如果最后一个对struct file的引用已存在,fput()将调用文件对象的.release()方法,该方法对于套接字,是net/socket.c中的sock_close()函数。

套接字代码使用get_unused_fd()put_unused_fd()来获取和释放文件描述符。

+0

我看到get_unused_fd调用alloc_fd,所以通过在sys_close和alloc_fd中根据需要更改我的代码,这应该处理文件和套接字的所有文件描述符,对吗? – NTek 2010-04-26 02:51:06

+0

也许,很难说不知道你的代码是干什么的。 – caf 2010-04-26 03:27:42