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