res = select(maxfd + 1, &rfds, NULL, NULL, &timeout);
if (res < 0 && errno != EINTR && errno != 0) {
// log it
return;
}
if (FD_ISSET(socket1, &rfds)) {
// do something
}
if (FD_ISSET(socket2, &rfds)) {
// do something
}
}
上面大致讲解了如何使用select,这里其实我们可以很明显的看出一个缺点的,
1. 就是我们并不返回符合要求的fd,而是把所有的fd都返回,所以返回到用户态之后我们要进行fd的历遍最终才能找到有相应的fd,这显然是比较耗费事件的