我正在监视套接字 fds 的列表并等待 POLLIN 事件。
首先,我将 fds 添加到数组并在该数组上运行 poll()。此外,在某些情况下,我想从这个数组中删除 fd(不关闭)。有时它可能与 poll() 正在运行同时发生。
据我了解,当 poll() 启动时,内核缓存了带有等待 pollfds 的数组,所以它不能知道我立即删除 fd,对吗?
我发现我们可以使用 eventfd() 实现唤醒机制,并使用它来唤醒我们的线程并从数组中删除 fd,然后继续使用新数组运行 poll()。
首先我想问一下,如果我们在 poll() 运行的同时从 pollfds 数组中删除 fd,poll() 是否正确?更要澄清的是,也许有一些不同的机制可以从等待的 pollfds 数组中删除 fd(不包括唤醒机制), poll() 会立即中断吗?