Non riesco a postarti proprio tutto il codice perchè è molto articolato....
Questo è lo "scheletro":
codice:
/* Funzione del thread worker */
void * thr_worker(void * argv)
{
char * buffer, *buf;
buffer = calloc(256, sizeof(char));
buff = calloc(256, sizeof(char));
while(go)
{
if(mess->type == MSG_LOGIN)
{
printf("Login\n");
/* codice per il login*/
buff = msgserver_pack(mess_server->type, mess_server->msg, NULL, NULL);
write(newsockfd, buff, 256*sizeof(buff));
}
else if(mess->type == MSG_LOGOUT)
{
printf("Logout\n");
/* codice per il logout*/
buff = msgserver_pack(mess_server->type, mess_server->msg, NULL, NULL);
write(newsockfd, buff, 256*sizeof(buff));
}
else if(mess->type == MSG_REGLOG)
{
printf("Registrazione e login\n");
/* codice per il reg-log*/
buff = msgserver_pack(mess_server->type, mess_server->msg, NULL, NULL);
write(newsockfd, buff, 256*sizeof(buff));
}
else if(mess->type == MSG_LIST)
{
printf("List\n");
buff = msgserver_pack(mess_server->type, mess_server->msg, NULL, NULL);
write(newsockfd, buff, 256*sizeof(buff));
}
else //il server riceve un messaggio MSG_SINGLE o MSG_BRDCAST
{
printf("messaggio\n");
if(mess->type == MSG_SINGLE)
richiesta = mess->receiver;
else
richiesta = "broadcast";
inizializza(&buffer_circolare); //inizializzo il buffer circolare
inserisci(&buffer_circolare, richiesta); //inserisco la richiesta su un buffer circolare
if((pthread_create(&dispatcher, NULL, thr_dispatcher, NULL))<0)
//creazione del thread dispatcher
{
fprintf(stderr,"Errore!! Thread dispatcher non creato!!");
exit(1);
}
}
recv(newsockfd, buffer, 256*sizeof(buffer),0);
mess = (msg_t *) malloc(sizeof(msg_t));
mess = msg_unpack(buffer);
}
pthread_exit(NULL);
}
I messaggi sono costituiti da una struct e, per inviarli tramite socket internet, ho creato delle funzioni msg_pack e msg_unpack per impacchettare e per spacchettare il messaggio in un buffer. Premetto che il resto del codice funziona perchè l'ho provato a parte.