Dom 18 Agosto, 07:08:37 - 2019

Autore Topic: Tesina SO - server Multithread  (Letto 554 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Miki88

  • Studente di Dottorato
  • ***
  • Post: 124
  • FeedBack: +5/-1
    • Mostra profilo
Tesina SO - server Multithread
« il: Gio 30 Giugno, 13:42:53 - 2016 »
Ciao ragazzi, mi è stata assegnata la tesina sul cinema e ho deciso di realizzarla tramite un server multithread.
Il main alloca gli argomenti per ogni nuovo thread e poi glieli passa:
Citazione
...
        handler_args_t* thread_args = malloc(sizeof(handler_args_t));
        thread_args->socket_desc = client_desc;
        thread_args->client_addr = client_addr;

        if (pthread_create(&thread, NULL, connection_handler, (void*)thread_args) != 0) {
....
L'handler prende i parametri passati e li usa in questo modo:
Citazione
void* connection_handler(void* arg) {

    handler_args_t* args = (handler_args_t*)arg;
 
    int socket_desc = args->socket_desc;
    struct sockaddr_in* client_addr = args->client_addr;
...
 
Quando il client esce regolarmente e il thread arriva alla fine della sua completa esecuzione procedo a liberare:
Citazione

...
    free(args->client_addr);
    free(args);
    pthread_exit(NULL);
...
Quando però il client esce a causa di un interruzione o altre cose impreviste, sul thread parte il gestore di segnale che però può solo fare
Citazione
pthread_exit(NULL);
...qualcun'altro ha realizzato il server multithread? come ha risolto questo problema?