理解这三个轮询函数差异的关键在于理解其轮询的文件描述符(socket也是文件)的数据结构。
select轮询函数
函数定义:
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exeptfds, struct timeval *timeout);
// fd_set操作宏
void FD_SET(int fd, fd_set *fdset);
void FD_CLR(int fd, fd_set *fdset);
void FD_ISSET(int fd, fd_set *fdset);
void FD_ZERO(fd_set *fdset