struct pollfd {
int fd; //文件描述符
short events; //要求查询的事件掩码
short revents; //返回的事件掩码
};
int poll(struct pollfd *ufds, unsigned int nfds, int timeout);
poll函数使用pollfd类型的结构来监控一组文件句柄,ufds是要监控的文件句柄集合,nfds是监控的文件句柄数量,timeout是等待的毫秒数,这段时间内无论I/O是否准备好,poll都会返回。timeout为负数表示无线等待,timeout为0表示调用后立即返回。执行结果:为0表示超时前没有任何事件发生;-1表示失败;成功则返回结构体中revents不为0的文件描述符个数
int sockfd; //套接字句柄
struct pollfd pollfds;
int timeout;
timeout = 5000;
pollfds.fd = sockfd; //设置监控sockfd
pollfds.events = POLLIN|POLLPRI; //设置监控的事件
for(;;){
switch(poll(&pollfds,1,timeout)){ //开始监控
case -1: //函数调用出错
printf("poll error \r\n");
break;
case 0:
printf("time out \r\n");
break;
default: //得到数据返回
printf("sockfd have some event \r\n");
printf("event value is 0x%x",pollfds.revents);
break;
}
}