Come programmare le socket in ambienti GNU/Linux (Parte 2)
Nel primo articolo abbiamo analizzato il funzionamento delle socket e di un server con rispettivo client. In questo vedremo un modo di programmare un tipico server concorrente utilizzando la funzione fork().
Prima di addentrarci nel codice del server concorrente, vediamo un po' come funziona la tecnica di forking.
Forking
Il forking consente di effettuare delle copie di un processo. Il processo che genera copie di se stesso si chiama processo padre, mentre la copia viene chiamata processo figlio. Fork in inglese significa “forchetta”, il termine non rispecchia altro che il comportamento di questa operazione. Infatti si può associare al manico di una forchetta il processo padre e ad ogni rebbio si può associare un processo figlio.
Bisogna fare attenzione ad usare il forking. Il processo quando genera un figlio, le variabili ed altre risorse non vengono condivise.
Qui a lato è mostrato uno schema che riassume sinteticamente il funzionamento di questa tecnica. In un certo punto del programma si effettua una chiamata alla funzione fork che divide il programma in due, tale funzione:
- se ha esito negativo restituisce -1, in questo caso non viene generato alcun processo figlio ed errno viene settata;
- se ha esito positivo restituisce 0 al processo figlio, mentre al processo padre viene restituito il PID (Process ID) del processo figlio.
Dato che non è scopo dell'articolo illustrare nel dettaglio la tecnica di forking, si rimanda al seguente link [in inglese] per eventuali approfondimenti.
» Continue reading "Come programmare le socket in ambienti GNU/Linux (Parte 2)"

