====== 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.