CSocket在线程中的Receive时出现系统异常,弹出error后,整个应用程序终了
线程中Send没问题,为什么啊???通过Debug,发现是在CSocket::Receive()函数中的While循环中出错了。int CSocket::Receive(void* lpBuf, int nBufLen, int nFlags)
{
if (m_pbBlocking != NULL)
{
WSASetLastError(WSAEINPROGRESS);
return  FALSE;
}
int nResult;
while ((nResult = CAsyncSocket::Receive(lpBuf, nBufLen, nFlags)) == SOCKET_ERROR)
{
if (GetLastError() == WSAEWOULDBLOCK)
{
if (!PumpMessages(FD_READ))
return SOCKET_ERROR;
}
else
return SOCKET_ERROR;
}
return nResult;
}出错地方为PumpMessages(FD_READ))时。

解决方案 »

  1.   


    再进一步debug进去,发现错误的根源:
    BOOL CSocket::PumpMessages(UINT uStopFlag)函数中的
       ASSERT(pState->m_hSocketWindow != NULL);执行时出错了。
             此时的pState->m_hSocketWindow为NULL,
    这好像是CSocket在多线程编程中的Bug。
    可我现在不能再改了,来不及了啊,今天就要完成的。。
    怎么办呢?
      

  2.   

    据说CSocket类在多线程情形下容易出问题,这是mfc的bug