Passage de paramètre CreateThread
Bonjour,
Je suis actuellement sur un projet perso de serveur de chat mode console avec mon protocole bien à moi...
Donc, dès que je fais un accept, je lance un thread avec en paramètre une structure qui contient la socket du client, celle du serveur et la structure SOCKADDR_IN de l'accepté.
Mais le soucis, c'est que les données que j'ai mis dans la structure une fois passées au thread, son différentes.
J'ai franchement du mal à comprendre pourquoi.
Le code de la structure:
Code:
1 2 3 4 5 6 7 8
|
typedef struct paramserv
{
int server;
int client;
SOCKADDR_IN *info;
}paramserv; |
Voici un extrait du code dans la boucle serveur:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
if (listen(s_server, 64) == SOCKET_ERROR) /* listen : commencer l'ecoute */
fprintf(stderr, "La fonction listen a echoue.\n");
else
{//on créé un processus pour le client en demande de connection
while(1) //acceptation de nouveaux clients.
{
s_client = accept(s_server, (SOCKADDR *)&client, &csize);//entité bloquante.
if (s_client == INVALID_SOCKET)
fprintf(stderr, "La fonction accept a echoue.\n");
else
{
printf("nouveau client accepte\n");
pr->client=s_client;
pr->server=s_server;
pr->info=&client;//client = structure
CreateThread(NULL,(int)NULL,(LPTHREAD_START_ROUTINE) newClient, (LPVOID)&pr,(int) NULL, &dwThread);
}
}
} |
Et le code de la fonction appelée par le thread:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
void newClient(paramserv *pr)
{
printf("client %d",pr->client);
printf("serveur %d",pr->server);
SOCKET s_client = pr->client;
int s_server = pr->server;
SOCKADDR_IN *client = pr->info;
char pseudo[32];
//int csize = sizeof(client);
//s_client = accept(s_server, (SOCKADDR *)&client, &csize);
if (s_client == INVALID_SOCKET)
fprintf(stderr, "La fonction accept a echoue.\n");
else
{.... |