ACE_Reactor中的handle_output

一直对ACE reactor framework中的handle_output困惑不解,而且个人觉得select是个很恶心的函数。

直到前段时间工作上需要用到网络编程,又把C++网络编程卷2找出来看看,写了几个小程序做实验才渐渐明白了reactor中都handle_output的触发条件。回想以前抱着书看了很久就是懒得动手写代码,结果总是一知半解的,看来“实践出真知”一点都不假。

 

关于handle_output的小结:

当ACE_WFMO_Reactor回调到handle_output时你可以认为一直可写,直到写操作返回EWOULDBLOCK为止。如果socket一直都可以写,ACE_WFMO_Reactor只会调用一次handle_output。因为socket本身的状态没有发生改变,ACE_WFMO_Reactor不会将它放在待分派的事件源中。那么下一次调用handle_output会是什么时候呢?答案是socket从不可写状态变为可写。这就是所谓的“边缘触发方式”。

再来看看ACE_Select_Reactor。Select_Reactor基于BSD Socket的select系统函数,使用的是“水平触发方式”。也就是说,如果socket可写,ACE_Select_Reactor就会不停地调用handle_output,可以说它是比较勤快和公平的,呵呵。

 

下面是个简单的测试程序:echo服务器。你可以通过宏USE_SELECT_REACTOR来决定使用WFMO_Reactor还是Select_Reactor。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce Jia(上海)

熬夜码字换酒钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值