- while(FD_ISSET(fds[0],&inset) || FD_ISSET(fds[1],&inset) || FD_ISSET(fds[2], &inset))
- {
- tmp_inset = inset;
- res = select(maxfd + 1, &tmp_inset, NULL, NULL, &tv);
- ....
- }
开始一直纠结为什么要循环对文件描述符集进行初始化,原来select函数以后会清除文件描述符集中未准备就绪的文件,假设我的文件描述符集是一个字节,代码中fds[0]=0,
fds[1]=1,
fds[2]=2,这文件描述符集inset=B00000111; 若没有上面红色的那句,当fds[1]文件准备就绪,经过select后inset=B00000010;这项相当于清除了fds[2]这个文件,后面就监听不到fds[2]文件了。
阅读(835) | 评论(0) | 转发(0) |