然后在GetQueuedCompletionStatus里也计数,但在大量发送数据时,GetQueuedCompletionStatus里的计数不够。
程序的基本样子是这样的:
if(WSASend()==SOCKET_ERROR)
{
nSockErr=WSAGetLastError();
if(nSockErr!=WSA_IO_PENDING)
{
AfxMessageBox("err");
}
}
number1++;
_________________________________________
if (GetQueuedCompletionStatus(ClientCompltPort, &BytesTransferred,程序运行完成后,number2<number1。
(LPDWORD)&PerHandleData, (LPOVERLAPPED *) &PerIOData, INFINITE) == 0)
{
return 0;
}
if (BytesTransferred == 0)
{
// 处理错误
}
if(PerIOData->OperationType==WSA_SEND)
{
if(BytesTransferred!=PerIOData->DataBuf.len)
{
AfxMessageBox("send not ok");
}
number2++;
}
______________________________________________
有什么情况会导致整个结果呢?程序正常运行完成的,没有出现GetQueuedCompletionStatus失败,或者WSASend报错的情况,也没有报错"send not ok"。
我在想是不是WSASend过了WSA_IO_PENDING后,还会有什么没判断的?不过如果有错应该是会在GetQueuedCompletionStatus这里报错啊。