并且*lpOverlapped非空, lpNumberOfBytes 等于零,说明完成端口与套接字的关联已经被关闭。
出现情况是,服务操作了远程数据库,客户又是在线程里不停的发送和接收,客户没有正常关闭线程,而是直接关闭了对话框,照此操作就会让服务器洗白,我现在不知道怎样能避免这种极端客户的操作,有好意见的朋友不防说来听听。
7 个解决方案
#1
脱靶?
不懂 帮你顶
不懂 帮你顶
#2
就是套接字与完成端口的关联无效了,如何重新关联?再使用CreateIoCompletionPort((HANDLE) mConSock, CompletionPort, (DWORD) PerHandleKey,0);失败了。
#3
我使用过那么长时间,重没发现这个问题,IOCP肯定是没有问题的,最好仔细检查一下你的代码
#4
关注
#5
是有这种情况的。
其实对于这种情况来说,检查到"脱靶"的UDP这端是没有问题的,楼主重新投递一次就可以了。
但是楼主的问题应该在于当检查到这种情况时,就把这个UPD套接字关闭了是吧???
所以楼主在建立与这个socket句柄相关联的时候保存其UDP句柄的类型,当出现这种情况的时候,先判断是否为UDP类型的句柄,如果是,则重新投递就可以了。因为按正常下UDP是不会出现这种情况的。
你重新投递一下就可以重新有效了。
其实对于这种情况来说,检查到"脱靶"的UDP这端是没有问题的,楼主重新投递一次就可以了。
但是楼主的问题应该在于当检查到这种情况时,就把这个UPD套接字关闭了是吧???
所以楼主在建立与这个socket句柄相关联的时候保存其UDP句柄的类型,当出现这种情况的时候,先判断是否为UDP类型的句柄,如果是,则重新投递就可以了。因为按正常下UDP是不会出现这种情况的。
你重新投递一下就可以重新有效了。
#6
谢谢楼上,我曾经这么做了,还是有问题,不过今天看了你的回复,重试了一遍,既然成功了。
你能不能解释一下为什么会发生这样的情况?
你能不能解释一下为什么会发生这样的情况?
#7
做过udp+iocp,但没见到这种现象。帮你up,顺便学习。
#1
脱靶?
不懂 帮你顶
不懂 帮你顶
#2
就是套接字与完成端口的关联无效了,如何重新关联?再使用CreateIoCompletionPort((HANDLE) mConSock, CompletionPort, (DWORD) PerHandleKey,0);失败了。
#3
我使用过那么长时间,重没发现这个问题,IOCP肯定是没有问题的,最好仔细检查一下你的代码
#4
关注
#5
是有这种情况的。
其实对于这种情况来说,检查到"脱靶"的UDP这端是没有问题的,楼主重新投递一次就可以了。
但是楼主的问题应该在于当检查到这种情况时,就把这个UPD套接字关闭了是吧???
所以楼主在建立与这个socket句柄相关联的时候保存其UDP句柄的类型,当出现这种情况的时候,先判断是否为UDP类型的句柄,如果是,则重新投递就可以了。因为按正常下UDP是不会出现这种情况的。
你重新投递一下就可以重新有效了。
其实对于这种情况来说,检查到"脱靶"的UDP这端是没有问题的,楼主重新投递一次就可以了。
但是楼主的问题应该在于当检查到这种情况时,就把这个UPD套接字关闭了是吧???
所以楼主在建立与这个socket句柄相关联的时候保存其UDP句柄的类型,当出现这种情况的时候,先判断是否为UDP类型的句柄,如果是,则重新投递就可以了。因为按正常下UDP是不会出现这种情况的。
你重新投递一下就可以重新有效了。
#6
谢谢楼上,我曾经这么做了,还是有问题,不过今天看了你的回复,重试了一遍,既然成功了。
你能不能解释一下为什么会发生这样的情况?
你能不能解释一下为什么会发生这样的情况?
#7
做过udp+iocp,但没见到这种现象。帮你up,顺便学习。