CAsyncSocket проблема
От: yuru  
Дата: 01.03.06 12:42
Оценка:
Пишу многопотоковый сервер с использованием 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-ки не очень люблю поэтому интересует решение данной проблемы. Если кто знает
пожалуйста ответте. Заранее спасибо.
Re: CAsyncSocket проблема
От: J.J.OK  
Дата: 01.03.06 12:53
Оценка:
Здравствуйте, 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 );
Чем безопаснеe — тем неудобнее ;-)
Re[2]: CAsyncSocket проблема
От: yuru  
Дата: 02.03.06 17:31
Оценка:
Здравствуйте, J.J.OK, Вы писали:

спасибо, только куда поместить этот код пробовал в конструктор класса наследуемого от CAsyncSocket —
не работает.
Кстати что-то подобное присутствует в sockcore.cpp поэтому непонятно зачем писать еще раз?
Re[3]: CAsyncSocket проблема
От: J.J.OK  
Дата: 03.03.06 07:46
Оценка:
у меня этот код располагается в каждой нити — перед выполнением WSAStartup
Чем безопаснеe — тем неудобнее ;-)
Re[3]: CAsyncSocket проблема
От: J.J.OK  
Дата: 03.03.06 07:56
Оценка:
посмотрел — в sockcore.cpp это AfxSocketInit
если в каждой нитке выполнят ее а не просто WSAStartup — то должно работать
Чем безопаснеe — тем неудобнее ;-)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.