I/O多路复用之poll模型

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;
正常返回,返回值为准备好的描述符数量;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值