Chinaunix首页 | 论坛 | 博客
  • 博客访问: 315200
  • 博文数量: 89
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 691
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-20 16:58
文章分类

全部博文(89)

文章存档

2017年(1)

2016年(35)

2015年(53)

我的朋友

分类: WINDOWS

2016-11-03 10:38:47

iocp在发送或接送数据的时候可能会出现乱顺问题, 主要处理办法使用list来保证顺序:

发送:
1, 发送的时候, 先将数据组成成io entry,
    再调用WSASend(...)发送数据,
   如果数据发送不成功(pending), 则将该io entry加入io_send_queue(fifo队列)

2, 每次异步GetQueuedCompletionStatus中得到SEND_POST时, 表示有数据发送成功,
    再从io_send_queue取出io entry, 经数据发送(发送成功的数据从queue中删除), 直到发送pending.


接收:
1, 调用WSARecv(..)为iocp投递buffer, 可以多线程投递, 不用管顺序, 一般来说先投递的buffer, 会先返回.

2, 异步GetQueuedCompletionStatus中得到RECV_POST时, 通过重疊io获取投递的buffer数据, 将buffer加入
io_recv_queue(fifo),  而后其他处理线程可以从io_recv_queue(fifo)逐一取出数据,  从io_recv_queue中取出的数据
可以保证是有序的




阅读(1828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~