Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 是否有必要在关闭之前从epoll注销套接字?_Linux_Sockets_Epoll - Fatal编程技术网

Linux 是否有必要在关闭之前从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))。每当 描

假设以下代码中的“sock”是TCP套接字的句柄,该套接字先前已使用epfd指定的epoll文件描述符注册

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()
关闭它们,文件描述符就不会关闭。。。