IOCP中,发出一个WSARecv调用后,返回WSA_IO_PENDING。然后服务器端主动对这个连接执行closesocket,按照正常情况,这个WSARecv应该从GetQueuedCompletionStatus这里返回,可是有些时候就是不返回。有没有人遇到过?是什么原因引起的?只有偶尔不返回,不是所有的都不返回。
解决方案 »
- FindWindow()怎么获取隐藏窗口的句柄
- 符号8Bit 16Bit 转32Bit算法?
- Windows API函数中有TEXT()这个函数吗?
- 串口用CreateFile方式打开时,如何判断串口中已经有数据传进来了?
- 请问如何改变一个编辑框和静态文本框中字体的颜色?
- 请问如何在自定义窗口类中响应 WM_LBUTTONCLK 消息?
- VC6.0怎么打开Access2000的数据库?
- 子窗体不响应WM_RBUTTONDOWN消息
- 请教: 为什么我的对话框总有一个按钮获得焦点?
- 如何锁定VC++源代码?
- 请问如何才能侦测到 是否有程序(木马)在监视我系统键盘鼠标的输入, 同时请问木马是通过什么机制捕获 机器键盘和鼠标的输入的?
- 谁能给个对bmp淡入淡出的代码
是不是其它地方的问题?
会返回的,因为WSARecv执行后说明有一个“待决”的操作关于相应的SOCKET正在等待,如果SOCKET关闭了,那么待决操作应该是返回通知应用程序。
--------------------------------------------------
就是这么奇怪,就是不返回。在closesocket后,原来的WSASend不返回。但是我接着在这个Socket上再次调用WSASend,调用失败,WSAGetLastError的值是10038,这说明系统已经知道了这个SOCKET关闭了,但是以前正在PENDING那个WSASend就是不从GetQueuedCompletionStatus这里返回,我也查看了,调用GetQueuedCompletionStatus的两个线程都正在GetQueuedCompletionStatus上阻塞着,但是就是不返回
设置一个完成键标志.
先用PostQueuedCompletionStatus提交退出的操作.
设置一个完成键标志.
-------------------------------------------------------------
用PostQueuedCompletionStatus能导致不返回的那个WSASend从GetQueuedCompletionStatus这里返回?