gpt4 book ai didi

linux - FD_ISSET 在 FD_SET 之后返回 0

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:34 24 4
gpt4 key购买 nike

我有以下代码:

FD_SET(mc_sock, &readfds);

foo = FD_ISSET(mc_sock, &readfds); // returns 1

// Wait until some socket on the set is ready to be read
while(select (FD_SETSIZE,&readfds,NULL,NULL,ptv)) {

foo = FD_ISSET(mc_sock, &readfds); // returns 0

我将 mc_sock 添加到 readfds 并且 FD_ISSET 按预期返回 1。然而,稍后在 while 循环内时,FD_ISSET 返回 0 而不调用 FD_CLR。当我运行 MobileC 服务器时,代码跳入 while,但运行的代码中没有任何 FD_CLR。我是集合和文件描述符方面的新手,我还没有发现发生了什么。你有想法吗?

谢谢!

最佳答案

select(2) 的第二个、第三个和第四个参数是 in-out 参数,这意味着调用会修改它们,让您知道返回时发生了什么事件。这就是为什么您需要在每次调用 select(2) 之前重新设置文件描述符集。

还可以查看其他多路分解工具,例如 poll(2)epoll(7) .

关于linux - FD_ISSET 在 FD_SET 之后返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16670581/

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