iocp,epoll编程

约定: 等待事件处理完毕后,才重新投递下一个异步操作

on_recv事件

epoll和iocp一样处理,都只关注可读事件

iocp 可以读事件

on_recv->修改m_b_posting_recv正在递收数据标记为false->判断是否在收数据m_b_recving(不要同时调多个recv)->将之前缓冲中数据读出到tagstart->recv将网卡数据读到tagstart->修改m_b_recving为true->on_recv上层逻辑处理->修改m_b_recving为false(本次收数据结束)->rcv_bf_data将剩余数据写会缓冲->投递异步接收buff大小为0,m_b_post_recv设置为true

epoll 可以读事件

on_recv->判断是否在收数据m_b_recving(不要同时调多个recv)->将之前缓冲中数据读出到tagstart->recv将网卡数据读到tagstart->修改m_b_recving为true->on_recv上层逻辑处理->修改m_b_recving为false(本次收数据结束)->rcv_bf_data将剩余数据写会缓冲

 

on_send事件

epoll关注发送完成事件 epoll关注可发送事件

iocp  数据已经发送成功事件

on_send->m_post_sending修改发送标记为false->post_event通知上层数据发送数量,从发送缓冲中取出待发送数据,重新投递异步发送,buff为固定大小

epoll 可以发送数据事件

on_send->m_can_send修改能否发送标记->do_send将发送缓冲中的数据发送(直至m_can_send为false或发送数据完毕)->post_event通知上层数据发送数量

posted on 2014-10-20 22:39  kangbry  阅读(305)  评论(0编辑  收藏  举报

导航