while (xxx) {
timeout.tv_sec=TIMEOUT;
timeout.tv_usec=0;
FD_ZERO(&set);
FD_SET(sd,&set);
switch (select(FD_SETSIZE,&set,NULL,NULL,&timeout))
xxxxx
}
工作正常,但是
FD_ZERO(&set);
FD_SET(sd,&set);
while (xxx) {
timeout.tv_sec=TIMEOUT;
timeout.tv_usec=0;
switch (select(FD_SETSIZE,&set,NULL,NULL,&timeout))
xxxxx
}
没有。它第一次工作,但下一次运行 while 循环时,即使 sd 套接字接收到数据,它也会超时。在我看来,每次都必须清空和填充集是浪费资源。
任何人都有一个很好的解释为什么会这样,甚至更好,也许是一个如何避免它的建议?