I/O多路复用之poll模型

来源:互联网 发布:大学生网络家教 兼职 编辑:程序博客网 时间:2024/05/22 17:08
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;
正常返回,返回值为准备好的描述符数量;

缺点:
依然没有告诉用户,到底是哪个描述符准备好了,需要你逐个地去排查;
不是线程安全的;

0 0
原创粉丝点击