嗨,我需要在我在 epoll 中监控的描述符中有一个特定的文件描述符,以阻止一个描述符用于一个不断获取广播消息的套接字,但用户必须在键盘上键入一个动作,这是我的另一个描述符,这是我需要阻止一个,因为我开始打字,然后另一条广播消息到达并弄乱了我正在写的内容。
有没有办法暂停文件描述符的事件以检测数据准备好或在数据准备好时阻止另一个文件描述符?
你有几种方法可以走。
如果您正在使用EPOLLET
(边缘触发),那么唤醒时的事件处理程序可以首先检查您是否正在处理来自控制台的输入。如果是这样,它就不能读取任何内容,而是设置一个标志。当类型化的输入处理程序完成后,它会检查该标志,并手动唤醒套接字输入处理程序来处理数据。
如果您使用的是级别触发,那么您可以通过修改为该文件描述符设置的事件来抑制事件,以抑制要忽略的事件。这可以通过使用EPOLL_CTL_MOD
一组新的事件,或者通过使用EPOLL_CTL_DEL
完全取消注册文件描述符epoll
。完成键入的输入处理程序后,您将添加回被抑制的内容。