Indice

Esercitazione 10

Esercizio 1

Realizzare un programma C che implementa server che rimane sempre attivo in attesa di richieste da parte di uno o piu' processi client. Ogni client richiede al server la trasformazione di tutti i caratteri di una stringa da minuscoli a maiuscoli (es. ciao –> CIAO). Per ogni nuova connessione il server lancia un thread POSIX che gestisce tutte le richieste del client (modello thread x connessione) e quindi termina la sua esecuzione quando il client chiude la connessione.
Per testare il programma implementare uno script bash che lancia un certo numero di client ognuno che invia una o piu' richieste al server multithreaded.

Esercizio 2

Realizzare il codice dell'Esercizio 1 con un Pool di N threads (N e' un parametro del programma) secondo il modello master-worker (Listener thread + Coda + Pool di worker threads). Il thread del Pool gestisce interamente tutta la connessione verso un client.

Esercizio 3

Realizzare il codice dell'Esercizio 1 senza usare threads ma utilizzando la chiamata di sistema select per risolvere il non determinismo fra l'accettazione di nuove connessioni da parte dei client e la gestione delle richieste dei client gia' connessi.