gpt4 book ai didi

linux - 一次性*级别*-触发 epoll() : Does EPOLLONESHOT imply EPOLLET?

转载 作者:可可西里 更新时间:2023-11-01 11:48:40 28 4
gpt4 key购买 nike

是否可以在一次性触发模式下使用epoll
当我搜索时,我找不到任何关于它的信息;好像大家都用边沿触发的方式。

最佳答案

When the EPOLLONESHOT flag is selected and you have pulled an event for a socket, then the socket won't get removed from epoll as many think but its events get disabled.您可以使用 epoll_ctl/EPOLL_CTL_MOD 再次启用它们。

EPOLLONESHOT 行为派上用场的一个示例是当您将可用数据从套接字读取到缓冲区时。该缓冲区将独立清空,但在它不为空之前,您必须禁用套接字事件,即使套接字有其他数据也是如此。然后在缓冲区被使用并清空后,您可以重新启用套接字。

仅当您重新启用套接字时,边沿触发和电平触发的“一次性”行为之间的区别才会出现。一个例子:

  1. 套接字接收到 7K 数据(目前它存储在内核缓冲区中)
  2. 您等待输入事件,然后套接字事件由于 EPOLLONESHOT 而被禁用。
  3. 您将 4K 读入应用程序级缓冲区。
  4. 稍后应用程序缓冲区被使用并清空。您使用 epoll_ctl/EPOLL_CTL_MOD 重新启用套接字。

水平触发的 EPOLLONESHOT:

  1. 由于内核缓冲区中仍存在 3K 数据,因此再次触发该事件。

边沿触发 EPOLLONESHOT:

  1. 它不会为可用数据再次触发事件。您必须通过阅读并等待 EAGAIN/EWOULDBLOCK 来测试它。

关于linux - 一次性*级别*-触发 epoll() : Does EPOLLONESHOT imply EPOLLET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39173429/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com