在关闭epoll之前是否需要注销套接字?
假定以下代码,其中“ sock”是TCP套接字的句柄,该句柄先前已使用epfd指定的epoll文件描述符注册。
epoll_ctl(epfd, EPOLL_CTL_DEL, sock, &ev);close(sock);
如果套接字无论如何都要随后关闭,是否仍然需要调用epoll_ctl?还是由于关闭套接字而隐式注销了套接字?
回答:
从手册页:
关闭文件描述符会导致它自动从所有epoll集中删除吗?
是,但是请注意以下几点。文件描述符是对打开的文件描述的引用(请参阅
open
(2))。每当通过dup
(2),dup2
(2),fcntl
(2)F_DUPFD
或
fork
(2)复制描述符时,都会创建一个引用相同打开文件描述的新文件描述符。一个打开的文件描述将继续存在,直到所有引用它的文件描述符都被关闭为止。epoll
仅在关闭所有引用基础打开文件描述的文件描述符之后(或如果使用epoll_ctl
(2)明确删除了描述符之前),才从集合中删除文件描述符EPOLL_CTL_DEL
。这意味着即使在文件描述符之后epoll
如果set已关闭,则如果引用同一基础文件描述的其他文件描述符保持打开状态,则可能会报告该文件描述符的事件。
以上是 在关闭epoll之前是否需要注销套接字? 的全部内容, 来源链接: utcz.com/qa/400738.html