0

我有以下代码:

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。我是集合和文件描述符的新手,我还没有发现发生了什么。你有想法吗?

谢谢!

4

1 回答 1

2

的第二个、第三个和第四个参数select(2)输入输出参数,这意味着调用会修改它们以让您知道返回时发生了什么事件。这就是为什么您需要在每次调用select(2).

还可以查看其他解复用工具,例如poll(2)epoll(7)

于 2013-05-21T13:03:05.377 回答