一 个 封 装 了 IOCP 的 DLL

======================= 一 个 封 装 了 IOCP 的 DLL ====================================

设计想法:
 1、IOCP的DLL实现内存自制,既内存DLL自我管理,用户申请内存,用户释放,DLL的内存,用户不得释放
 2、用户至少需要提供三个LPTHREAD_START_ROUTINE类型的指针,用户处理接收数据、接受客户端连接、以及用户释放连接等事件
    当然,也可以将传入NULL表示不处理对应事件。此外,用户也可以选择是否处理发送成功消息(并没处理发送失败事件,可
    以考虑未来版本增加),在每次处理事件结束后,IOCP的DLL不保证数据仍然可用,如果用户对那些信息感兴趣,应该自己
    保持一份信息!
设计细节:
 1、IOCP初始化时,创建一个用于接收客户端连接的线程,此线程会一直阻塞在accept函数上,直到有新连接进来或者accept被打断,
    如果有新连接到来,将在堆上创建一个PER_HANDLE_DATA类型的结构,并包含两段内存(一段用于此socket的接收数据缓冲,另一
    段用户此socket的发送缓冲),此结构在中断连接后释放,用户不需要管理。
 2、IOCP初始化时,亦同时创建N个(N 等于当前机器CPU个数)的工作线程,这几个线程负责IOCP DLL的大部分工作(并将调用创建初始
    给出的事件处理函数,并将对应的PER_HANDLE_DATA的地址传给事件处理函数)。具体看代码和示例代码
 3、IOCP初始化时,还将创建一个垃圾回收线程,用户处理垃圾回收,因为在工作线程得知连接中断后,并不是马上释放内存,
    而是将数据放入垃圾站,由垃圾回收线程进行回收
 4、用户delete iocp时,iocp会等待以上线程均安全退出,并中断和释放当前仍在线的连接,然后安全退出。
已知BUG:
 1、垃圾回收线程,仍然无法保证不释放仍在使用的内存(尽管概率很小)

额外说明:
 1、毕设用的IOCP,未能做大量测试,可能存在未知BUG,如果发现BUG,请按以下联系方式联系本人,不甚感激!!
 2、特别注意,IOCP不保证所调用的事件处理函数是线程安全的,这部分应该有用户自行保证!
 3、最新更新,请留意  svn://svnhost.cn/IOCP_DLL
联系方式:
 Email:helloripple@qq.com
 QQ:271547131
 
 Ripple
 2010年5月6日
 于福州大学

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值