VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 152|回复: 1

完成端口 客户退出的疑问?

[复制链接]
35_avatar_middle
最佳答案
0 
online_vip 发表于 2020-2-8 14:11:27 | 显示全部楼层 |阅读模式
DWORD lpNumberOfBytesTransferred = 0;
                CSocketData* CSData = NULL;
                LPPER_IO_DATA* PIoData = NULL;
                BOOL bIORet = GetQueuedCompletionStatus(
                        pTcpSever->m_hCompletionPort,
                        &lpNumberOfBytesTransferred,
                        (PULONG_PTR)&CSData,
                        (LPOVERLAPPED *)&PIoData,
                        INFINITE);

                if (!bIORet)
                        continue;

                if (!lpNumberOfBytesTransferred && !CSData && !PIoData)
                        break;

这是在网上,而且包括很多教程的源码实例,每当客户端closesocket(socket)的时候,返回值bIORet会为0,为什么不会像
if (0 == lpNumberOfBytesTransferred && PIoData && (PIoData->OperationType == SO_SEND || PIoData->OperationType == SO_RECEIVE))

去清理delete呢?

我看了GetQueuedCompletionStatus的一些资料。
If a socket handle associated with a completion port is closed, GetQueuedCompletionStatus returns ERROR_SUCCESS, with lpNumberOfBytes equal zero.
这个意思就是当你closesocket(socket)的时候,返回值也会出现为0,那么我直接在返回值0的时候清理delete不行吗?




上一篇:Fiddler这个怎么破啊
下一篇:[15]通用对话框讲解,没有解决问题绝不罢休!,能实现扩展编辑框但获取不到内容!
77_avatar_middle
最佳答案
31 
online_vip 发表于 2020-2-8 17:16:37 | 显示全部楼层
这个我感觉怎么也应该删除呢?
楼主不妨也删除下试试,跑一段时间看看程序是否稳定
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-1 07:06

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表