Altre correzioni
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 3 Aug 2003 22:32:23 +0000 (22:32 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 3 Aug 2003 22:32:23 +0000 (22:32 +0000)
elemtcp.tex

index da7219c5cec84b8cf4089db6da7d48c89ddfd04c..a49c48c5d0dbd8a5354cbc1cd7512eb3b3f2ecd8 100644 (file)
@@ -1843,7 +1843,7 @@ dati di cui 
 \end{figure}
 
 In caso di errore di scrittura (si ricordi che \func{FullWrite} restituisce un
-vamore nullo in caso di successo) si provvede (\texttt{\small 8--10}) a
+valore nullo in caso di successo) si provvede (\texttt{\small 8--10}) a
 stampare il relativo messaggio con \func{PrintErr}.  Quando il client chiude
 la connessione il ricevimento del FIN fa ritornare la \func{read} con un
 numero di byte letti pari a zero, il che causa l'uscita dal ciclo e il ritorno
@@ -2096,9 +2096,10 @@ specificato in secondi fra il ritorno della funzione \func{listen} e la
 chiamata di \func{accept}, specificabile con l'opzione \texttt{-w}, che
 permette di impostare la variabile \var{waiting}.  Infine si è introdotta una
 opzione \texttt{-d} per abilitare il debugging che imposta ad un valore non
-nullo la variabile \var{debugging}. Al solito la gestione di tutte queste
-opzioni si è omessa da \figref{fig:TCP_echo_server_code_second}, ma può essere
-visionata nel sorgente del programma.
+nullo la variabile \var{debugging}. Al solito si è omessa da
+\figref{fig:TCP_echo_server_code_second} la sezione di codice relativa alla
+gestione di tutte queste opzioni, che può essere trovata nel sorgente del
+programma.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -2121,23 +2122,26 @@ funzione \func{Signal} (\texttt{\small 10}) o con \texttt{SignalRestart}
 
 Tutta la sezione seguente, che crea il socket, cede i privilegi di
 amministratore ed eventualmente lancia il programma come demone, è rimasta
-invariata e pertanto non la si è riportata in
-\figref{fig:TCP_echo_server_code_second}; l'unica modifica effettuata è stata
-quella di aver introdotto (\texttt{\small 21}) l'eventuale pausa specificata
-con l'opzione \code{-w Nsec}, che inizializza la variabile \var{waiting} al
-numero di secondi da aspettare, subito dopo la chiamata (\texttt{\small
-  17--20}) alla funzione \func{listen}.
-
-Si è potuto far questo perché l'unica chiamata critica che può essere
-interrotta da \const{SIGCHLD} nel server è quella ad \func{accept}, che è
-l'unica funzione che può mettere il processo padre in stato di
-sleep.\footnote{si noti infatti che le altre \textit{slow system call} o sono
-  chiamate prima di entrare nel ciclo principale, quando ancora non esistono
-  processi figli, o sono chiamate dai figli stessi.}
-
-
-Per questo l'unica modifica sostanziale ciclo principale (\texttt{\small
-  23--42}) rispetto precedente versione di \figref{fig:TCP_ServEcho_first}, è
+invariata e pertanto è stata omessa in
+\figref{fig:TCP_echo_server_code_second}; l'unica modifica effettuata prima
+dell'entrata nel ciclo principale è stata quella di aver introdotto, subito
+dopo la chiamata (\texttt{\small 17--20}) alla funzione \func{listen}, una
+eventuale pausa con una condizione (\texttt{\small 21}) sulla variabile
+\var{waiting}, che viene inizializzata, con l'opzione \code{-w Nsec}, al
+numero di secondi da aspettare (il valore preimpostato è nullo).
+
+Si è potuto lasciare inalterata tutta la sezione di creazione del socket
+perché nel server l'unica chiamata ad una system call critica, che può essere
+interrotta dall'arrivo di \const{SIGCHLD}, è quella ad \func{accept}, che è
+l'unica funzione che può mettere il processo padre in stato di sleep nel
+periodo in cui un figlio può terminare; si noti infatti come le altre
+\textit{slow system call}\footnote{si ricordi la distinzione fatta in
+  \secref{sec:sig_gen_beha}.} o sono chiamate prima di entrare nel ciclo
+principale, quando ancora non esistono processi figli, o sono chiamate dai
+figli stessi e non risentono di \const{SIGCHLD}.
+
+Per questo l'unica modifica sostanziale nel ciclo principale (\texttt{\small
+  23--42}), rispetto precedente versione di \figref{fig:TCP_ServEcho_first}, è
 nella sezione (\texttt{\small 26--30}) in cui si effettua la chiamata di
 \func{accept}.  Quest'ultima viene effettuata (\texttt{\small 26--27})
 all'interno di un ciclo di \code{while}\footnote{la sintassi del C relativa a
@@ -2222,14 +2226,18 @@ ritorno di \func{accept}, sono \errcode{ENETDOWN}, \errcode{EPROTO},
 \errcode{EHOSTUNREACH}, \errcode{EOPNOTSUPP} e \errcode{ENETUNREACH}.
 
 Si tenga presente che questo tipo di terminazione non è riproducibile
-terminando il client prima della chiamata ad \func{accept}; in tal caso
-infatti il socket associato alla connessione viene semplicemente chiuso,
+terminando il client prima della chiamata ad \func{accept}, come si potrebbe
+fare usando l'opzione \texttt{-w} per introdurre una pausa dopo il lancio del
+demone, in modo da poter avere il tempo per lanciare e terminare una
+connessione usando il programma client. In tal caso infatti, alla terminazione
+del client, il socket associato alla connessione viene semplicemente chiuso,
 attraverso la sequenza vista in \secref{sec:TCP_conn_term}, per cui la
 \func{accept} ritornerà senza errori, e si avrà semplicemente un end-of-file
-al primo accesso al socket. Nel caso di Linux inoltre anche l'invio da parte
-del client di un segmento di RST non provoca nessun errore al ritorno di
-\funcd{accept} quanto un errore di \errcode{ECONNRESET} al primo tentativo di
-accesso al socket.
+al primo accesso al socket. Nel caso di Linux inoltre, anche qualora si
+modifichi il client per fargli gestire l'invio di un segmento di RST alla
+chiusura dal socket (come suggerito da Stevens in \cite{UNP1}), non si ha
+nessun errore al ritorno di \funcd{accept} quanto un errore di
+\errcode{ECONNRESET} al primo tentativo di accesso al socket.
 
 
 
@@ -2248,15 +2256,6 @@ della chiusura del socket.
 
 
 
-
-Nella funzione si è anche inserita (\texttt{\small 16--24}) la possibilità di
-inviare dei messaggi di debug (abilitabile con l'uso dell'opzione \texttt{-d}
-che imposta opportunamente \var{debugging}), gestendo entrambi i casi in cui
-la stampa deve essere effettuata tramite \func{syslog} (\texttt{\small 20}) o
-direttamente sullo standard output (\texttt{\small 22}).
-
-
-
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"