对于BOOL bIORet = GetQueuedCompletionStatus(......)
返回 FALSE,GetLastError()=64,查到“指定的网络名不再可用。”
这时的LPOVERLAPPED* lpOverlapped为NULL,导致无法删除该内存。
怎么办?

解决方案 »

  1.   

    因为你的socket句柄无效了,也就是说指定的socket句柄被closesocket()了。
      

  2.   

    原因我知道,是我自己搞的测试client搞出来的。关键是解决办法,谢谢!
      

  3.   

    其实可以在key那里做文章,但是这样总感觉不妥
      

  4.   

    sprintf(LogMsg,"GetQueuedCompletionStatus failed with error %d\n", GetLastError());
    ShowLogMsg(1,LogMsg);
    if(iError==64)
    {
    // continue;
    }
      

  5.   

    如果是C++,让那块内存跟那个Socket/IO对象关联,由IO对象负责释放
      

  6.   

    wsadata中只要你指定一个地址而已,你可以对每一个socket维护一段buffer,当返回64时,你必须closesocket()的,这时free()不就ok了,何况key是个很好的办法。http://community.csdn.net/Expert/TopicView3.asp?id=4370844看看有帮助没?