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