int ret;
ret = GetQueuedCompletionStatus(pthis->m_hIocp, &berByte, (LPDWORD)&re, (LPOVERLAPPED *)&pOverlap, INFINITE);if((!ret) || (ret && (0 == berByte))) //连接正常关闭
{
//客户端断开连接
OVERLAPPEDPLUS *olp = (OVERLAPPEDPLUS *)pOverlap;
closesocket(olp->s);
#ifdef _DEBUG
cout << "Connect Close :" << olp->name << endl;
#endif
continue;
}问题是,为什么有时当一个连接 关闭时,这里会反复出现几次?比如:一个名为Adsl29的连接 关闭了会出现
Connect Close :Adsl29
Connect Close :Adsl29
Connect Close :Adsl29
Connect Close :Adsl29甚至是
Connect Close :Adsl29
Connect Close :Adsl29
...
...
...
Connect Close :Adsl29
出现200多次??这是为什么啊?

解决方案 »

  1.   

    很可能是正常关闭后还对该套结字在完成端口上投递了很多强求,就是对套结字调用WSARecv或者WSASend 函数
      

  2.   

    关注,最近也在学习iocp编程,如果楼主方便的话,可以把程序发一份给我看看:) [email protected]  BTW:你用一个PostQueueCompletionStatus发送一个自己定义的退出消息不行吗,为什么会一直有退出的消息呢?我觉得会出现这么多的Connect Close :Adsl29 是不正常的,否则的话,第一次释放资源后,后面的再次释放会出错吧