需要这样一个记事本-11 完成端口IOCP应用问题记录
2015-02-09 17:30
330 查看
1.GetQueuedCompletionStatus()函数阻塞无返回。
问题描述:使用完成端口模型制作网络数据转发模块,TCP应用某有问题,使用Accept能正常侦听使用单独接收线程能完成客户端连接操作(此处不会用WSAAccept,有大神还请赐教)。使用WSARecv、WSASend进行投递能正常完成数据收发。后改为UDP通信,使用WSARecvFrom、WSASendTo进行投递,GetQueuedCompletionStatus总没有返回。
问题解决:网上查资料一直没有得到解决,都说该模型很成熟,应该相信微软的软件设计师来找自己的问题。接下来就是在各处添加异常处理。问题出来啦,在投递WSARecvFrom时返回值为Socket_Error,WSAGetLastError返回最近了次Socket错误码为10014。到此为止,问题原因应该已经出来啦。接下来解决10014问题。
2.WSARecvFrom、WSASendTo时10014异常
百度结果:10014 -WSAEFAULT:地址无效。传给Winsock函数指针地址无效。若指定的缓冲区太小,也会产生这个错误。
首先看WSARecvFrom比WSARecv区别
问题描述:使用完成端口模型制作网络数据转发模块,TCP应用某有问题,使用Accept能正常侦听使用单独接收线程能完成客户端连接操作(此处不会用WSAAccept,有大神还请赐教)。使用WSARecv、WSASend进行投递能正常完成数据收发。后改为UDP通信,使用WSARecvFrom、WSASendTo进行投递,GetQueuedCompletionStatus总没有返回。
问题解决:网上查资料一直没有得到解决,都说该模型很成熟,应该相信微软的软件设计师来找自己的问题。接下来就是在各处添加异常处理。问题出来啦,在投递WSARecvFrom时返回值为Socket_Error,WSAGetLastError返回最近了次Socket错误码为10014。到此为止,问题原因应该已经出来啦。接下来解决10014问题。
2.WSARecvFrom、WSASendTo时10014异常
百度结果:10014 -WSAEFAULT:地址无效。传给Winsock函数指针地址无效。若指定的缓冲区太小,也会产生这个错误。
首先看WSARecvFrom比WSARecv区别
int WSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr FAR* lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine );
红色字体为WSARecvFrom多出部分。用来存放目标机Socket信息及结构体大小。
问题解决:在投递WSARecvFrom前先申请参数lpFrom空间,类型为PSockAddr。lpFromlen=Sizeof(PSockAddr^);运行程序,投递结果仍为Socket_Error,这次参数值为997。WSA_IO_PENDING=997,错误代码WSA_IO_PENDING表明重叠操作已成功启动,完成将显示在稍后的时间。该操作为正常现象,屏蔽掉即可。
相关文章推荐
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求
- 需要这样一个记事本-15 ReportViewer打印默认页边距、页面方向问题
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求
- 《解决问题1000.1》又是I2C驱动问题,产品应用上一个问题,非常简单,也比较典型,记录一下
- 需要这样一个记事本-13 SVN检出的文件夹及文件状态图标不显示解决办法
- 抢购是如今很常见的一个应用场景,主要需要解决的问题
- 最近做了一个iOS小应用,记录下遇到的问题以及解决方法
- 需要这样一个记事本-6 SQL中索引的原理
- 2017-6-14 关于使用history.go的问题!配合原生应用嵌入H5页面(只有一个webview的的单页应用)返回历史列表记录的问题
- 遇到一个IE升级到IE8之后脚本无法跑的问题。那么对于这样的问题,我们需要如何去处理?
- 需要这样一个记事本-12 C#命名空间介绍
- 需要这样一个记事本-17 VS 2010 远程调试
- 需要这样一个记事本-16 DotNet C# 匿名委托简化代码
- 需要这样一个记事本-14 ReportViewer在多页报表情况下,每页都显示表格列表头
- 需要这样一个记录本-2 SQL Server触发器应用实例
- 一个小sql的问题记录 对分析函数的应用