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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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 : 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
 
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
    {....