sel*_*bie 20 sockets linux epoll
假设以下代码,其中"sock"是先前使用epfd指定的epoll文件描述符注册的TCP套接字的句柄.
epoll_ctl(epfd, EPOLL_CTL_DEL, sock, &ev);
close(sock);
Run Code Online (Sandbox Code Playgroud)
如果套接字随后会被关闭,是否仍然需要调用epoll_ctl?或者套接字是否因为关闭而被隐式取消注册?
Fré*_*idi 30
从手册页:
Q6 关闭文件描述符会导致它自动从所有epoll集中删除吗?
A6 是的,但要注意以下几点.文件描述符是对打开文件描述的引用(参见
open(2)).每当通过dup(2),dup2(2),fcntl(2)F_DUPFD或fork(2)复制描述符时,创建引用相同打开文件描述的新文件描述符.打开的文件描述将继续存在,直到引用它的所有文件描述符都已关闭.epoll仅在引用基础打开文件描述的所有文件描述符都已关闭之后(或者在使用epoll_ctl(2)显式删除描述符之前),才从集合中删除文件描述符EPOLL_CTL_DEL.这意味着即使在作为epoll集合的一部分的文件描述符已经关闭之后,如果引用相同底层文件描述的其他文件描述符保持打开,则可以报告该文件描述符的事件.
| 归档时间: |
|
| 查看次数: |
12315 次 |
| 最近记录: |