【问题标题】:blocking an specific descriptor within epoll in c在 c 中阻塞 epoll 中的特定描述符
【发布时间】:2013-11-12 14:48:41
【问题描述】:

您好,我需要在我在 epoll 中监控的描述符中有一个特定的文件描述符,以阻止一个描述符用于不断获取广播消息的套接字,但用户必须在键盘上键入一个操作,这是我的另一个描述符这是我需要阻止的,因为我开始打字,然后另一条广播消息到达并与我正在写的内容混淆。

有没有办法暂停文件描述符的事件以检测数据准备好或在数据准备好时阻止另一个文件描述符?

【问题讨论】:

  • 这几乎可以肯定是解决这个问题的完全错误的方法。
  • 如果你想暂停一个文件描述符上的 epoll 事件,你只需从 epoll 集中删除描述符。 (或者如果您只想要 EPOLLOUT 事件,请修改描述符并删除 EPOLLIN 标志)
  • 我有点迷路了,我不想丢失我在套接字上收到的内容,我需要给用户时间输入下一个操作,以采取我应该采取的措施文件描述符超出 epoll ?
  • 顺便说一句,有一个新奇的东西叫做“标点符号”。它使英语更容易阅读。超长的连续句子伤害了人们的大脑......

标签: c sockets epoll


【解决方案1】:

你有几种方法可以走。

  1. 如果您使用EPOLLET(边缘触发),则唤醒时的事件处理程序可以首先检查您是否正在处理来自控制台的输入。如果是这样,它就不能读取任何内容,而是设置一个标志。当类型化输入处理程序完成后,它会检查该标志,并手动唤醒套接字输入处理程序来处理数据。

  2. 如果您改用级别触发,则可以通过修改为该文件描述符设置的事件来抑制要忽略的事件,从而抑制事件。这可以通过将EPOLL_CTL_MOD 与一组新事件一起使用,或者通过使用EPOLL_CTL_DELepoll 完全注销文件描述符。完成键入的输入处理程序后,您将添加回被抑制的内容。

【讨论】:

  • 看到这个我最喜欢我使用边缘触发,所以在我处理用户输入的部分将标志设置为 1,然后为其他描述符检查该标志,甚至不输入该描述符的处理对吗?
  • 谢谢@jxh 我现在无法测试它,但我一定会让你知道它是如何工作的
猜你喜欢
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多