+Tutto quello che scriveremo sul client sarà rimandato indietro dal server e
+ristampato a video fintanto che non concluderemo l'immissione dei dati; una
+sessione tipica sarà allora del tipo:
+\begin{verbatim}
+[piccardi@roke sources]$ ./echo 127.0.0.1
+Questa e` una prova
+Questa e` una prova
+Ho finito
+Ho finito
+\end{verbatim} %$
+che termineremo inviando un EOF dal terminale (usando la combinazione di tasti
+ctrl-D, che non compare a schermo); se eseguiamo un \texttt{netstat} a questo
+punto avremo:
+\begin{verbatim}
+[piccardi@roke piccardi]$ netstat -at
+tcp 0 0 *:echo *:* LISTEN
+tcp 0 0 localhost:33032 localhost:echo TIME_WAIT
+\end{verbatim} %$
+con il client che entra in \texttt{TIME\_WAIT}.
+
+Esaminiamo allora in dettaglio la sequenza di eventi che porta alla
+terminazione normale della connessione, che ci servirà poi da riferimento nei
+casi seguenti:
+
+\begin{enumerate}
+\item inviando un carattere di EOF da terminale la \texttt{fgets} ritorna
+ restituendo un puntatore nullo che causa l'uscita dal ciclo di
+ \texttt{while}, così la \texttt{ClientEcho} ritorna.
+\item al ritorno di \texttt{ClientEcho} ritorna anche la funzione
+ \texttt{main}, e come parte del processo terminazione tutti i file
+ descriptor vengono chiusi (si ricordi quanto visto in
+ \secref{sec:proc_term_conclusion}), il che causa la chiusura del socket di
+ comunicazione; il client allora invierà un FIN al server a cui questo
+ risponderà con un ACK. A questo punto il client verrà a trovarsi nello
+ stato \texttt{FIN\_WAIT\_2} ed il server nello stato \texttt{CLOSE\_WAIT}
+ (si riveda quanto spiegato in \secref{sec:TCPel_conn_term}).
+\item quando il server riceve il FIN la la \texttt{read} del processo figlio
+ che gestisce la connessione ritorna restituendo 0 causando così l'uscita dal
+ ciclo di \texttt{while} e il ritorno di \texttt{ServEcho}, a questo punto il
+ processo figlio termina chiamando \texttt{exit}.
+\item all'uscita del figlio tutti i file descriptor vengono chiusi, la
+ chiusura del socket connesso fa sì che venga effettuata la sequenza finale
+ di chiusura della connessione, viene emesso un FIN dal server che riceverà
+ un ACK dal client, a questo punto la connessione è conclusa e il client
+ resta nello stato \texttt{TIME\_WAIT}.
+\item
+\end{enumerate}
+
+
+\subsection{La gestione dei procesi figli}
+\label{sec:TCPsimpl_child_hand}
+
+Tutto questo riguarda la connessione, c'è però un'altro effetto del
+procedimento di chiusura del processo figlio nel server, e cioè l'invio del
+segnale \texttt{SIGCHILD} al padre. Dato che non si è installato un
+manipolatore (vedi \secref{cha:signals} per le problematiche relative) e che
+l'azione di default per questo segnale è quella di essere ignorato quello che
+avremo è che il processo figlio entrerà nello stato di zombie, come risulta
+una volta che ripetiamo il comando \texttt{ps}:
+\begin{verbatim}
+ 2356 pts/0 S 0:00 ./echod
+ 2359 pts/0 Z 0:00 [echod <defunct>]
+\end{verbatim}