poll函数:
该函数在select函数之后出现,为了克服select的一些缺点,形式如:
poll(struct pollfd fdarray[ ] ,nfds_t nfds ,int timeout)
第一个参数是一个结构体数组指针;数组中的每个元素为一个结构体struct pollfd;
第二个参数指定关心的描述符个数;类型为unsigned long 型,一般认为这个数字是我们刻意监听任意数量的描述符;
第三个参数表示超时时间,(如果大于0的话就是指定等待的
毫秒数,如果等于0表示不等待直接返回,如果为-1表示永远等待);
struct epollfd
{
int fd;//如果是-1就忽略;
short events;//关心的事件集合;
short revents;//真正发生在这个描述符上的事件集合;
}
另外:poll函数并没有改变传进去的events成员,通过revents成员来告知用户;也不再限定可以监听的描述符的数量;
返回值:
poll函数也有三个返回值,分别为出错返回,超时返回,正常返回;
出错返回,一般为在等待期间捕获到信号而返回,返回值为-1;
超时返回,返回值为0;
正常返回,返回值为准备好的描述符数量;
缺点:
依然没有告诉用户,到底是哪个描述符准备好了,需要你逐个地去排查;
不是线程安全的;