FD_ETET在FD_SET之后返回0

时间:2013-05-21 12:56:58

标签: linux sockets network-programming set file-descriptor

我有以下代码:

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。但是稍后在内部时,循环FD_ISSET返回0而不调用FD_CLR。 当我运行MobileC服务器但代码运行时没有任何FD_CLR时,代码跳转到了。 我是套装和文件描述符的新手,我还没有发现发生了什么。你有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

另请参阅其他解复用工具,例如poll(2)epoll(7)