使用CSocket和CWinThread无法解决的ASSERT(pThreadState->m_hSocketWindow != NULL);的两个有关问题

使用CSocket和CWinThread无法解决的ASSERT(pThreadState->m_hSocketWindow != NULL);的两个问题。
按照http://support.microsoft.com/kb/140527/en-us的解决方法如下:
void   CTransmitServerDlg::ProcessPendingAccept()
{
      CServerToClientSocket*   pSocket   =   new   CServerToClientSocket();
      if   (m_pListenSocket.Accept(*pSocket))
      {
      CClientThread*   pClientThread   =(CClientThread*)AfxBeginThread(RUNTIME_CLASS(CClientThread),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
pClientThread-> hConnected   =   pSocket-> Detach();   //SOCKET   hConnected;在CClientThread中定义
pClientThread-> ResumeThread();
      }
}
BOOL   CClientThread::InitInstance()
{     pClientSocket-> Attach(hConnected); }
但是还是有这个错误,不知道为什么?
同时在服务器退出,运行到pClientThread-> pClientSocket-> Close();在这里出现异常:
void   PASCAL   CAsyncSocket::KillSocket(SOCKET   hSocket,   CAsyncSocket*   pSocket)
        {
                        ASSERT(CAsyncSocket::LookupHandle(hSocket,   FALSE)   !=   NULL);
这两个问题这么了好久,请高手帮忙解答,如果分数不够解决后另外给分,多谢。

------解决方案--------------------
不要用MFC干这个,改用WINSOCK的API。
------解决方案--------------------
我也遇到过同样的问题,你可以用如下的方法来试试:

首先在CClientThread类中放置一个你的ClientSocket对象,也就是把你的hConnected句柄换成对象,然后通过以下语句来设置:
......
server.Accept((CSocket&)m_ClientSocket);
pClientThread-> m_ThreadSocket=&m_ClientSocket;
pClientThread-> m_ThreadSocket-> Attach(m_ClientSocket.Detach(),FD_READ|FD_CLOSE);
.......


------解决方案--------------------
http://support.microsoft.com/kb/175668/en-us

How to pass a socket connection between threads in an MFC application in Visual C++