gpt4 book ai didi

c - 在不写入文件描述的情况下使 select() 破解?

转载 作者:太空狗 更新时间:2023-10-29 15:18:36 24 4
gpt4 key购买 nike

我的应用程序中有这个线程监视一组客户端套接字。我使用 select() 进行阻塞,直到客户端发出请求,这样我就可以在不增加线程的情况下高效地处理它。

现在,问题是,当我将新客户端添加到客户端列表时,我必须等待 select() 超时(设置为 10 秒)才能真正添加​​新套接字到监听的套接字。

所以我想让 select() 在超时之前 破解,以便可以立即收听客户端。

我已经有了一个解决方案:创建一个虚拟套接字对,我总是将其包含在我监听的套接字列表中,并且我在其中写入以使 select() 破解,但我希望有更好的解决方案。

编辑:我无法访问 eventfd(),因为我使用的 GLibc 太旧了(而且我没有更新它的意思)。所以我可能不得不使用 fifo 或套接字。

你知道吗?

谢谢!

最佳答案

唤醒选择循环的常用方法是添加 pipe() 的读取端fd 配对到选择的观察集。当需要唤醒select循环时,向文件描述符的写端写入一些伪数据。

请注意,在 Linux 上,您可能还需要考虑使用 eventfd()而不是 pipe() - 它可能更有效(尽管便携性较差)。

您还可以在选择循环中处理监听套接字,而不是将其交给另一个线程——这会在新客户端到来时隐式唤醒选择循环。

关于c - 在不写入文件描述的情况下使 select() 破解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921448/

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