承接上篇IO复用之select
selet将描述符和事件分离,所以在select接口需要传入三个数组表示不同的事件集合。poll也是在一定时间内轮询所有的描述符,但它将事件和描述结合。
#include <poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
struct pollfd
{
int fd; /* 文件描述符 */
short events; /* 注册的事件 */
short revents; /* 实际发生的事件,由内核填充 */
};
其中events告诉poll监听fd上发生的事件,他的每一位表示一类事件。revents由内核修改,通知应用实际发生了哪些事件。
typedef unsigned long int nfds_t;
int ret = poll(fds, MAX_EVENT_NUM, -1);
for (int i = 0; i < MAX_EVENT_NUM; i++)
{
if (fds[i].revents & POLLIN) /* 该描述符上有可读事件 */
{
int sockfd = fds[i].fd;
/* do something */
}
}
原文:https://www.cnblogs.com/xpl671/p/13580427.html