gpt4 book ai didi

c++ select()递减文件描述符计数

转载 作者:可可西里 更新时间:2023-11-01 02:41:05 25 4
gpt4 key购买 nike

情况是这样的:

fd_set 创建并初始化:

fd_set readset;                       //fd_set named readset
FD_ZERO(&readset); //clearing fd_set
FD_SET(listen_socket, &readset); //adding a listening socket to readset

/*use for timeout*/
timeval blocktime;
blocktime.tv_sec=0;
blocktime.tv_usec=0;

现在,当前值显示 listen_socket 已添加到 readset:

readset.fd_count = 1
readset.fd_array[0] = 116

问题出现在这条指令上:

int err = select (0x7FFFFFFF, &readset, NULL, NULL, &blocktime);

我希望 select() 会返回值 1,因为我向 readset 添加了一个监听套接字。相反,select() 返回 0 并且 readset.fd_count 的值减一。

新值是:

readset.fd_count = 0
readset.fd_array[0] = 116

我找不到这里发生的事情。我正在 Windows 7 上编程。如有任何帮助,我们将不胜感激!

最佳答案

您传入了零时间的有效超时。它正确地更新了您的读取集,告诉您在允许的零时间内,读取集中的零个套接字具有可读数据。

三个选项:

  • 给它一个更长的超时时间,这样它就有机会找点事做
  • 循环直到它更新您的读取集以指示某些内容具有可读数据
  • 将超时参数设置为 null 以无限期阻塞

您可能想在那里组合 #1 和 #2,但这取决于您的用例。

关于c++ select()递减文件描述符计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20877218/

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