Bonjour

J'ai un probleme que je ne comprend pas.
J'essae de realiser un serveur pouvant accepter plusieurs clients
pour cela je cr�e un thread du serveur pour pouvoir accepter toute les connexions entrantes et un thread client quand un client est accept� mon souci est que je n'arrive pas a attacher le handle de la socket du client

le code

un typedef pour passer met variable a travers les thread

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
typedef struct MYVAR{
CListBox* mylist;
SOCKET* handle;
}MYVAR;
le thread du serveur
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
16
17
18
19
20
21
22
23
MYVAR* thevarserver = (MYVAR*)Param;
	if (!AfxSocketInit()) thevarserver->mylist->AddString("Init socket not OK");			//initialisation des sockets
	CSocket *Lsocket=new CSocket;		//socket d'ecoute
	CSocket *Wsocket=new CSocket;		//socket de travail
	SOCKET hConnected;				//handle de socket, pour le passage a l'autre thread
	if (Lsocket->Create(PORT,SOCK_STREAM))	//creation de a socket TCP	(pour UDP: SOCK_DGRAM)
	{
		thevarserver->mylist->AddString("Server started");
		Lsocket->Listen();			//mise de la socket en mode �coute (pas mode r�ception)
		thevarserver->mylist->AddString("Listen started");
		while(1)
		{
		 mutex.Lock();					//prend le mutex
			Lsocket->Accept(*Wsocket);		//Redirige la connection entrante sur la socket de travail
 			hConnected =  Wsocket->Detach();		//recupere les parametres de la socket de travail

			MYVAR * thevarclient = new MYVAR;
			thevarclient->mylist = thevarserver->mylist;
			thevarclient->handle = &hConnected;
			AfxBeginThread(Client,thevarclient);//lance la fonction travail comme nouveau thread, avec parametre de socket
			thevarserver->mylist->AddString("wait for client");
			thevarserver->mylist->EnableWindow(true);
		}
et le thread du client ou j'ai l'erreur

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
UINT CMyServerDlg::Client(LPVOID sock)
{

	MYVAR* thevarclient = (MYVAR*)sock;

	char rdBuf[100];
	CSocket *Wsocket=new CSocket;		//socket de travail
	Wsocket->Attach(*thevarclient->handle);	//parametrage de la nouvelle socket de travail
l'erreur est :

DEBUG ASSERTION FAILED
Program...
File: f:\sp\vctools\vc7libs\ship\atlmfc\src\mfc\map_pp.cpp
Line : 179

ensuivant pas pas j'arrive a

ASSERT(CAsyncSocket::LookupHandle(hSocket, bDead) == NULL);

dans sockcore.cpp fonction void PASCAL CAsyncSocket::AttachHandle(SOCKET hSocket, CAsyncSocket* pSocket, BOOL bDead)
qui me cree l'assertion

cordialement