完成端口IOCP,支持connect,没有多余的listen线程,不会有只能同时accept 64个socket的限制
最近写的一个程序要用完成端口,于是我在网上找了些完成端口的代码,
下载下来的代码,几乎都不能用,很多是VC6下用的,用vs2005编译,老是不能通过
于是,我就自己写了一个vs2005下能编译的完成端口类,支持connect这只有一个类,LPCLIENT_CONTEXT指向的是一个含有SOCKET相关信息的结构指针
可以能过LPCLIENT_CONTEXT得到本次连接的SOCKET相关信息
该类没有引入池的概念,因为我的程序用不池,所以没有必要花时间在上面,不过,实现池不难
重要的是该类支持connect函数,这个在网上不好找,我没有找到,是自己写的一个,
用这个类来做一个CC攻击器,效果应该不错,connect设计之初,就是为了来干这些坏事的,哈哈~~~
我相信有很多人在找完成端口的代码,找下来之后,用.net编译不了,有能编译的,但无效果,发一个出来,希望对大家有帮助
共同学习,进步
代码中有BUG,欢迎大家测试指出
10.9
今天更新一下,加入了内存缓冲池,修正了一个BUG,就是一接受连接或连接成功就关闭socket的时候,程序会无限循环,而至CPU使用达100%,差不多了,这个IOCP可以投入正式使用了
但我有一个问题如下:请大家指教一下
void CIOCP::DeleteClientContext(LPCLIENT_CONTEXT pclient)
{
closesocket( pclient->IoSocket );
//CloseHandle( pclient->hComPort );
/*
10.9
这里不能把与socket 绑定的完成端口CloseHandle,如果使用了,那么,
在WorkThreadFun中的GetQueuedCompletionStatus将得到windows 6号错误(错误的句柄),我参考了很多IOCP代码,都没有CloseHandle,不知道,这样会不会造成"句柄泄漏"
通过实验得出,这里的hComPort不能CloseHandle,只有等程序退出的时候,才能
*/
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!