【博客93】对epoll监听的fd进行close会怎么样?

内容: 跟牛客的同学讨论如果对 epoll 监听的文件描述发进行close,那么会发生什么事情呢?epoll会不会主动把监听的这个文件描述符号从它的监听列表(红黑树)中删除呢?

答案:并不能绝对的说会或者不会,要分情况的。一开始我们讨论这个问题的时候,有个博主认为就是不会的。但是后来用 man epoll 查看epoll的手册,发现虽然前面一大堆描述都没有讲过这个情况,但是翻到后面的列了常规问题,其中就有这一项。

1.查看方法:man epoll
在这里插入图片描述
2.找到对应条目:(有时候内容是你要的,但是标题不一定是你要的哦!)

在这里插入图片描述
解读:这里讨论了当一个fd被关闭的时候,epoll会不会自动把它从监听集合移除呢?
当这个socket没有被dup, fcntl ,fork等函数的复制,使得有新的fd指向同一个文件,那么就会自动删除。其实就是,当close是真的释放了文件描述符资源,而不是减少文件描述的引用计数的话,就会自动从epoll 监听文件描述符集合中删除。所以答案并不是肯定的,而是要看删除的这个文件描述符的引用计数是否为0.

为了方便解读,我把几个单词先翻译给小伙伴们哈:
1.descriptor:文件描述符
2.via :经过
3.refer :指向 (搭配to使用,以前高考经常用哈哈)
4.duplicate:复制

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页