1. select多路复用:多路即多个socket,复用即select可以检查多个socket,然后根据select函数的返回值,对socket进行使用。
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
2. 参数说明:
nfds:文件描述符的最大值
readfds:可读的文件描述符
writefds:可写的文件描述符
exceptfds:异常的文件描述符
timeout:NULL:阻塞,即无限等待直到有可读写文件。>0:指定等待的时间,时间到,函数返回。
3. fd_set处理函数:FD_ZERO(fd_set *fdset) // 将指定的文件描述符集清空,在对文件描述符集合进行设置前,必须对其进行初始化,如果不清空,由于在系统分配内存空间后,通常并不作清空处理,所以结果是不可知的。
FD_SET(int fd,fd_set *fdset) // 用于在文件描述符集合中增加一个新的文件描述符。
FD_CLR(int fd,fd_set *fdset) // 用于在文件描述符集合中删除一个文件描述符。
FD_ISSET(int fd,fd_set *fdset) // 用于测试指定的文件描述符是否在该集合中。
4. 返回值:
<0:出错
=0:等待超时
>0:有文件可读写
5. struct timeval结构
struct timeval {
time_t tv_sec;
susends_t tv_usec;
};