IOCP的使用
来源:互联网 发布:lol刷点卷软件2016 编辑:程序博客网 时间:2024/05/16 11:11
flag=GetQueuedCompletionStatus(
HANDLE CompletionPort,
LPDWORD lpNumberOfBytes,
PULONG_PTR lpCompletionKey,
LPOVERLAPPED *lpOverlapped,
DWORD dwMilliseconds
);
针对:如果 *lpOverlapped为空并且函数没有从完成端口取出完成包,返回值则为0。函数则不会在lpNumberOfBytes and lpCompletionKey所指向的参数中存储信息。
if(lpOverlapped== NULL) {continue;}
针对: 如果 *lpOverlapped不为空并且函数从完成端口出列一个失败I/O操作的完成包,返回值为0。函数在指向lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped的参数指针中存储相关信息。调用GetLastError可以得到扩展错误信息
if(FALSE == flag && GetLastError()!=0){ 归还IO句柄;continue;}
针对:如果关联到一个完成端口的一个socket句柄被关闭了,则GetQueuedCompletionStatus返回ERROR_SUCCESS,并且lpNumberOfBytes等于0 .
ERROR_SUCCESS这个值是0,即返回值是0(false)且GetLastError()等于0,与上面的错误处理代码是有分别的。
if(opType != IO_ACCEPT && dwByteTrans == 0) {做断开处理,归还IO;continue;}
针对: 如果函数从完成端口取出一个成功I/O操作的完成包,返回值为非0。函数在指向lpNumberOfBytesTransferred, lpCompletionKey, and lpOverlapped的参数中存储相关信息。
switch(){根据IO类型做相关操作}
}
现在的问题是:我需要在(FALSE == flag && GetLastError()!=0)的情况下做一些处理。导致GetQueuedCompletionStatus返回失败的因素有很多,最常见的是〖1236〗-由本地系统终止网络连接,〖1234〗-没有任何服务正在远程系统上的目标网络终结点上操作,〖64〗-指定的网络名不再可用等等。之前发生错误时简单的回还IO句柄,但有些问题由此而产生。(UDP问题:若完成键没有赋值,投递io没有进行,后期的数据会收不到)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xuwei2007/archive/2007/09/05/1773451.aspx
- Normal IOCP 的使用
- IOCP的使用
- IOCP的封装和使用
- IOCP使用
- IOCP的使用以及.net的应用
- IOCP使用时常见的几个错误
- 使用IOCP需要注意的一些问题
- IOCP使用时常见的几个错误
- IOCP使用时常见的几个错误
- libevent使用IOCP网络模型的示例
- UDP使用IOCP
- iocp 使用流程
- UDP使用IOCP
- IOCP使用小结
- 简单的使用 IOCP 模型的 TCP 服务器例子
- 在c#使用IOCP(完成端口)的简单示例
- 使用IOCP需要注意的一些问题~~(不断补充)
- 使用IOCP需要注意的一些问题~~(不断补充)
- 论中国崛起
- J. Craig Venter Institute creates first synthetic life form
- 有DataList绑定视频
- php5 apache2.2 mysql5 集成
- 进度条
- IOCP的使用
- 浮点数是如何保存的?
- 关于44b0中断
- 为什么中国出不了Facebook和Twitter?
- SSH(Secure Shell Protocol)命令之 grep
- Symbian 应用程序框架简介
- 对Hadoop中一段将字节码数组转换为Integer的代码的思考
- linux汇编工具之GAS(AT&T 语法)和NASM(Intel 语法)比较
- 转载一些关于QQ空间的文章