当前位置: 首页 > 面试题库 >

在关闭epoll之前是否需要注销套接字?

通寂离
2023-03-14
问题内容

假定以下代码,其中“ 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_ctl(2)明确删除了描述符之前),才从集合中删除文件描述符EPOLL_CTL_DEL。这意味着即使在文件描述符之后epoll如果set已关闭,则如果引用同一基础文件描述的其他文件描述符保持打开状态,则可能会报告该文件描述符的事件。



 类似资料:
  • 问题内容: 在Go中,当使用SQL数据库时,是否需要在关闭应用程序之前关闭DB()?数据库是否会自动检测到连接已终止? 问题答案: DB将尽其所能进行检测,但是如果没有运气,它可能无法检测到。最好尽快发布所获得的东西。 系统调用将等待TCP连接发送数据,但客户端不会收到任何信息。 发生电源故障,网络问题或裸机退出而没有正确释放资源。TCP keepalive机制将启动,并尝试检测连接已死。 客户端

  • 问题内容: 我有一个使用简单套接字在两个系统之间传递某些字符的应用程序。我的Java应用程序作为服务器运行。我建立了良好的连接,甚至传递了一条消息。但是,发送完一条消息后,我的连接关闭。 从我可以看出来的好像是在关闭时,套接字本身正在关闭吗?!这很不好,因为我有多个要在同一连接上发送的消息。 我吃饱了吗?如何在Java中维护此连接? 问题答案: 是的,关闭任何作家/读者将关闭他们包装的所有其他作家

  • 问题内容: 我想知道,在关闭阅读器之后,是否需要关闭InputStream? 问题答案: 不,您不必。 由于Java中用于流的装饰器方法可以通过将新流或读取器附加到其他流上来构建新流或读取器,因此实现将自动对其进行处理。 如果查看其来源,则会看到: 因此,关闭操作实际上关闭了底层的流读取器。 编辑:我想确保关闭也可以在输入流上工作,请继续关注。 签入 在调用sd的close时调用。

  • 所以在Java中创建一个服务器端应用。 关于关闭连接,我只是想知道如果在读卡器之前关闭套接字会发生什么。 例如服务器端 围绕套接字中的输入流实例化的bufferedreader会随着套接字的关闭而关闭,还是我手上有潜在的内存泄漏?

  • 我希望确认有效的已签名 SAML 注销请求是否需要 RelayState。 我们已经将微软的ADFS 2012 R2与甲骨文的身份联合会联合起来,其中ADFS是SP,OIF是IdP。作为基础,我们遵循将ADFS 2.0/3.0 SP与OIF IdP集成。 一切正常,除了注销。我们有另一个 SP 执行注销并与 OIF 合作。我们发现的一个区别是,ADFS 不会发送带有其签名注销请求的 RelaySt

  • 问题内容: 我正在使用包裹在FileReader周围的BufferedReader读取本地文件: 我需要close()的为好,或将包装处理这个问题?我看过代码,人们在这里做这样的事情: 从Servlet调用此方法,并且我想确保我没有打开任何句柄。 问题答案: 没有。 根据javadoc为和关闭流 以及