gpt4 book ai didi

c++ - 选择调用似乎没有超时

转载 作者:行者123 更新时间:2023-11-28 08:30:03 25 4
gpt4 key购买 nike

大家好,

我有一个线程化的 C++ 程序,其中最多三个线程在三个独立的套接字描述符上调用 select 以等待数据可用。每个线程处理一个套接字并将其添加到 readfds,超时为 300 秒。在 select 返回后,如果有可用数据,我将调用 recv 来读取它。

对于 winsock 和线程,有什么我需要注意的吗,因为出于某种原因,几个小时后,选择调用似乎都没有超时。多线程程序可以毫无问题地从多个线程中进行选择吗?

我知道我应该让一个线程监听所有三个套接字,但这对这个应用程序来说是一个很大的改变,我只是想应用一个错误修复。

干杯,

马丁。

最佳答案

没有一些代码,我只能猜测。 select 超时无法正常工作 的最常见原因是 struct timeval 参数在循环的每次迭代中都没有重置。一些(全部?)select 实现更新超时参数以反射(reflect)阻塞所花费的时间量。但是,这通常会导致 select 不阻塞。

您确定 select 是问题所在并且您没有发生其他问题,例如堆栈损坏、内存泄漏等?

编辑:我之前在 Windows 下使用过不同套接字上的多个线程的选择,没有问题。我忘了在最初的帖子中提到这一点。

关于c++ - 选择调用似乎没有超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2552656/

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