I have a class (CArchSockListener) which is derived from CSocket.
I'm using C++ in Visual Studio 2005 Team Suite, (release version, not beta).
When my class was used directly from a dialog based app, I had no touble.
I wanted to move the comms to a separate thread, so I derived a new thread class (CCommsThread) from CWinThread, and constructed my CSocket derived class in there using this code in CCommsThread::Run()...
// Start the archive throughput listener
m_pArchSockListener = new CArchSockListener(); // 1 m_pArchSockListener->m_pParent = this; // 2 m_pArchSockListener->Create(61000); // 3 m_pArchSockListener->Listen(); // 4The problem is that my code now crashes on line 3.
The call stack shows that the crash occurs in the (MS provided) map_pp.cpp file at line 179 shown here...
CMapPtrToPtr::GetValueAt(void* key)
{
ENSURE(this); // crash occurs here.
...
}
Looking up through the call stack, this appears to be because pState in CAsyncSocket::AttachHandle(...) (also MS code - not mine) which is _afxSockThreadState. points to a state which has m_pmapSocketHandle == NULL.
So my question is, does my CSocket derived class have to run in a GUI thread Or how do I get my CSocket based class to work from within a CWinThread

CSocket derived class throws exception on call to Create()
MoronAbc123
Silly me.
I had not called AfxSocketInit() in the thread.
How easily we forget to do the things that the MFC AppWizard does for us....
Bill_M
Try and follow the guidelines from this KB article :-
http://support.microsoft.com/kb/q140527/