本帖最后由 VisualEleven 于 2011-09-02 11:26:02 编辑

解决方案 »

  1.   

    memset(&wsaData->buffer, 0, sizeof(WSAOVERLAPPED));LX继续
      

  2.   

    本帖最后由 VisualEleven 于 2011-09-02 11:25:50 编辑
      

  3.   

    &static_cast<WSAOVERLAPPED&>(*wsaData),什么语法,我菜,谁解析下
    应该有个OVERLAPPED成员(假设为Overlapped)吧,那直接用&wsaData->Overlapped
    或者reinterpret_cast<WSAOVERLAPPED*>(&wsaData)
      

  4.   

    写的代码很烂。 说实话。看着都难受。找bug更难受。 
      

  5.   

    WSARecv(wsaData->sClient, &wsaData->buffer, 1, &wsaData->NumberOfBytesSRd, &wsaData->Flags,
     &static_cast<WSAOVERLAPPED&>(*wsaData), RecvCompletionRoutine)红色的地方如果使用全局变量好像会出错,前些天做过一个服务器项目,就出现了这种问题
      

  6.   

    这段代码效率太低了.
    要保证不出错,wsaData->pCommObject->RecvCallBackFun必须是阻塞的.如果该回调函数是阻塞的,则根本不能发挥IOCP的优势.
    PS,根据函数名和原型判断是使用的IOCP模型.
      

  7.   

    写代码都不用判断一下OVERLAPPED是否有效的吗?
      

  8.   


    是我搞错了,本来memset(&wsaData->buffer, 0, sizeof(wsaData->buffer));
    一来是编辑时搞错了,二是这个memset没必要