Пишу многопотоковый сервер с использованием CAsyncSocket. Существует следующая проблема
при подключении нового клиента выбрасывается следующее исключение
Unhandled exception at 0x00405dc2 in server.exe: 0xC0000005:
Access violation reading location 0x0000000c.
даноное исключение происходит в файле sockcore.cpp т.е в стандартном MFC
файле на следующих строках
ASSERT(CAsyncSocket::LookupHandle(hSocket, bDead) == NULL);
if (pState->m_pmapSocketHandle->IsEmpty())
{
}
данная ошибка происходит только если проект откомпилирован с использованием
Use MFC in a Static Library, если ставишь Use MFC in a Shared DLL все работает идеально.
Я лишние dll-ки не очень люблю поэтому интересует решение данной проблемы. Если кто знает
пожалуйста ответте. Заранее спасибо.
Здравствуйте, yuru, Вы писали:
Y>ASSERT(CAsyncSocket::LookupHandle(hSocket, bDead) == NULL);
Y>if (pState->m_pmapSocketHandle->IsEmpty())
Y>{
Y>}
#ifndef _AFXDLL
#define _afxSockThreadState AfxGetModuleThreadState()
#define _AFX_SOCK_THREAD_STATE AFX_MODULE_THREAD_STATE
// setup maps and lists specific to socket state
// эти самые списки при статик-сборке не устанавливаются автоматом - нужно создать руками
_AFX_SOCK_THREAD_STATE* pState = _afxSockThreadState;
if (pState->m_pmapSocketHandle == NULL)
pState->m_pmapSocketHandle = new CMapPtrToPtr;
if (pState->m_pmapDeadSockets == NULL)
pState->m_pmapDeadSockets = new CMapPtrToPtr;
if (pState->m_plistSocketNotifications == NULL)
pState->m_plistSocketNotifications = new CPtrList;
#endif
WSAStartup( 0, NULL );
у меня этот код располагается в каждой нити — перед выполнением WSAStartup