Linux 是否有必要在关闭之前从epoll注销套接字?
假设以下代码中的“sock”是TCP套接字的句柄,该套接字先前已使用epfd指定的epoll文件描述符注册Linux 是否有必要在关闭之前从epoll注销套接字?,linux,sockets,epoll,Linux,Sockets,Epoll,假设以下代码中的“sock”是TCP套接字的句柄,该套接字先前已使用epfd指定的epoll文件描述符注册 epoll_ctl(epfd, EPOLL_CTL_DEL, sock, &ev); close(sock); 如果套接字随后将被关闭,是否仍然需要调用epoll_ctl?或者套接字是否由于关闭而被隐式注销?来自: Q6关闭文件描述符会导致将其从所有epoll集合中删除吗 自动地 A6是,但要注意以下几点。文件描述符是一个 对打开的文件描述的引用(请参见open(2))。每当 描
epoll_ctl(epfd, EPOLL_CTL_DEL, sock, &ev);
close(sock);
如果套接字随后将被关闭,是否仍然需要调用epoll_ctl?或者套接字是否由于关闭而被隐式注销?来自:
Q6关闭文件描述符会导致将其从所有epoll集合中删除吗
自动地
A6是,但要注意以下几点。文件描述符是一个
对打开的文件描述的引用(请参见open
(2))。每当
描述符通过dup
(2)、dup2
(2)、fcntl
(2)F_DUPFD
,或
fork
(2),一个新的文件描述符,引用相同的打开文件描述
是创建的。打开的文件描述将继续存在,直到所有文件
与之相关的描述符已关闭。文件描述符是
仅在引用所有文件描述符之后才从epoll
集中删除
基础打开文件说明已关闭(如果
使用epoll\u ctl
(2)epoll\u ctl\u DEL
)显式删除描述符。这
意味着即使在作为epoll
集合的一部分的文件描述符
如果其他文件已关闭,则可能会报告该文件描述符的事件
引用相同基础文件描述的描述符保持打开状态
谢谢我一直在做“manepoll\u ctl”、“manepoll\u create”来寻找答案,但忘记了“manepoll”的摘要手册页。因此,如果没有人用dup()复制它,并且过程没有分叉,你没事吧?是的,我认为这很好地总结了它。然而,情况似乎并非如此。我刚刚编写了一个简单的代码片段,创建了一个侦听套接字,将其添加到一个epoll中,关闭该套接字,然后继续执行epoll_wait。它就在那里,如果在这之间进行了一次欺骗,它就会开火,德尔成功了。@Matt是的,显然,如果你不
close()
关闭它们,文件描述符就不会关闭。。。