1、select机制是用于多路复用,什么叫复用,结合我的理解,就是在一个进程的一个线程里,能够同时去使用文件描述符(一般是socket套接字多连接)
2、用法步骤:
fd_set rfds; //文件描述符集合
struct timeval tv;
tv.tv_sec = 0;
int ret, maxfd = -1;
FD_ZERO(&rfds);
for (p = ListHead; p != NULL; p = p->next) {//一般用于网络传输连接都会有链表操作
FD_SET(p->fd, &rfds);//将文件描述符加入集合中
maxfd = (maxfd > p->fd) ? maxfd : p->fd;
}
tv.tv_sec = 5;
tv.tv_usec = 0;
ret = select(maxfd + 1, &rfds, NULL, NULL, &tv);
if (ret == -1) {//文件描述符集合里没有有效的文件描述符
} else if (0) {//指定时间到
}
//以上都正常,都这里就是读写文件描述符了
3、select机制也可以改成多线程并发,即一条线程对应一个socket的文件描述符。