gpt4 book ai didi

macos - 强行触发kevent

转载 作者:行者123 更新时间:2023-12-02 08:58:07 26 4
gpt4 key购买 nike

我在 OS X 中使用 kqueue 进行套接字同步。我可以像下面这样注册一个感兴趣的事件:

struct kevent change;
EV_SET(&change, connected_socket, EVFILT_READ, EV_ADD, 0, NULL, NULL);
kevent(k_queue_, &change, 1, NULL, 0, NULL);

问题是,有没有办法强制触发此事件,以便等待的 kevent 调用返回?

最佳答案

除了将数据自然写入套接字的另一端之外的一些可能性:)

  • shutdown(2) 该套接字的读取端 - 您将在 flags 中获得 EV_EOF(愚蠢),
  • 使用超时参数并调用相同的处理函数,
  • 使用self-pipe trick当你需要打破等待时。

但我的问题是:您为什么需要这个?

编辑:

如果我正确理解您的评论,您正在寻找一种方法来绕过写事件的边沿触发行为 (EV_CLEAR)。我相信这样做的正确方法是当传出队列中没有任何东西时,从 EVFILT_WRITE取消注册您的套接字,然后重新注册它当有数据要发送时。它需要做更多的工作,但这就是它的工作方式,并且您不需要任何额外的系统调用,因为 kevent(2) 接受更改和结果。查看libevent看看它是如何处理这类事情的。您正在使用非阻塞套接字,对吧?

关于macos - 强行触发kevent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354733/

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