|
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]通用对话框讲解,没有解决问题绝不罢休!,能实现扩展编辑框但获取不到内容!
|