网络I/O模块的IOCP扩展

功能函数

     0.1 socket工厂 (创建socket,绑定完成端口CreateIoCompletionPort)

-------------------------------------------------主线程-----------------------------------------------

1.初始化

     1.1 创建一个完成端口

     1.2 创建线程池

2.创建绑定socket

     2.1 调用0.1    (创建ListenSocket)

     2.3 绑定端口

3.设置为被动或主动

     3.1 listen

     3.2 获得AcceptEx指针

     3.3 调用0.1(创建AcceptSocket)

     3.4 调用AcceptEx(根据设置确定初始投递多少个),设置第三个参数为0

4.while(1){

5.执行某种阻塞调用

     5.1 调用WSAEventSelect,监听FD_ACCEPT事件(监听到时,在总AcceptEx 请求小于设置的最大值的情况下,投递一个新的AcceptEx请求),并设置一个超时(可配置的),超时的话,检查当前活动线程数,看是否要创建一个新的工作者线程(创建新的线程不会使总线程数超过设置的最大值)

如下:

WSAEventSelect();

if(超时||time_last-time()>超时值) {

检查当前活动线程数,接近总线程数时创建一个新的工作者线程

调用用户提供的回调函数,满足用户的定时需求(这个定时是一个不稳定的定时[t,2t))。

time_last=time();

}

if(FD_ACCEPT){

执行0.1,投递一个AcceptEx

}

当接收到关闭信号时,向工作者线程投递关闭信号

 

--------------------------------------------工作者线程-----------------------------------------------

1. 一些初始化

2.while(1){

GetQueuedCompletionStatus

当接收到AcceptEx完成包时,投递一个新的AcceptEx请求

当接收到Read完成包时,………………

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值