select监听多个fd
select用于多个fd的管理,检测哪个fd可读、可写,如果可读则接收消息(读),如果可写则输出消息(写)。
相关的函数:
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
void FD_CLR(int fd, fd_set *set); /* 将某个fd从集合set中删除 */
int FD_ISSET(int fd, fd_set *set); /* 检测fd是否还在集合set中 */
void FD_SET(int fd, fd_set *set); /* 将fd加入集合set中 */
void FD_ZERO(fd_set *set); /* 将集合set清空 */
其中,select函数的选项timeout很有用,当其是NULL时,函数无限期阻塞;当其是{0,0}时,立即返回结果;当其是某一个大于0的时间值时,表示一定时间后return。
关于timeout:
struct timeval {
long tv_sec; /* seconds */
long