Voila je développe un petit serveur sous visual, le principe est simple:
J'ai un CSocket "listener" qui écoute un port fixe auquel les clients se connectent.
Quand ils se connectent (message OnAccept), je crée un nouveau CSocket, je l'active avec le précédent et je le détache du thread courant. Je crée alors un nouveau thread dans lequel j'attache ce CSocket, et dans lequel je capture les évènements du client, ce qui donne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
void OnAccept()
{
   CSocket* sock =  new CSocket;
   Listener.accept(CSocket);
   SOCKET SocketHandle = sock.detach();
   AfxBeginThread(MethodeThread, SocketHandle);
}
 
UINT MethodeThread(LPVOID pParam)
{
   CSocket* sock = new CSocket;
   SOCKET* hsock = static_cast<SOCKET*>(pParam)
   sock.attach(hsock);
}
C'est volontairement très simplifié... Donc PAS TOUT LE TEMPS (et c'est bien le problème) j'ai une assertion dans sockcore.cpp, dans la méthode DoCallBack(). Pas mal de monde a eu ce problème (voir sur CodeGuru et autre) et personne n'arrive à le résoudre. J'ai entendu parler d'une histoire de pompe d'éxécution qui ne s'arrêterait pas, enfin c'est pas de mon niveau. Help.[/code]