我有以下代码:
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不需要调用FD_CLR就返回0。当我运行MobileC服务器时,代码会跳入when,但是在运行的代码中没有任何FD_CLR。我在集合和文件描述符方面是个新手,我还没有搞清楚到底发生了什么。你有什么主意吗?
谢谢!
发布于 2013-05-21 13:03:05
select(2)的第二个、第三个和第四个参数是in-out参数,这意味着调用修改它们,让您知道返回时发生了什么事件。这就是为什么每次调用select(2)之前都需要重新启动文件描述符设置的原因。
还可以查看其他解复用器,如poll(2)和epoll(7)。
https://stackoverflow.com/questions/16670581
复制相似问题