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通知上层数据发送数量