Aggiornamento data copyright
[gapil.git] / sockctrl.tex
index ef79762a9b78604aec8030e0d5e76524ffbfa221..09d02506de1797da1925ac59ed71fafbe6663dd3 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2006 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2011 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
@@ -8,6 +8,7 @@
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
+
 \chapter{La gestione dei socket}
 \label{cha:sock_generic_management}
 
@@ -49,7 +50,7 @@ necessita di compiere questa operazione.
 
 \begin{figure}[htb]
   \centering
-  \includegraphics[width=9cm]{img/resolver}
+  \includegraphics[width=11cm]{img/resolver}
   \caption{Schema di funzionamento delle funzioni del \textit{resolver}.}
   \label{fig:sock_resolver_schema}
 \end{figure}
@@ -84,19 +85,19 @@ funzioni di librerie utilizzate dai programmi, vale la pena fare una
 panoramica generale.  Originariamente la configurazione del \textit{resolver}
 riguardava esclusivamente le questioni relative alla gestione dei nomi a
 dominio, e prevedeva solo l'utilizzo del DNS e del file statico
-\file{/etc/hosts}.
+\conffile{/etc/hosts}.
 
 Per questo aspetto il file di configurazione principale del sistema è
-\file{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi IP
-dei server DNS da contattare; a questo si affianca il file
-\file{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui
-eseguire la risoluzione dei nomi (se usare prima i valori di \file{/etc/hosts}
-o quelli del DNS). Tralasciamo i dettagli relativi alle varie direttive che
-possono essere usate in questi file, che si trovano nelle rispettive pagine di
-manuale.
+\conffile{/etc/resolv.conf} che contiene in sostanza l'elenco degli indirizzi
+IP dei server DNS da contattare; a questo si affianca il file
+\conffile{/etc/host.conf} il cui scopo principale è indicare l'ordine in cui
+eseguire la risoluzione dei nomi (se usare prima i valori di
+\conffile{/etc/hosts} o quelli del DNS). Tralasciamo i dettagli relativi alle
+varie direttive che possono essere usate in questi file, che si trovano nelle
+rispettive pagine di manuale.
 
 Con il tempo però è divenuto possibile fornire diversi sostituti per
-l'utilizzo delle associazione statiche in \file{/etc/hosts}, inoltre oltre
+l'utilizzo delle associazione statiche in \conffile{/etc/hosts}, inoltre oltre
 alla risoluzione dei nomi a dominio ci sono anche altri nomi da risolvere,
 come quelli che possono essere associati ad una rete (invece che ad una
 singola macchina) o ai gruppi di macchine definiti dal servizio
@@ -106,16 +107,17 @@ NIS,\footnote{il \textit{Network Information Service} 
   \textit{netgroup}) varie macchine, centralizzando i servizi di definizione
   di utenti e gruppi e di autenticazione, oggi è sempre più spesso sostituito
   da LDAP.} o come quelli dei protocolli e dei servizi che sono mantenuti nei
-file statici \file{/etc/protocols} e \file{/etc/services}.  Molte di queste
-informazioni non si trovano su un DNS, ma in una rete locale può essere molto
-utile centralizzare il mantenimento di alcune di esse su opportuni server.
-Inoltre l'uso di diversi supporti possibili per le stesse informazioni (ad
-esempio il nome delle macchine può essere mantenuto sia tramite
-\file{/etc/hosts}, che con il DNS, che con NIS) comporta il problema
-dell'ordine in cui questi vengono interrogati.\footnote{con le implementazioni
-  classiche i vari supporti erano introdotti modificando direttamente le
-  funzioni di libreria, prevedendo un ordine di interrogazione predefinito e
-  non modificabile (a meno di una ricompilazione delle librerie stesse).}
+file statici \conffile{/etc/protocols} e \conffile{/etc/services}.  Molte di
+queste informazioni non si trovano su un DNS, ma in una rete locale può essere
+molto utile centralizzare il mantenimento di alcune di esse su opportuni
+server.  Inoltre l'uso di diversi supporti possibili per le stesse
+informazioni (ad esempio il nome delle macchine può essere mantenuto sia
+tramite \conffile{/etc/hosts}, che con il DNS, che con NIS) comporta il
+problema dell'ordine in cui questi vengono interrogati.\footnote{con le
+  implementazioni classiche i vari supporti erano introdotti modificando
+  direttamente le funzioni di libreria, prevedendo un ordine di interrogazione
+  predefinito e non modificabile (a meno di una ricompilazione delle librerie
+  stesse).}
 
 \itindbeg{Name~Service~Switch}
 Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
@@ -143,23 +145,27 @@ tab.~\ref{tab:sys_NSS_classes}.
     \textbf{Classe} & \textbf{Tipo di corrispondenza}\\
     \hline
     \hline
-    \texttt{shadow}   & corrispondenze fra username e proprietà dell'utente
-                       (\acr{uid}, ecc.).\\  
-    \texttt{group}    & corrispondenze fra nome del gruppo e proprietà dello 
+    \texttt{passwd}   & Corrispondenze fra nome dell'utente e relative
+                        proprietà (\acr{uid}, gruppo principale, ecc.).\\  
+    \texttt{shadow}   & Corrispondenze fra username e password dell'utente
+                        (e altre informazioni relative alle password).\\  
+    \texttt{group}    & Corrispondenze fra nome del gruppo e proprietà dello 
                         stesso.\\  
-    \texttt{aliases}  & alias per la posta elettronica.\\ 
-    \texttt{ethers}   & corrispondenze fra numero IP e MAC address della
+    \texttt{aliases}  & Alias per la posta elettronica.\\ 
+    \texttt{ethers}   & Corrispondenze fra numero IP e MAC address della
                         scheda di rete.\\ 
-    \texttt{hosts}    & corrispondenze fra nome a dominio e numero IP.\\ 
-    \texttt{netgroup} & corrispondenze gruppo di rete e macchine che lo
+    \texttt{hosts}    & Corrispondenze fra nome a dominio e numero IP.\\ 
+    \texttt{netgroup} & Corrispondenze fra gruppo di rete e macchine che lo
                         compongono.\\  
-    \texttt{networks} & corrispondenze fra nome di una rete e suo indirizzo
+    \texttt{networks} & Corrispondenze fra nome di una rete e suo indirizzo
                         IP.\\  
-    \texttt{protocols}& corrispondenze fra nome di un protocollo e relativo
+    \texttt{protocols}& Corrispondenze fra nome di un protocollo e relativo
                         numero identificativo.\\ 
-    \texttt{rpc}      & corrispondenze fra nome di un servizio RPC e relativo 
+    \texttt{rpc}      & Corrispondenze fra nome di un servizio RPC e relativo 
                         numero identificativo.\\ 
-    \texttt{services} & corrispondenze fra nome di un servizio e numero di
+    \texttt{publickey}& Chiavi pubbliche e private usate per gli RFC sicuri,
+                        utilizzate da NFS e NIS+. \\ 
+    \texttt{services} & Corrispondenze fra nome di un servizio e numero di
                         porta. \\ 
     \hline
   \end{tabular}
@@ -168,21 +174,23 @@ tab.~\ref{tab:sys_NSS_classes}.
   \label{tab:sys_NSS_classes}
 \end{table}
 
-Il sistema  del \textit{Name Service Switch} è controllato dal  contenuto del
-file \file{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo una
-  convezione  comune per  i  file  di configurazione  le  righe vuote  vengono
-  ignorate  e  tutto  quello  che  segue un  carattere  ``\texttt{\#}''  viene
-  considerato un  commento.} di configurazione per ciascuna  di queste classi,
-che  viene inizia  col nome  di tab.~\ref{tab:sys_NSS_classes}  seguito  da un
-carattere ``\texttt{:}'' e  prosegue con la lista dei  \textsl{servizi} su cui
-le  relative informazioni sono  raggiungibili, scritti  nell'ordine in  cui si
+% TODO rivedere meglio la tabella
+
+Il sistema del \textit{Name Service Switch} è controllato dal contenuto del
+file \conffile{/etc/nsswitch.conf}; questo contiene una riga\footnote{seguendo
+  una convezione comune per i file di configurazione le righe vuote vengono
+  ignorate e tutto quello che segue un carattere ``\texttt{\#}'' viene
+  considerato un commento.} di configurazione per ciascuna di queste classi,
+che viene inizia col nome di tab.~\ref{tab:sys_NSS_classes} seguito da un
+carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui
+le relative informazioni sono raggiungibili, scritti nell'ordine in cui si
 vuole siano interrogati.
 
-Ogni  servizio è  specificato  a sua  volta  da un  nome, come  \texttt{file},
-\texttt{dns},  \texttt{db},  ecc.  che  identifica la  libreria  dinamica  che
-realizza l'interfaccia  con esso. Per  ciascun servizio se \texttt{NAME}  è il
-nome  utilizzato  dentro   \file{/etc/nsswitch.conf},  dovrà  essere  presente
-(usualmente  in   \file{/lib})  una  libreria   \texttt{libnss\_NAME}  che  ne
+Ogni servizio è specificato a sua volta da un nome, come \texttt{file},
+\texttt{dns}, \texttt{db}, ecc.  che identifica la libreria dinamica che
+realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il
+nome utilizzato dentro \conffile{/etc/nsswitch.conf}, dovrà essere presente
+(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne
 implementa le funzioni.
 
 In ogni caso, qualunque sia la modalità con cui ricevono i dati o il supporto
@@ -225,7 +233,7 @@ ed i nomi devono essere risolti da destra verso sinistra.\footnote{per chi si
 funziona con il criterio della \textsl{delegazione}, un server responsabile
 per un dominio di primo livello può delegare la risoluzione degli indirizzi
 per un suo dominio di secondo livello ad un altro server, il quale a sua volta
-potrà delegare la risoluzione di un eventuale sottodominio di terzo livello ad
+potrà delegare la risoluzione di un eventuale sotto-dominio di terzo livello ad
 un altro server ancora.
 
 In realtà un server DNS è in grado di fare altro rispetto alla risoluzione di
@@ -289,40 +297,42 @@ comportamento del \textit{resolver}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{RES\_INIT}       & viene attivato se è stata chiamata
+    \const{RES\_INIT}       & Viene attivato se è stata chiamata
                               \func{res\_init}. \\
-    \const{RES\_DEBUG}      & stampa dei messaggi di debug.\\
-    \const{RES\_AAONLY}     & accetta solo risposte autoritative.\\
-    \const{RES\_USEVC}      & usa connessioni TCP per contattare i server 
+    \const{RES\_DEBUG}      & Stampa dei messaggi di debug.\\
+    \const{RES\_AAONLY}     & Accetta solo risposte autoritative.\\
+    \const{RES\_USEVC}      & Usa connessioni TCP per contattare i server 
                               invece che l'usuale UDP.\\
-    \const{RES\_PRIMARY}    & interroga soltanto server DNS primari.
+    \const{RES\_PRIMARY}    & Interroga soltanto server DNS primari.
                               \\
-    \const{RES\_IGNTC}      & ignora gli errori di troncamento, non ritenta la
+    \const{RES\_IGNTC}      & Ignora gli errori di troncamento, non ritenta la
                               richiesta con una connessione TCP.\\
-    \const{RES\_RECURSE}    & imposta il bit che indica che si desidera
+    \const{RES\_RECURSE}    & Imposta il bit che indica che si desidera
                               eseguire una interrogazione ricorsiva.\\
-    \const{RES\_DEFNAMES}   & se attivo \func{res\_search} aggiunge il nome
+    \const{RES\_DEFNAMES}   & Se attivo \func{res\_search} aggiunge il nome
                               del dominio di default ai nomi singoli (che non
                               contengono cioè un ``\texttt{.}'').\\
-    \const{RES\_STAYOPEN}   & usato con \const{RES\_USEVC} per mantenere
+    \const{RES\_STAYOPEN}   & Usato con \const{RES\_USEVC} per mantenere
                               aperte le connessioni TCP fra interrogazioni
                               diverse. \\
-    \const{RES\_DNSRCH}     & se attivo \func{res\_search} esegue le ricerche
+    \const{RES\_DNSRCH}     & Se attivo \func{res\_search} esegue le ricerche
                               di nomi di macchine nel dominio corrente o nei
                               domini ad esso sovrastanti.\\
-    \const{RES\_INSECURE1}  & blocca i controlli di sicurezza di tipo 1.\\
-    \const{RES\_INSECURE2}  & blocca i controlli di sicurezza di tipo 2.\\
-    \const{RES\_NOALIASES}  & blocca l'uso della variabile di ambiente
+    \const{RES\_INSECURE1}  & Blocca i controlli di sicurezza di tipo 1.\\
+    \const{RES\_INSECURE2}  & Blocca i controlli di sicurezza di tipo 2.\\
+    \const{RES\_NOALIASES}  & Blocca l'uso della variabile di ambiente
                               \texttt{HOSTALIASES}.\\ 
-    \const{RES\_USE\_INET6} & restituisce indirizzi IPv6 con
+    \const{RES\_USE\_INET6} & Restituisce indirizzi IPv6 con
                               \func{gethostbyname}. \\
-    \const{RES\_ROTATE}     & ruota la lista dei server DNS dopo ogni
+    \const{RES\_ROTATE}     & Ruota la lista dei server DNS dopo ogni
                               interrogazione.\\
-    \const{RES\_NOCHECKNAME}& non controlla i nomi per verificarne la
+    \const{RES\_NOCHECKNAME}& Non controlla i nomi per verificarne la
                               correttezza sintattica. \\
-    \const{RES\_KEEPTSIG}   & non elimina i record di tipo \texttt{TSIG}.\\
-    \const{RES\_BLAST}      & \\
-    \const{RES\_DEFAULT}    & è l'insieme di \const{RES\_RECURSE},
+    \const{RES\_KEEPTSIG}   & Non elimina i record di tipo \texttt{TSIG}.\\
+    \const{RES\_BLAST}      & Effettua un ``\textit{blast}'' inviando
+                              simultaneamente le richieste a tutti i server;
+                              non ancora implementata. \\
+    \const{RES\_DEFAULT}    & Combinazione di \const{RES\_RECURSE},
                               \const{RES\_DEFNAMES} e \const{RES\_DNSRCH}.\\
     \hline
   \end{tabular}
@@ -428,12 +438,12 @@ tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realt
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{C\_IN}   & indirizzi internet, in pratica i soli utilizzati oggi.\\
-    \const{C\_HS}   & indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
+    \const{C\_IN}   & Indirizzi internet, in pratica i soli utilizzati oggi.\\
+    \const{C\_HS}   & Indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
                       completamente estinti. \\
-    \const{C\_CHAOS}& indirizzi per la rete \textit{Chaosnet}, un'altra rete
+    \const{C\_CHAOS}& Indirizzi per la rete \textit{Chaosnet}, un'altra rete
                       sperimentale nata al MIT. \\
-    \const{C\_ANY}  & indica un indirizzo di classe qualunque.\\
+    \const{C\_ANY}  & Indica un indirizzo di classe qualunque.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative delle classi di indirizzi per l'argomento
@@ -466,47 +476,47 @@ e che normalmente sono anche usati come nomi per indicare i record.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{T\_A}     & indirizzo di una stazione.\\
-    \const{T\_NS}    & server DNS autoritativo per il dominio richiesto.\\
-    \const{T\_MD}    & destinazione per la posta elettronica.\\
-    \const{T\_MF}    & redistributore per la posta elettronica.\\
-    \const{T\_CNAME} & nome canonico.\\
-    \const{T\_SOA}   & inizio di una zona di autorità.\\
-    \const{T\_MB}    & nome a dominio di una casella di posta.\\
-    \const{T\_MG}    & nome di un membro di un gruppo di posta.\\
-    \const{T\_MR}    & nome di un cambiamento di nome per la posta.\\
-    \const{T\_NULL}  & record nullo.\\
-    \const{T\_WKS}   & servizio noto.\\
-    \const{T\_PTR}   & risoluzione inversa di un indirizzo numerico.\\
-    \const{T\_HINFO} & informazione sulla stazione.\\
-    \const{T\_MINFO} & informazione sulla casella di posta.\\
-    \const{T\_MX}    & server cui instradare la posta per il dominio.\\
-    \const{T\_TXT}   & stringhe di testo (libere).\\
-    \const{T\_RP}    & nome di un responsabile (\textit{responsible person}).\\
-    \const{T\_AFSDB} & database per una cella AFS.\\
-    \const{T\_X25}   & indirizzo di chiamata per X.25.\\
-    \const{T\_ISDN}  & indirizzo di chiamata per ISDN.\\
-    \const{T\_RT}    & router.\\
-    \const{T\_NSAP}  & indirizzo NSAP.\\
-    \const{T\_NSAP\_PTR}& risoluzione inversa per NSAP (deprecato).\\
-    \const{T\_SIG}   & firma digitale di sicurezza.\\
-    \const{T\_KEY}   & chiave per firma.\\
-    \const{T\_PX}    & corrispondenza per la posta X.400.\\
-    \const{T\_GPOS}  & posizione geografica.\\
-    \const{T\_AAAA}  & indirizzo IPv6.\\
-    \const{T\_LOC}   & informazione di collocazione.\\
-    \const{T\_NXT}   & dominio successivo.\\
-    \const{T\_EID}   & identificatore di punto conclusivo.\\
-    \const{T\_NIMLOC}& posizionatore \textit{nimrod}.\\
-    \const{T\_SRV}   & servizio.\\
-    \const{T\_ATMA}  & indirizzo ATM.\\
-    \const{T\_NAPTR} & puntatore ad una \textit{naming authority} .\\
-    \const{T\_TSIG}  & firma di transazione.\\
-    \const{T\_IXFR}  & trasferimento di zona incrementale.\\
-    \const{T\_AXFR}  & trasferimento di zona di autorità.\\
-    \const{T\_MAILB} & trasferimento di record di caselle di posta.\\
-    \const{T\_MAILA} & trasferimento di record di server di posta.\\
-    \const{T\_ANY}   & valore generico.\\
+    \const{T\_A}     & Indirizzo di una stazione.\\
+    \const{T\_NS}    & Server DNS autoritativo per il dominio richiesto.\\
+    \const{T\_MD}    & Destinazione per la posta elettronica.\\
+    \const{T\_MF}    & Redistributore per la posta elettronica.\\
+    \const{T\_CNAME} & Nome canonico.\\
+    \const{T\_SOA}   & Inizio di una zona di autorità.\\
+    \const{T\_MB}    & Nome a dominio di una casella di posta.\\
+    \const{T\_MG}    & Nome di un membro di un gruppo di posta.\\
+    \const{T\_MR}    & Nome di un cambiamento di nome per la posta.\\
+    \const{T\_NULL}  & Record nullo.\\
+    \const{T\_WKS}   & Servizio noto.\\
+    \const{T\_PTR}   & Risoluzione inversa di un indirizzo numerico.\\
+    \const{T\_HINFO} & Informazione sulla stazione.\\
+    \const{T\_MINFO} & Informazione sulla casella di posta.\\
+    \const{T\_MX}    & Server cui instradare la posta per il dominio.\\
+    \const{T\_TXT}   & Stringhe di testo (libere).\\
+    \const{T\_RP}    & Nome di un responsabile (\textit{responsible person}).\\
+    \const{T\_AFSDB} & Database per una cella AFS.\\
+    \const{T\_X25}   & Indirizzo di chiamata per X.25.\\
+    \const{T\_ISDN}  & Indirizzo di chiamata per ISDN.\\
+    \const{T\_RT}    & Router.\\
+    \const{T\_NSAP}  & Indirizzo NSAP.\\
+    \const{T\_NSAP\_PTR}& Risoluzione inversa per NSAP (deprecato).\\
+    \const{T\_SIG}   & Firma digitale di sicurezza.\\
+    \const{T\_KEY}   & Chiave per firma.\\
+    \const{T\_PX}    & Corrispondenza per la posta X.400.\\
+    \const{T\_GPOS}  & Posizione geografica.\\
+    \const{T\_AAAA}  & Indirizzo IPv6.\\
+    \const{T\_LOC}   & Informazione di collocazione.\\
+    \const{T\_NXT}   & Dominio successivo.\\
+    \const{T\_EID}   & Identificatore di punto conclusivo.\\
+    \const{T\_NIMLOC}& Posizionatore \textit{nimrod}.\\
+    \const{T\_SRV}   & Servizio.\\
+    \const{T\_ATMA}  & Indirizzo ATM.\\
+    \const{T\_NAPTR} & Puntatore ad una \textit{naming authority}.\\
+    \const{T\_TSIG}  & Firma di transazione.\\
+    \const{T\_IXFR}  & Trasferimento di zona incrementale.\\
+    \const{T\_AXFR}  & Trasferimento di zona di autorità.\\
+    \const{T\_MAILB} & Trasferimento di record di caselle di posta.\\
+    \const{T\_MAILA} & Trasferimento di record di server di posta.\\
+    \const{T\_ANY}   & Valore generico.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative del tipo di record per l'argomento
@@ -535,12 +545,12 @@ indicarli si 
   ed un nome a dominio ad esso associato si utilizza questo tipo di record (il
   cui nome sta per \textit{pointer}).
 \item[\texttt{CNAME}] qualora si abbiamo più nomi che corrispondono allo
-  stesso indirizzo (come ad esempio \texttt{www.truelite.it}, o
-  \texttt{sources.truelite.it}, che fanno sempre riferimento a
-  \texttt{dodds.truelite.it}) si può usare questo tipo di record per creare
-  degli \textit{alias} in modo da associare un qualunque altro nome al
-  \textsl{nome canonico} della macchina (si chiama così quello associato al
-  record \texttt{A}).
+  stesso indirizzo (come ad esempio \texttt{www.truelite.it} e
+  \texttt{sources.truelite.it}, che fanno entrambi riferimento alla stessa
+  macchina (nel caso \texttt{dodds.truelite.it}) si può usare questo tipo di
+  record per creare degli \textit{alias} in modo da associare un qualunque
+  altro nome al \textsl{nome canonico} della macchina (si chiama così quello
+  associato al record \texttt{A}).
 \end{basedescript}
 
 Come accennato in caso di successo le due funzioni di richiesta restituiscono
@@ -563,23 +573,23 @@ tab.~\ref{tab:h_errno_values}.
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{10cm}|}
+  \begin{tabular}[c]{|l|p{11cm}|}
     \hline
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{HOST\_NOT\_FOUND} & l'indirizzo richiesto non è valido e la
-                               macchina indicata è sconosciuta. \\
-    \const{NO\_ADDRESS}      & il nome a dominio richiesto è valido, ma non ha
+    \const{HOST\_NOT\_FOUND} & L'indirizzo richiesto non è valido e la
+                               macchina indicata è sconosciuta.\\
+    \const{NO\_ADDRESS}      & Il nome a dominio richiesto è valido, ma non ha
                                un indirizzo associato ad esso
                                (alternativamente può essere indicato come 
-                               \const{NO\_DATA}). \\
-    \const{NO\_RECOVERY}     & si è avuto un errore non recuperabile
-                               nell'interrogazione di un server DNS. \\
-    \const{TRY\_AGAIN}       & si è avuto un errore temporaneo
+                               \const{NO\_DATA}).\\
+    \const{NO\_RECOVERY}     & Si è avuto un errore non recuperabile
+                               nell'interrogazione di un server DNS.\\
+    \const{TRY\_AGAIN}       & Si è avuto un errore temporaneo
                                nell'interrogazione di un server DNS, si può
                                ritentare l'interrogazione in un secondo
-                               tempo. \\
+                               tempo.\\
     \hline
   \end{tabular}
   \caption{Valori possibili della variabile \var{h\_errno}.}
@@ -617,7 +627,7 @@ argomento (che si presume sia dato da \var{h\_errno}).
 \subsection{La risoluzione dei nomi a dominio}
 \label{sec:sock_name_services}
 
-La principale funzionalità del \itindex{resolver}\textit{resolver} resta
+La principale funzionalità del \itindex{resolver} \textit{resolver} resta
 quella di risolvere i nomi a dominio in indirizzi IP, per cui non ci
 dedicheremo oltre alle funzioni di richiesta generica ed esamineremo invece le
 funzioni a questo dedicate. La prima funzione è \funcd{gethostbyname} il cui
@@ -682,7 +692,7 @@ Con l'uso di \func{gethostbyname} normalmente si ottengono solo gli indirizzi
 IPv4, se si vogliono ottenere degli indirizzi IPv6 occorrerà prima impostare
 l'opzione \const{RES\_USE\_INET6} nel campo \texttt{\_res.options} e poi
 chiamare \func{res\_init} (vedi sez.~\ref{sec:sock_resolver_functions}) per
-modificare le opzioni del \itindex{resolver}\textit{resolver}; dato che
+modificare le opzioni del \itindex{resolver} \textit{resolver}; dato che
 questo non è molto comodo è stata definita\footnote{questa è una estensione
   fornita dalle \acr{glibc}, disponibile anche in altri sistemi unix-like.}
 un'altra funzione, \funcd{gethostbyname2}, il cui prototipo è:
@@ -719,47 +729,47 @@ suoi risultati.
 Vediamo allora un primo esempio dell'uso delle funzioni di risoluzione, in
 fig.~\ref{fig:mygethost_example} è riportato un estratto del codice di un
 programma che esegue una semplice interrogazione al
-\itindex{resolver}\textit{resolver} usando \func{gethostbyname} e poi ne
+\itindex{resolver} \textit{resolver} usando \func{gethostbyname} e poi ne
 stampa a video i risultati. Al solito il sorgente completo, che comprende il
 trattamento delle opzioni ed una funzione per stampare un messaggio di aiuto,
 è nel file \texttt{mygethost.c} dei sorgenti allegati alla guida.
 
 Il programma richiede un solo argomento che specifichi il nome da cercare,
-senza il quale (\texttt{\small 12--15}) esce con un errore. Dopo di che
-(\texttt{\small 16}) si limita a chiamare \func{gethostbyname}, ricevendo il
-risultato nel puntatore \var{data}. Questo (\texttt{\small 17--20}) viene
+senza il quale (\texttt{\small 15--18}) esce con un errore. Dopo di che
+(\texttt{\small 20}) si limita a chiamare \func{gethostbyname}, ricevendo il
+risultato nel puntatore \var{data}. Questo (\texttt{\small 21--24}) viene
 controllato per rilevare eventuali errori, nel qual caso il programma esce
 dopo aver stampato un messaggio con \func{herror}. 
 
-Se invece la risoluzione è andata a buon fine si inizia (\texttt{\small 21})
-con lo stampare il nome canonico, dopo di che (\texttt{\small 22--26}) si
-stampano eventuali altri nomi. Per questo prima (\texttt{\small 22}) si prende
+Se invece la risoluzione è andata a buon fine si inizia (\texttt{\small 25})
+con lo stampare il nome canonico, dopo di che (\texttt{\small 26--30}) si
+stampano eventuali altri nomi. Per questo prima (\texttt{\small 26}) si prende
 il puntatore alla cima della lista che contiene i nomi e poi (\texttt{\small
-  23--26}) si esegue un ciclo che sarà ripetuto fin tanto che nella lista si
+  27--30}) si esegue un ciclo che sarà ripetuto fin tanto che nella lista si
 troveranno dei puntatori validi\footnote{si ricordi che la lista viene
   terminata da un puntatore nullo.} per le stringhe dei nomi; prima
-(\texttt{\small 24}) si stamperà la stringa e poi (\texttt{\small 25}) si
+(\texttt{\small 28}) si stamperà la stringa e poi (\texttt{\small 29}) si
 provvederà ad incrementare il puntatore per passare al successivo elemento
 della lista.
 
 Una volta stampati i nomi si passerà a stampare gli indirizzi, il primo passo
-(\texttt{\small 27--34}) è allora quello di riconoscere il tipo di indirizzo
+(\texttt{\small 31--38}) è allora quello di riconoscere il tipo di indirizzo
 sulla base del valore del campo \var{h\_addrtype}, stampandolo a video. Si è
 anche previsto di stampare un errore nel caso (che non dovrebbe mai accadere)
 di un indirizzo non valido.
 
-Infine (\texttt{\small 35--40}) si stamperanno i valori degli indirizzi, di
-nuovo (\texttt{\small 35}) si inizializzerà un puntatore alla cima della lista
+Infine (\texttt{\small 39--44}) si stamperanno i valori degli indirizzi, di
+nuovo (\texttt{\small 39}) si inizializzerà un puntatore alla cima della lista
 e si eseguirà un ciclo fintanto che questo punterà ad indirizzi validi in
 maniera analoga a quanto fatto in precedenza per i nomi a dominio. Si noti
 come, essendo il campo \var{h\_addr\_list} un puntatore ad strutture di
 indirizzi generiche, questo sia ancora di tipo \texttt{char **} e si possa
 riutilizzare lo stesso puntatore usato per i nomi.
 
-Per ciascun indirizzo valido si provvederà (\texttt{\small 37}) ad una
+Per ciascun indirizzo valido si provvederà (\texttt{\small 41}) ad una
 conversione con la funzione \func{inet\_ntop} (vedi
 sez.~\ref{sec:sock_addr_func}) passandole gli opportuni argomenti, questa
-restituirà la stringa da stampare (\texttt{\small 38}) con il valore
+restituirà la stringa da stampare (\texttt{\small 42}) con il valore
 dell'indirizzo in \var{buffer}, che si è avuto la cura di dichiarare
 inizialmente (\texttt{\small 10}) con dimensioni adeguate; dato che la
 funzione è in grado di tenere conto automaticamente del tipo di indirizzo non
@@ -771,25 +781,25 @@ ci sono precauzioni particolari da prendere.\footnote{volendo essere pignoli
 
 Le funzioni illustrate finora hanno un difetto: utilizzando una area di
 memoria interna per allocare i contenuti della struttura \struct{hostent} non
-possono essere rientranti. Questo comporta anche che in due successive
-chiamate i dati potranno essere sovrascritti. Si tenga presente poi che
-copiare il contenuto della sola struttura non è sufficiente per salvare tutti
-i dati, in quanto questa contiene puntatori ad altri dati, che pure possono
-essere sovrascritti; per questo motivo, se si vuole salvare il risultato di
-una chiamata, occorrerà eseguire quella che si chiama una
-\itindex{deep~copy}\textit{deep copy}.\footnote{si chiama così quella tecnica
+possono essere\index{funzioni!rientranti} rientranti. Questo comporta anche
+che in due successive chiamate i dati potranno essere sovrascritti. Si tenga
+presente poi che copiare il contenuto della sola struttura non è sufficiente
+per salvare tutti i dati, in quanto questa contiene puntatori ad altri dati,
+che pure possono essere sovrascritti; per questo motivo, se si vuole salvare
+il risultato di una chiamata, occorrerà eseguire quella che si chiama una
+\itindex{deep~copy} \textit{deep copy}.\footnote{si chiama così quella tecnica
   per cui, quando si deve copiare il contenuto di una struttura complessa (con
   puntatori che puntano ad altri dati, che a loro volta possono essere
   puntatori ad altri dati) si deve copiare non solo il contenuto della
   struttura, ma eseguire una scansione per risolvere anche tutti i puntatori
-  contenuti in essa (e così via se vi sono altre sottostrutture con altri
+  contenuti in essa (e così via se vi sono altre sotto-strutture con altri
   puntatori) e copiare anche i dati da questi referenziati.}
 
 Per ovviare a questi problemi nelle \acr{glibc} sono definite anche delle
-versioni rientranti delle precedenti funzioni, al solito queste sono
-caratterizzate dall'avere un suffisso \texttt{\_r}, pertanto avremo le due
-funzioni \funcd{gethostbyname\_r} e \funcd{gethostbyname2\_r} i cui prototipi
-sono:
+versioni \index{funzioni!rientranti} rientranti delle precedenti funzioni, al
+solito queste sono caratterizzate dall'avere un suffisso \texttt{\_r},
+pertanto avremo le due funzioni \funcd{gethostbyname\_r} e
+\funcd{gethostbyname2\_r} i cui prototipi sono:
 \begin{functions}
   \headdecl{netdb.h} 
   \headdecl{sys/socket.h}
@@ -818,7 +828,7 @@ lunghezza di questo buffer devono essere indicati con gli argomenti
 \param{buf} e \param{buflen}.
 
 Gli ultimi due argomenti vengono utilizzati per avere indietro i risultati
-come \itindex{value~result~argument}\textit{value result argument}, si deve
+come \itindex{value~result~argument} \textit{value result argument}, si deve
 specificare l'indirizzo della variabile su cui la funzione dovrà salvare il
 codice di errore con \param{h\_errnop} e quello su cui dovrà salvare il
 puntatore che si userà per accedere i dati con \param{result}.
@@ -827,8 +837,8 @@ In caso di successo entrambe le funzioni restituiscono un valore nullo,
 altrimenti restituiscono un codice di errore negativo e all'indirizzo puntato
 da \param{result} sarà salvato un puntatore nullo, mentre a quello puntato da
 \param{h\_errnop} sarà salvato il valore del codice di errore, dato che per
-essere rientrante la funzione non può la variabile globale \var{h\_errno}. In
-questo caso il codice di errore, oltre ai valori di
+essere \index{funzioni!rientranti} rientrante la funzione non può la variabile
+globale \var{h\_errno}. In questo caso il codice di errore, oltre ai valori di
 tab.~\ref{tab:h_errno_values}, può avere anche quello di \errcode{ERANGE}
 qualora il buffer allocato su \param{buf} non sia sufficiente a contenere i
 dati, in tal caso si dovrà semplicemente ripetere l'esecuzione della funzione
@@ -952,22 +962,22 @@ tab.~\ref{tab:sock_getipnodebyname_flags}.
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{10cm}|}
+  \begin{tabular}[c]{|l|p{8cm}|}
     \hline
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{AI\_V4MAPPED}  & usato con \const{AF\_INET6} per richiedere una
+    \const{AI\_V4MAPPED}  & Usato con \const{AF\_INET6} per richiedere una
                             ricerca su un indirizzo IPv4 invece che IPv6; gli
                             eventuali risultati saranno rimappati su indirizzi 
                             IPv6.\\
-    \const{AI\_ALL}       & usato con \const{AI\_V4MAPPED}; richiede sia
+    \const{AI\_ALL}       & Usato con \const{AI\_V4MAPPED}; richiede sia
                             indirizzi IPv4 che IPv6, e gli indirizzi IPv4
                             saranno rimappati in IPv6.\\
-    \const{AI\_ADDRCONFIG}& richiede che una richiesta IPv4 o IPv6 venga
+    \const{AI\_ADDRCONFIG}& Richiede che una richiesta IPv4 o IPv6 venga
                             eseguita solo se almeno una interfaccia del
                             sistema è associata ad un indirizzo di tale tipo.\\
-    \const{AI\_DEFAULT}   & il valore di default, è equivalente alla
+    \const{AI\_DEFAULT}   & Il valore di default, è equivalente alla
                             combinazione di \const{AI\_ADDRCONFIG} e di
                             \const{AI\_V4MAPPED}.\\  
     \hline
@@ -1001,14 +1011,15 @@ funzione \funcd{freehostent}, il cui prototipo 
 La funzione permette di disallocare una struttura \var{hostent}
 precedentemente allocata in una chiamata di \func{getipnodebyname} o
 \func{getipnodebyaddr}, e prende come argomento l'indirizzo restituito da una
-di queste funzioni.
+di queste funzioni. 
 
 Infine per concludere la nostra panoramica sulle funzioni di risoluzione dei
 nomi dobbiamo citare le funzioni che permettono di interrogare gli altri
 servizi di risoluzione dei nomi illustrati in sez.~\ref{sec:sock_resolver}; in
 generale infatti ci sono una serie di funzioni nella forma
-\texttt{getXXXbyname} e \texttt{getXXXbyaddr} per ciascuna delle informazioni
-di rete mantenute dal \textit{Name Service Switch} che permettono
+\texttt{getXXXbyname} e \texttt{getXXXbyaddr} (dove \texttt{XXX} indica il
+servizio) per ciascuna delle informazioni di rete mantenute dal
+\itindex{Name~Service~Switch} \textit{Name Service Switch} che permettono
 rispettivamente di trovare una corrispondenza cercando per nome o per numero.
 
 L'elenco di queste funzioni è riportato nelle colonne finali di
@@ -1016,10 +1027,10 @@ tab.~\ref{tab:name_resolution_functions}, dove le si sono suddivise rispetto
 al tipo di informazione che forniscono (riportato in prima colonna). Nella
 tabella si è anche riportato il file su cui vengono ordinariamente mantenute
 queste informazioni, che però può essere sostituito da un qualunque supporto
-interno al \textit{Name Service Switch} (anche se usualmente questo avviene
-solo per la risoluzione degli indirizzi). Ciascuna funzione fa riferimento ad
-una sua apposita struttura che contiene i relativi dati, riportata in terza
-colonna.
+interno al \itindex{Name~Service~Switch} \textit{Name Service Switch} (anche
+se usualmente questo avviene solo per la risoluzione degli indirizzi).
+Ciascuna funzione fa riferimento ad una sua apposita struttura che contiene i
+relativi dati, riportata in terza colonna.
 
 \begin{table}[!htb]
   \centering
@@ -1030,33 +1041,34 @@ colonna.
     \multicolumn{2}{|c|}{\textbf{Funzioni}}\\
     \hline
     \hline
-    indirizzo&\file{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
-             \func{gethostbyaddr}\\ 
-    servizio &\file{/etc/services}&\struct{servent}&\func{getservbyname}&
-             \func{getservbyaddr}\\ 
-    rete     &\file{/etc/networks}&\struct{netent}&\func{getnetbyname}&
-             \func{getnetbyaddr}\\ 
-    protocollo&\file{/etc/protocols}&\struct{protoent}&\func{getprotobyname}&
-              \func{getprotobyaddr}\\ 
+    indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
+               \func{gethostbyaddr}\\ 
+    servizio  &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}&
+               \func{getservbyaddr}\\ 
+    rete      &\conffile{/etc/networks}&\struct{netent}&\func{getnetbyname}&
+               \func{getnetbyaddr}\\ 
+    protocollo&\conffile{/etc/protocols}&\struct{protoent}&
+               \func{getprotobyname}&\func{getprotobyaddr}\\ 
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
-    \textit{Name Service Switch}.}
+    \itindex{Name~Service~Switch} \textit{Name Service Switch}.}
   \label{tab:name_resolution_functions}
 \end{table}
 
 Delle funzioni di tab.~\ref{tab:name_resolution_functions} abbiamo trattato
 finora soltanto quelle relative alla risoluzione dei nomi, dato che sono le
 più usate, e prevedono praticamente da sempre la necessità di rivolgersi ad
-una entità esterna; per le altre invece, estensioni fornite dal NSS a parte,
-si fa sempre riferimento ai dati mantenuti nei rispettivi file. 
+una entità esterna; per le altre invece, estensioni fornite dal
+\itindex{Name~Service~Switch} NSS a parte, si fa sempre riferimento ai dati
+mantenuti nei rispettivi file.
 
 Dopo la risoluzione dei nomi a dominio una delle ricerche più comuni è quella
-sui nomi dei servizi noti (cioè \texttt{http}, \texttt{smtp}, ecc.) da
-associare alle rispettive porte, le due funzioni da utilizzare per questo sono
-\funcd{getservbyname} e \funcd{getservbyaddr}, che permettono rispettivamente
-di ottenere il numero di porta associato ad un servizio dato il nome e
-viceversa; i loro prototipi sono:
+sui nomi dei servizi di rete più comuni (cioè \texttt{http}, \texttt{smtp},
+ecc.) da associare alle rispettive porte. Le due funzioni da utilizzare per
+questo sono \funcd{getservbyname} e \funcd{getservbyaddr}, che permettono
+rispettivamente di ottenere il numero di porta associato ad un servizio dato
+il nome e viceversa; i loro prototipi sono:
 \begin{functions}
   \headdecl{netdb.h} 
   \funcdecl{struct servent *getservbyname(const char *name, const char *proto)}
@@ -1070,12 +1082,12 @@ viceversa; i loro prototipi sono:
 
 Entrambe le funzioni prendono come ultimo argomento una stringa \param{proto}
 che indica il protocollo per il quale si intende effettuare la
-ricerca,\footnote{le informazioni mantenute in \file{/etc/services} infatti
-  sono relative sia alle porte usate su UDP che su TCP, occorre quindi
+ricerca,\footnote{le informazioni mantenute in \conffile{/etc/services}
+  infatti sono relative sia alle porte usate su UDP che su TCP, occorre quindi
   specificare a quale dei due protocolli si fa riferimento.} che nel caso si
 IP può avere come valori possibili solo \texttt{udp} o
 \texttt{tcp};\footnote{in teoria si potrebbe avere un qualunque protocollo fra
-  quelli citati in \file{/etc/protocols}, posto che lo stesso supporti il
+  quelli citati in \conffile{/etc/protocols}, posto che lo stesso supporti il
   concetto di \textsl{porta}, in pratica questi due sono gli unici presenti.}
 se si specifica un puntatore nullo la ricerca sarà eseguita su un protocollo
 qualsiasi.
@@ -1083,14 +1095,15 @@ qualsiasi.
 Il primo argomento è il nome del servizio per \func{getservbyname},
 specificato tramite la stringa \param{name}, mentre \func{getservbyport}
 richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una
-ricerca sul file \file{/etc/services}\footnote{il \textit{Name Service Switch}
-  astrae il concetto a qualunque supporto su cui si possano mantenere i
-  suddetti dati. } ed estraggono i dati dalla prima riga che corrisponde agli
-argomenti specificati; se la risoluzione ha successo viene restituito un
-puntatore ad una apposita struttura \struct{servent} contenente tutti i
-risultati), altrimenti viene restituito un puntatore nullo.  Si tenga presente
-che anche in questo caso i dati vengono mantenuti in una area di memoria
-statica e che quindi la funzione non è rientrante.
+ricerca sul file \conffile{/etc/services}\footnote{il
+  \itindex{Name~Service~Switch} \textit{Name Service Switch} astrae il
+  concetto a qualunque supporto su cui si possano mantenere i suddetti dati.}
+ed estraggono i dati dalla prima riga che corrisponde agli argomenti
+specificati; se la risoluzione ha successo viene restituito un puntatore ad
+una apposita struttura \struct{servent} contenente tutti i risultati,
+altrimenti viene restituito un puntatore nullo.  Si tenga presente che anche
+in questo caso i dati vengono mantenuti in una area di memoria statica e che
+quindi la funzione non è \index{funzioni!rientranti} rientrante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1112,28 +1125,28 @@ contiene il numero di porta e \var{s\_proto} il nome del protocollo.
 Come riportato in tab.~\ref{tab:name_resolution_functions} ci sono analoghe
 funzioni per la risoluzione del nome dei protocolli e delle reti; non staremo
 a descriverle nei dettagli, in quanto il loro uso è molto limitato, esse
-comunque hanno una struttura del tutto analoga alle precedenti, e tutti i
-dettagli relativi al loro funzionamento possono essere trovati nelle
-rispettive pagine di manuale.
+comunque utilizzano una loro struttura dedicata del tutto analoga alle
+precedenti: tutti i dettagli relativi al loro funzionamento possono essere
+trovati nelle rispettive pagine di manuale.
 
 Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono
-una lettura sequenziale delle informazioni mantenute nel \textit{Name Service
-  Switch} (in sostanza permettono di leggere i file contenenti le informazioni
-riga per riga), che sono analoghe a quelle elencate in
-tab.~\ref{tab:sys_passwd_func} per le informazioni relative ai dati degli
-utenti e dei gruppi.  Nel caso specifico dei servizi avremo allora le tre
-funzioni \funcd{setservent}, \funcd{getservent} e \funcd{endservent} i cui
-prototipi sono:
+una lettura sequenziale delle informazioni mantenute nel
+\itindex{Name~Service~Switch} \textit{Name Service Switch} (in sostanza
+permettono di leggere i file contenenti le informazioni riga per riga), che
+sono analoghe a quelle elencate in tab.~\ref{tab:sys_passwd_func} per le
+informazioni relative ai dati degli utenti e dei gruppi. Nel caso specifico
+dei servizi avremo allora le tre funzioni \funcd{setservent},
+\funcd{getservent} e \funcd{endservent} i cui prototipi sono:
 \begin{functions}
   \headdecl{netdb.h} 
   \funcdecl{void setservent(int stayopen)} 
-  Apre il file \file{/etc/services} e si posiziona al suo inizio.
+  Apre il file \conffile{/etc/services} e si posiziona al suo inizio.
 
   \funcdecl{struct servent *getservent(void)}
-  Legge la voce successiva nel file \file{/etc/services}.      
+  Legge la voce successiva nel file \conffile{/etc/services}.      
 
   \funcdecl{void endservent(void)} 
-  Chiude il file \file{/etc/services}.
+  Chiude il file \conffile{/etc/services}.
 
   \bodydesc{Le due funzioni \func{setservent} e \func{endservent} non
     restituiscono nulla, \func{getservent} restituisce il puntatore ad una
@@ -1142,11 +1155,11 @@ prototipi sono:
 \end{functions}
 
 La prima funzione, \func{getservent}, legge una singola voce a partire dalla
-posizione corrente in \file{/etc/services}, pertanto si può eseguire una
+posizione corrente in \conffile{/etc/services}, pertanto si può eseguire una
 lettura sequenziale dello stesso invocandola più volte. Se il file non è
 aperto provvede automaticamente ad aprirlo, nel qual caso leggerà la prima
 voce. La seconda funzione, \func{setservent}, permette di aprire il file
-\file{/etc/services} per una successiva lettura, ma se il file è già stato
+\conffile{/etc/services} per una successiva lettura, ma se il file è già stato
 aperto riporta la posizione di lettura alla prima voce del file, in questo
 modo si può far ricominciare da capo una lettura sequenziale. L'argomento
 \param{stayopen}, se diverso da zero, fa sì che il file resti aperto anche fra
@@ -1179,8 +1192,8 @@ rimandando alle rispettive pagine di manuale.
     protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\ 
     \hline
   \end{tabular}
-  \caption{Funzioni lettura sequenziale dei dati del \textit{Name Service
-      Switch}.} 
+  \caption{Funzioni lettura sequenziale dei dati del
+    \itindex{Name~Service~Switch} \textit{Name Service Switch}.} 
   \label{tab:name_sequential_read}
 \end{table}
 
@@ -1211,7 +1224,7 @@ nuova.
 
 La prima funzione di questa interfaccia è \funcd{getaddrinfo},\footnote{la
   funzione è definita, insieme a \func{getnameinfo} che vedremo più avanti,
-  nell'\href{http://www.ietf.org/rfc/rfc2553.txt} {RFC~2553}.} che combina le
+  nell'\href{http://www.ietf.org/rfc/rfc2553.txt}{RFC~2553}.} che combina le
 funzionalità delle precedenti \func{getipnodebyname}, \func{getipnodebyaddr},
 \func{getservbyname} e \func{getservbyport}, consentendo di ottenere
 contemporaneamente sia la risoluzione di un indirizzo simbolico che del nome
@@ -1252,11 +1265,11 @@ Come ultimo argomento in \param{res} deve essere passato un puntatore ad una
 variabile (di tipo puntatore ad una struttura \struct{addrinfo}) che verrà
 utilizzata dalla funzione per riportare (come \itindex{value~result~argument}
 \textit{value result argument}) i propri risultati. La funzione infatti è
-rientrante, ed alloca autonomamente tutta la memoria necessaria in cui
-verranno riportati i risultati della risoluzione.  La funzione scriverà
-all'indirizzo puntato da \param{res} il puntatore iniziale ad una
-\itindex{linked~list}\textit{linked list} di strutture di tipo
-\struct{addrinfo} contenenti tutte le informazioni ottenute.
+\index{funzioni!rientranti} rientrante, ed alloca autonomamente tutta la
+memoria necessaria in cui verranno riportati i risultati della risoluzione.
+La funzione scriverà all'indirizzo puntato da \param{res} il puntatore
+iniziale ad una \itindex{linked~list} \textit{linked list} di strutture di
+tipo \struct{addrinfo} contenenti tutte le informazioni ottenute.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1316,18 +1329,10 @@ valore nullo.
 Il campo \var{ai\_protocol} permette invece di effettuare la selezione dei
 risultati per il nome del servizio usando il numero identificativo del
 rispettivo protocollo di trasporto (i cui valori possibili sono riportati in
-\file{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli
+\conffile{/etc/protocols}); di nuovo i due soli valori utilizzabili sono quelli
 relativi a UDP e TCP, o il valore nullo che indica di ignorare questo campo
 nella selezione.
 
-Infine l'ultimo campo è \var{ai\_flags}; che deve essere impostato come una
-maschera binaria; i bit di questa variabile infatti vengono usati per dare
-delle indicazioni sul tipo di risoluzione voluta, ed hanno valori analoghi a
-quelli visti in sez.~\ref{sec:sock_name_services} per \func{getipnodebyname};
-il valore di \var{ai\_flags} può essere impostata con un OR aritmetico delle
-costanti di tab.~\ref{tab:ai_flags_values}, ciascuna delle quali identifica un
-bit della maschera.
-
 \begin{table}[!htb]
   \centering
   \footnotesize
@@ -1336,7 +1341,7 @@ bit della maschera.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{AI\_PASSIVE}    & viene utilizzato per ottenere un indirizzo in
+    \const{AI\_PASSIVE}    & Viene utilizzato per ottenere un indirizzo in
                              formato adatto per una successiva chiamata a
                              \func{bind}. Se specificato quando si è usato 
                              \const{NULL} come valore per \param{node} gli
@@ -1347,25 +1352,25 @@ bit della maschera.
                              \textit{loopback}. Se invece non è impostato gli
                              indirizzi verranno restituiti in formato adatto ad
                              una chiamata a \func{connect} o \func{sendto}.\\
-    \const{AI\_CANONNAME}  & richiede la restituzione del nome canonico della
+    \const{AI\_CANONNAME}  & Richiede la restituzione del nome canonico della
                              macchina, che verrà salvato in una stringa il cui
                              indirizzo sarà restituito nel campo
                              \var{ai\_canonname} della prima struttura
                              \struct{addrinfo} dei risultati. Se il nome
                              canonico non è disponibile al suo posto
                              viene restituita una copia di \param{node}. \\ 
-    \const{AI\_NUMERICHOST}& se impostato il nome della macchina specificato
+    \const{AI\_NUMERICHOST}& Se impostato il nome della macchina specificato
                              con \param{node} deve essere espresso in forma
                              numerica, altrimenti sarà restituito un errore
                              \const{EAI\_NONAME} (vedi
                              tab.~\ref{tab:addrinfo_error_code}), in questo
                              modo si evita ogni chiamata alle funzioni di
                              risoluzione.\\ 
-    \const{AI\_V4MAPPED}   & stesso significato dell'analoga di
+    \const{AI\_V4MAPPED}   & Stesso significato dell'analoga di
                              tab.~\ref{tab:sock_getipnodebyname_flags}.\\  
-    \const{AI\_ALL}        & stesso significato dell'analoga di
+    \const{AI\_ALL}        & Stesso significato dell'analoga di
                              tab.~\ref{tab:sock_getipnodebyname_flags}.\\ 
-    \const{AI\_ADDRCONFIG} & stesso significato dell'analoga di
+    \const{AI\_ADDRCONFIG} & Stesso significato dell'analoga di
                              tab.~\ref{tab:sock_getipnodebyname_flags}.\\ 
     \hline
   \end{tabular}
@@ -1374,6 +1379,15 @@ bit della maschera.
   \label{tab:ai_flags_values}
 \end{table}
 
+
+Infine l'ultimo campo è \var{ai\_flags}; che deve essere impostato come una
+maschera binaria; i bit di questa variabile infatti vengono usati per dare
+delle indicazioni sul tipo di risoluzione voluta, ed hanno valori analoghi a
+quelli visti in sez.~\ref{sec:sock_name_services} per \func{getipnodebyname};
+il valore di \var{ai\_flags} può essere impostata con un OR aritmetico delle
+costanti di tab.~\ref{tab:ai_flags_values}, ciascuna delle quali identifica un
+bit della maschera.
+
 La funzione restituisce un valore nullo in caso di successo, o un codice in
 caso di errore. I valori usati come codice di errore sono riportati in
 tab.~\ref{tab:addrinfo_error_code}; dato che la funzione utilizza altre
@@ -1390,37 +1404,37 @@ corrispondente 
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{EAI\_FAMILY}  & la famiglia di indirizzi richiesta non è
+    \const{EAI\_FAMILY}  & La famiglia di indirizzi richiesta non è
                            supportata. \\ 
-    \const{EAI\_SOCKTYPE}& il tipo di socket richiesto non è supportato. \\
-    \const{EAI\_BADFLAGS}& il campo \var{ai\_flags} contiene dei valori non
+    \const{EAI\_SOCKTYPE}& Il tipo di socket richiesto non è supportato. \\
+    \const{EAI\_BADFLAGS}& Il campo \var{ai\_flags} contiene dei valori non
                            validi. \\
-    \const{EAI\_NONAME}  & il nome a dominio o il servizio non sono noti,
+    \const{EAI\_NONAME}  & Il nome a dominio o il servizio non sono noti,
                            viene usato questo errore anche quando si specifica
                            il valore \const{NULL} per entrambi gli argomenti
                            \param{node} e \param{service}. \\
-    \const{EAI\_SERVICE} & il servizio richiesto non è disponibile per il tipo
+    \const{EAI\_SERVICE} & Il servizio richiesto non è disponibile per il tipo
                            di socket richiesto, anche se può esistere per
                            altri tipi di socket. \\
-    \const{EAI\_ADDRFAMILY}& la rete richiesta non ha nessun indirizzo di rete
+    \const{EAI\_ADDRFAMILY}& La rete richiesta non ha nessun indirizzo di rete
                            per la famiglia di indirizzi specificata. \\
-    \const{EAI\_NODATA}  & la macchina specificata esiste, ma non ha nessun
+    \const{EAI\_NODATA}  & La macchina specificata esiste, ma non ha nessun
                            indirizzo di rete definito. \\
-    \const{EAI\_MEMORY}  & è stato impossibile allocare la memoria necessaria
+    \const{EAI\_MEMORY}  & È stato impossibile allocare la memoria necessaria
                            alle operazioni. \\
-    \const{EAI\_FAIL}    & il DNS ha restituito un errore di risoluzione  
+    \const{EAI\_FAIL}    & Il DNS ha restituito un errore di risoluzione  
                            permanente. \\
-    \const{EAI\_AGAIN}   & il DNS ha restituito un errore di risoluzione  
+    \const{EAI\_AGAIN}   & Il DNS ha restituito un errore di risoluzione  
                            temporaneo, si può ritentare in seguito. \\
-    \const{EAI\_SYSTEM}  & c'è stato un errore di sistema, si può controllare
+    \const{EAI\_SYSTEM}  & C'è stato un errore di sistema, si può controllare
                            \var{errno} per i dettagli. \\
 %    \hline
 % TODO estensioni GNU, trovarne la documentazione
-%    \const{EAI\_INPROGRESS}& richiesta in corso. \\
-%    \const{EAI\_CANCELED}& la richiesta è stata cancellata.\\
-%    \const{EAI\_NOTCANCELED}& la richiesta non è stata cancellata. \\
-%    \const{EAI\_ALLDONE} & tutte le richieste sono complete. \\
-%    \const{EAI\_INTR}    & richiesta interrotta. \\
+%    \const{EAI\_INPROGRESS}& Richiesta in corso. \\
+%    \const{EAI\_CANCELED}& La richiesta è stata cancellata.\\
+%    \const{EAI\_NOTCANCELED}& La richiesta non è stata cancellata. \\
+%    \const{EAI\_ALLDONE} & Tutte le richieste sono complete. \\
+%    \const{EAI\_INTR}    & Richiesta interrotta. \\
     \hline
   \end{tabular}
   \caption{Costanti associate ai valori dei codici di errore della funzione
@@ -1462,13 +1476,13 @@ lista illustrata in fig.~\ref{fig:sock_addrinfo_list}.
 \begin{figure}[!htb]
   \centering
   \includegraphics[width=10cm]{img/addrinfo_list}
-  \caption{La \itindex{linked~list}\textit{linked list} delle strutture
+  \caption{La \itindex{linked~list} \textit{linked list} delle strutture
     \struct{addrinfo} restituite da \func{getaddrinfo}.}
   \label{fig:sock_addrinfo_list}
 \end{figure}
 
 Come primo esempio di uso di \func{getaddrinfo} vediamo un programma
-elementare di interrogazione del \itindex{resolver}\textit{resolver} basato
+elementare di interrogazione del \itindex{resolver} \textit{resolver} basato
 questa funzione, il cui corpo principale è riportato in
 fig.~\ref{fig:mygetaddr_example}. Il codice completo del programma, compresa
 la gestione delle opzioni in cui è gestita l'eventuale inizializzazione
@@ -1559,7 +1573,7 @@ IPv4 address:
 \end{Verbatim}
 %$
 
-Una volta estratti i risultati dalla \itindex{linked~list}\textit{linked list}
+Una volta estratti i risultati dalla \itindex{linked~list} \textit{linked list}
 puntata da \param{res} se questa non viene più utilizzata si dovrà avere cura
 di disallocare opportunamente tutta la memoria, per questo viene fornita
 l'apposita funzione \funcd{freeaddrinfo}, il cui prototipo è:
@@ -1581,7 +1595,7 @@ per \param{res}.
 
 Si tenga presente infine che se si copiano i risultati da una delle strutture
 \struct{addrinfo} restituite nella lista indicizzata da \param{res}, occorre
-avere cura di eseguire una \itindex{deep~copy}\textit{deep copy} in cui
+avere cura di eseguire una \itindex{deep~copy} \textit{deep copy} in cui
 si copiano anche tutti i dati presenti agli indirizzi contenuti nella
 struttura \struct{addrinfo}, perché una volta disallocati i dati con
 \func{freeaddrinfo} questi non sarebbero più disponibili. 
@@ -1631,17 +1645,17 @@ tab.~\ref{tab:getnameinfo_flags}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{NI\_NOFQDN}     & richiede che venga restituita solo il nome della
+    \const{NI\_NOFQDN}     & Richiede che venga restituita solo il nome della
                              macchina all'interno del dominio al posto del
                              nome completo (FQDN).\\
-    \const{NI\_NUMERICHOST}& richiede che venga restituita la forma numerica
+    \const{NI\_NUMERICHOST}& Richiede che venga restituita la forma numerica
                              dell'indirizzo (questo succede sempre se il nome
                              non può essere ottenuto).\\ 
-    \const{NI\_NAMEREQD}   & richiede la restituzione di un errore se il nome
+    \const{NI\_NAMEREQD}   & Richiede la restituzione di un errore se il nome
                              non può essere risolto.\\
-    \const{NI\_NUMERICSERV}& richiede che il servizio venga restituito in
+    \const{NI\_NUMERICSERV}& Richiede che il servizio venga restituito in
                              forma numerica (attraverso il numero di porta).\\
-    \const{NI\_DGRAM}      & richiede che venga restituito il nome del
+    \const{NI\_DGRAM}      & Richiede che venga restituito il nome del
                              servizio su UDP invece che quello su TCP per quei
                              pichi servizi (porte 512-214) che soni diversi
                              nei due protocolli.\\
@@ -1693,7 +1707,7 @@ l'uso dei socket.
 La funzione prende quattro argomenti, i primi due sono le stringhe che
 indicano il nome della macchina a cui collegarsi ed il relativo servizio su
 cui sarà effettuata la risoluzione; seguono il protocollo da usare (da
-specificare con il valore numerico di \file{/etc/protocols}) ed il tipo di
+specificare con il valore numerico di \conffile{/etc/protocols}) ed il tipo di
 socket (al solito specificato con i valori illustrati in
 sez.~\ref{sec:sock_type}).  La funzione ritorna il valore del file descriptor
 associato al socket (un numero positivo) in caso di successo, o -1 in caso di
@@ -1896,7 +1910,7 @@ qualunque tipo di socket.
 
 I valori usati per \param{level}, corrispondenti ad un dato protocollo usato
 da un socket, sono quelli corrispondenti al valore numerico che identifica il
-suddetto protocollo in \file{/etc/protocols}; dato che la leggibilità di un
+suddetto protocollo in \conffile{/etc/protocols}; dato che la leggibilità di un
 programma non trarrebbe certo beneficio dall'uso diretto dei valori numerici,
 più comunemente si indica il protocollo tramite le apposite costanti
 \texttt{SOL\_*} riportate in tab.~\ref{tab:sock_option_levels}, dove si sono
@@ -1905,7 +1919,7 @@ riassunti i valori che possono essere usati per l'argomento
   confusa: infatti in Linux il valore si può impostare sia usando le costanti
   \texttt{SOL\_*}, che le analoghe \texttt{IPPROTO\_*} (citate anche da
   Stevens in \cite{UNP1}); entrambe hanno gli stessi valori che sono
-  equivalenti ai numeri di protocollo di \file{/etc/protocols}, con una
+  equivalenti ai numeri di protocollo di \conffile{/etc/protocols}, con una
   eccezione specifica, che è quella del protocollo ICMP, per la quale non
   esista una costante, il che è comprensibile dato che il suo valore, 1, è
   quello che viene assegnato a \const{SOL\_SOCKET}.}
@@ -1918,11 +1932,11 @@ riassunti i valori che possono essere usati per l'argomento
     \textbf{Livello} & \textbf{Significato} \\
     \hline
     \hline
-    \const{SOL\_SOCKET}& opzioni generiche dei socket.\\
-    \const{SOL\_IP}    & opzioni specifiche per i socket che usano IPv4.\\
-    \const{SOL\_TCP}   & opzioni per i socket che usano TCP.\\
-    \const{SOL\_IPV6}  & opzioni specifiche per i socket che usano IPv6.\\
-    \const{SOL\_ICMPV6}& opzioni specifiche per i socket che usano ICMPv6.\\
+    \const{SOL\_SOCKET}& Opzioni generiche dei socket.\\
+    \const{SOL\_IP}    & Opzioni specifiche per i socket che usano IPv4.\\
+    \const{SOL\_TCP}   & Opzioni per i socket che usano TCP.\\
+    \const{SOL\_IPV6}  & Opzioni specifiche per i socket che usano IPv6.\\
+    \const{SOL\_ICMPV6}& Opzioni specifiche per i socket che usano ICMPv6.\\
     \hline
   \end{tabular}
   \caption{Possibili valori dell'argomento \param{level} delle 
@@ -1979,7 +1993,7 @@ di \func{setsockopt}, anche se non 
 per entrambe le funzioni. In questo caso \param{optval} viene usato per
 ricevere le informazioni ed indica l'indirizzo a cui andranno scritti i dati
 letti dal socket, infine \param{optlen} diventa un puntatore ad una variabile
-che viene usata come \itindex{value~result~argument}\textit{value result
+che viene usata come \itindex{value~result~argument} \textit{value result
   argument} per indicare, prima della chiamata della funzione, la lunghezza
 del buffer allocato per \param{optval} e per ricevere indietro, dopo la
 chiamata della funzione, la dimensione effettiva dei dati scritti su di esso.
@@ -2011,49 +2025,49 @@ tab.~\ref{tab:sock_opt_socklevel}.
     \hline
     \hline
     \const{SO\_KEEPALIVE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          controlla l'attività della connessione.\\
+                          Controlla l'attività della connessione.\\
     \const{SO\_OOBINLINE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          lascia in linea i dati \itindex{out-of-band}
+                          Lascia in linea i dati \itindex{out-of-band}
                           \textit{out-of-band}.\\
     \const{SO\_RCVLOWAT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          basso livello sul buffer di ricezione.\\
+                          Basso livello sul buffer di ricezione.\\
     \const{SO\_SNDLOWAT} &$\bullet$&$\bullet$&         &\texttt{int}&
-                          basso livello sul buffer di trasmissione.\\
+                          Basso livello sul buffer di trasmissione.\\
     \const{SO\_RCVTIMEO} &$\bullet$&$\bullet$&         &\texttt{timeval}& 
-                          timeout in ricezione.\\
+                          Timeout in ricezione.\\
     \const{SO\_SNDTIMEO} &$\bullet$&$\bullet$&         &\texttt{timeval}& 
-                          timeout in trasmissione.\\
+                          Timeout in trasmissione.\\
     \const{SO\_BSDCOMPAT}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          abilita la compatibilità con BSD.\\
+                          Abilita la compatibilità con BSD.\\
     \const{SO\_PASSCRED} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          abilita la ricezione di credenziali.\\
+                          Abilita la ricezione di credenziali.\\
     \const{SO\_PEERCRED} &$\bullet$&         &         &\texttt{ucred}& 
-                          restituisce le credenziali del processo remoto.\\
+                          Restituisce le credenziali del processo remoto.\\
     \const{SO\_BINDTODEVICE}&$\bullet$&$\bullet$&         &\texttt{char *}& 
-                          lega il socket ad un dispositivo.\\
+                          Lega il socket ad un dispositivo.\\
     \const{SO\_DEBUG}    &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          abilita il debugging sul socket.\\
+                          Abilita il debugging sul socket.\\
     \const{SO\_REUSEADDR}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          consente il riutilizzo di un indirizzo locale.\\
+                          Consente il riutilizzo di un indirizzo locale.\\
     \const{SO\_TYPE}     &$\bullet$&         &         &\texttt{int}& 
-                          restituisce il tipo di socket.\\
+                          Restituisce il tipo di socket.\\
     \const{SO\_ACCEPTCONN}&$\bullet$&        &         &\texttt{int}& 
-                          indica se il socket è in ascolto.\\
+                          Indica se il socket è in ascolto.\\
     \const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          non invia attraverso un gateway.\\
+                          Non invia attraverso un gateway.\\
     \const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          attiva o disattiva il \itindex{broadcast}
+                          Attiva o disattiva il \itindex{broadcast}
                           \textit{broadcast}.\\ 
     \const{SO\_SNDBUF}   &$\bullet$&$\bullet$&         &\texttt{int}& 
-                          imposta dimensione del buffer di trasmissione.\\
+                          Imposta dimensione del buffer di trasmissione.\\
     \const{SO\_RCVBUF}   &$\bullet$&$\bullet$&         &\texttt{int}& 
-                          imposta dimensione del buffer di ricezione.\\
+                          Imposta dimensione del buffer di ricezione.\\
     \const{SO\_LINGER}   &$\bullet$&$\bullet$&         &\texttt{linger}&
-                          indugia nella chiusura con dati da spedire.\\
+                          Indugia nella chiusura con dati da spedire.\\
     \const{SO\_PRIORITY} &$\bullet$&$\bullet$&         &\texttt{int}& 
-                          imposta la priorità del socket.\\
+                          Imposta la priorità del socket.\\
     \const{SO\_ERROR}    &$\bullet$&         &         &\texttt{int}& 
-                          riceve e cancella gli errori pendenti.\\
+                          Riceve e cancella gli errori pendenti.\\
    \hline
   \end{tabular}
   \caption{Le opzioni disponibili al livello \const{SOL\_SOCKET}.} 
@@ -2105,7 +2119,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   \func{setsockopt} darà un errore di \errcode{ENOPROTOOPT}. 
 
 \item[\const{SO\_SNDLOWAT}] questa opzione imposta il valore che indica il
-  numero minimo di byte che devono essere presenti nel buffer di scrittura
+  numero minimo di byte che devono essere presenti nel buffer di trasmissione
   perché il kernel li invii al protocollo successivo, consentendo ad una
   \func{write} di ritornare o segnalando ad una \func{select} (vedi
   sez.~\ref{sec:TCP_sock_select}) che è possibile eseguire una scrittura.
@@ -2238,17 +2252,17 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   tipo \const{SOCK\_STREAM}.
 
 \item[\const{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di
-  uscita del socket. Prende per \param{optval} un intero indicante il numero
-  di byte. Il valore di default ed il valore massimo che si possono
+  trasmissione del socket. Prende per \param{optval} un intero indicante il
+  numero di byte. Il valore di default ed il valore massimo che si possono
   specificare come argomento per questa opzione sono impostabili
   rispettivamente tramite gli opportuni valori di \func{sysctl} (vedi
   sez.~\ref{sec:sock_sysctl}).
 
 \item[\const{SO\_RCVBUF}] questa opzione imposta la dimensione del buffer di
-  ingresso del socket. Prende per \param{optval} un intero indicante il numero
-  di byte. Il valore di default ed il valore massimo che si può specificare
-  come argomento per questa opzione sono impostabili tramiti gli opportuni
-  valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
+  ricezione del socket. Prende per \param{optval} un intero indicante il
+  numero di byte. Il valore di default ed il valore massimo che si può
+  specificare come argomento per questa opzione sono impostabili tramiti gli
+  opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
 
   Si tenga presente che nel caso di socket TCP, per entrambe le opzioni
   \const{SO\_RCVBUF} e \const{SO\_SNDBUF}, il kernel alloca effettivamente una
@@ -2259,11 +2273,13 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   per mantenere dati amministrativi e strutture interne, e solo una parte
   viene usata come buffer per i dati, mentre il valore letto da
   \func{getsockopt} e quello riportato nei vari parametri di
-  \textit{sysctl}\footnote{cioè \texttt{wmem\_max} e \texttt{rmem\_max} in
-    \texttt{/proc/sys/net/core} e \texttt{tcp\_wmem} e \texttt{tcp\_rmem} in
+  \textit{sysctl}\footnote{cioè \procrelfile{/proc/sys/net/core}{wmem\_max} e
+    \procrelfile{/proc/sys/net/core}{rmem\_max} in \texttt{/proc/sys/net/core}
+    e \procrelfile{/proc/sys/net/ipv4}{tcp\_wmem} e
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem} in
     \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la
   memoria effettivamente impiegata.  Si tenga presente inoltre che le
-  modifiche alle dimensioni dei buffer di ingresso e di uscita, per poter
+  modifiche alle dimensioni dei buffer di ricezione e trasmissione, per poter
   essere effettive, devono essere impostate prima della chiamata alle funzioni
   \func{listen} o \func{connect}.
 
@@ -2297,9 +2313,33 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   usualmente utilizzata per ricevere il codice di errore, come accennato in
   sez.~\ref{sec:TCP_sock_select}, quando si sta osservando il socket con una
   \func{select} che ritorna a causa dello stesso.
-\end{basedescript}
+
+\item[\const{SO\_ATTACH\_FILTER}] questa opzione permette di agganciare ad un
+  socket un filtro di pacchetti che consente di selezionare quali pacchetti,
+  fra tutti quelli ricevuti, verranno letti. Viene usato principalmente con i
+  socket di tipo \const{PF\_PACKET} con la libreria \texttt{libpcap} per
+  implementare programmi di cattura dei pacchetti, torneremo su questo in
+  sez.~\ref{sec:packet_socket}.
+
+\item[\const{SO\_DETACH\_FILTER}] consente di distaccare un filtro
+  precedentemente aggiunto ad un socket.
 
 % TODO documentare SO_ATTACH_FILTER e SO_DETACH_FILTER
+% riferimenti http://www.rcpt.to/lsfcc/lsf.html
+% Documentation/networking/filter.txt
+
+% TODO documentare SO_MARK, introdotta nel 2.6.25, richiede CAP_NET_ADMIN
+%A userspace program may wish to set the mark for each packets its send
+%without using the netfilter MARK target. Changing the mark can be used
+%for mark based routing without netfilter or for packet filtering.
+
+
+% TODO documentare SO_TIMESTAMP e le altre opzioni di timestamping dei 
+% pacchetti, introdotte nel 2.6.30, vedi nei sorgenti del kernel:
+% Documentation/networking/timestamping.txt
+
+
+\end{basedescript}
 
 
 \subsection{L'uso delle principali opzioni dei socket}
@@ -2364,7 +2404,7 @@ chiuso dopo aver impostato un errore di \errcode{ETIMEDOUT}. Qualora la
 connessione si sia ristabilita e si riceva un successivo messaggio di risposta
 il ciclo riparte come se niente fosse avvenuto.  Infine se si riceve come
 risposta un pacchetto ICMP di destinazione irraggiungibile (vedi
-sez.~\ref{sec:icmp_protocol_xxx}), verrà restituito l'errore corrispondente.
+sez.~\ref{sec:ICMP_protocol}), verrà restituito l'errore corrispondente.
 
 In generale questa opzione serve per individuare una caduta della connessione
 anche quando non si sta facendo traffico su di essa.  Viene usata
@@ -2389,7 +2429,7 @@ comunicare con il server via rete.
 \end{figure}
 
 Abilitandola dopo un certo tempo le connessioni effettivamente terminate
-verrano comunque chiuse per cui, utilizzando ad esempio una \func{select}, se
+verranno comunque chiuse per cui, utilizzando ad esempio una \func{select}, se
 be potrà rilevare la conclusione e ricevere il relativo errore. Si tenga
 presente però che non può avere la certezza assoluta che un errore di
 \errcode{ETIMEDOUT} ottenuto dopo aver abilitato questa opzione corrisponda
@@ -2556,7 +2596,7 @@ altro socket.  Questo ovviamente non ha senso per il normale traffico di rete,
 in cui i pacchetti vengono scambiati direttamente fra due applicazioni; ma
 quando un sistema supporta il traffico in \itindex{multicast}
 \textit{multicast}, in cui una applicazione invia i pacchetti a molte altre
-(vedi sez.~\ref{sec:multicast_xxx}), allora ha senso che su una macchina i
+(vedi sez.~\ref{sec:xxx_multicast}), allora ha senso che su una macchina i
 pacchetti provenienti dal traffico in \itindex{multicast} \textit{multicast}
 possano essere ricevuti da più applicazioni\footnote{l'esempio classico di
   traffico in \textit{multicast} è quello di uno streaming di dati (audio,
@@ -2587,7 +2627,7 @@ esiste, ma il comportamento di \const{SO\_REUSEADDR} 
 possibile effettuare un \textit{completely duplicate binding} ed ottenere il
 successo di \func{bind} su un socket legato allo stesso indirizzo e porta solo
 se il programma che ha eseguito per primo \func{bind} su di essi ha impostato
-questa opzione.\footnote{Questa restrizione permette di evitare il cosiddetto
+questa opzione.\footnote{questa restrizione permette di evitare il cosiddetto
   \textit{port stealing}, in cui un programma, usando \const{SO\_REUSEADDR},
   può collegarsi ad una porta già in uso e ricevere i pacchetti destinati ad
   un altro programma; con questa caratteristica ciò è possibile soltanto se il
@@ -2709,42 +2749,44 @@ sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file.
     \hline
     \hline
     \const{IP\_OPTIONS}         &$\bullet$&$\bullet$&&\texttt{void *}& %??? 
-      imposta o riceve le opzioni di IP.\\
+      Imposta o riceve le opzioni di IP.\\
     \const{IP\_PKTINFO}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      passa un messaggio di informazione.\\
+      Passa un messaggio di informazione.\\
     \const{IP\_RECVTOS}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      passa un messaggio col campo TOS.\\
+      Passa un messaggio col campo TOS.\\
     \const{IP\_RECVTTL}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      passa un messaggio col campo TTL.\\
+      Passa un messaggio col campo TTL.\\
     \const{IP\_RECVOPTS}        &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      passa un messaggio con le opzioni IP.\\
+      Passa un messaggio con le opzioni IP.\\
     \const{IP\_RETOPTS}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      passa un messaggio con le opzioni IP non trattate.\\
+      Passa un messaggio con le opzioni IP non trattate.\\
     \const{IP\_TOS}             &$\bullet$&$\bullet$&         &\texttt{int}& 
-      imposta il valore del campo TOS.\\
+      Imposta il valore del campo TOS.\\
     \const{IP\_TTL}             &$\bullet$&$\bullet$&         &\texttt{int}& 
-      imposta il valore del campo TTL.\\
+      Imposta il valore del campo TTL.\\
+    \const{IP\_MINTTL}          &$\bullet$&$\bullet$&   &\texttt{int}& 
+      Imposta il valore minimo del TTL per i pacchetti accettati.\\ 
     \const{IP\_HDRINCL}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      passa l'intestazione di IP nei dati.\\
+      Passa l'intestazione di IP nei dati.\\
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      abilita la gestione degli errori.\\
+      Abilita la gestione degli errori.\\
     \const{IP\_MTU\_DISCOVER}   &$\bullet$&$\bullet$&         &\texttt{int}& 
-      imposta il Path MTU \itindex{Maximum~Transfer~Unit} Discovery.\\
+      Imposta il Path MTU \itindex{Maximum~Transfer~Unit} Discovery.\\
     \const{IP\_MTU}             &$\bullet$&         &         &\texttt{int}& 
-      legge il valore attuale della \itindex{Maximum~Transfer~Unit} MTU.\\
+      Legge il valore attuale della \itindex{Maximum~Transfer~Unit} MTU.\\
     \const{IP\_ROUTER\_ALERT}   &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      imposta l'opzione \textit{IP router alert} sui pacchetti.\\
+      Imposta l'opzione \textit{IP router alert} sui pacchetti.\\
     \const{IP\_MULTICAST\_TTL}  &$\bullet$&$\bullet$&         &\texttt{int}& 
-      imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\
+      Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\
     \const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      controlla il reinvio a se stessi dei dati di \itindex{multicast} 
+      Controlla il reinvio a se stessi dei dati di \itindex{multicast} 
       \textit{multicast}.\\ 
     \const{IP\_ADD\_MEMBERSHIP} &         &$\bullet$&   &\struct{ip\_mreqn}& 
-      si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\
+      Si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\
     \const{IP\_DROP\_MEMBERSHIP}&         &$\bullet$&   &\struct{ip\_mreqn}& 
-      si sgancia da un gruppo di \textit{multicast}.\\
+      Si sgancia da un gruppo di \textit{multicast}.\\
     \const{IP\_MULTICAST\_IF}   &         &$\bullet$&   &\struct{ip\_mreqn}& 
-      imposta l'interfaccia locale di un socket \itindex{multicast} 
+      Imposta l'interfaccia locale di un socket \itindex{multicast} 
       \textit{multicast}.\\ 
    \hline
   \end{tabular}
@@ -2840,12 +2882,13 @@ sez.~\ref{sec:net_sendmsg}).
   supportata per socket di tipo \const{SOCK\_STREAM}.
 
 \item[\const{IP\_TOS}] L'opzione consente di leggere o impostare il campo
-  \textit{Type of Service} dell'intestazione IP (vedi
-  sez.~\ref{sec:IP_header}) che permette di indicare le priorità dei
-  pacchetti. Se impostato il valore verrà mantenuto per tutti i pacchetti del
-  socket; alcuni valori (quelli che aumentano la priorità) richiedono i
-  privilegi di amministrazione con la \itindex{capabilities} capability
-  \const{CAP\_NET\_ADMIN}.
+  \textit{Type of Service} dell'intestazione IP (per una trattazione più
+  dettagliata, che riporta anche i valori possibili e le relative costanti di
+  definizione si veda sez.~\ref{sec:IP_header}) che permette di indicare le
+  priorità dei pacchetti. Se impostato il valore verrà mantenuto per tutti i
+  pacchetti del socket; alcuni valori (quelli che aumentano la priorità)
+  richiedono i privilegi di amministrazione con la \itindex{capabilities}
+  capability \const{CAP\_NET\_ADMIN}.
 
   Il campo TOS è di 8 bit e l'opzione richiede per \param{optval} un intero
   che ne contenga il valore. Sono definite anche alcune costanti che
@@ -2857,12 +2900,32 @@ sez.~\ref{sec:net_sendmsg}).
   dal protocollo utilizzando l'opzione \const{SO\_PRIORITY} illustrata in
   sez.~\ref{sec:sock_generic_options}.
 
-\item[\const{IP\_TTL}] L'opzione consente di leggere o impostare il campo
-  \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header})
-  per tutti i pacchetti associati al socket.  Il campo TTL è di 8 bit e
+\item[\const{IP\_TTL}] L'opzione consente di leggere o impostare per tutti i
+  pacchetti associati al socket il campo \textit{Time to Live}
+  dell'intestazione IP che indica il numero massimo di \textit{hop} (passaggi
+  da un router ad un altro) restanti al paccheto (per una trattazione più
+  estesa si veda sez.~\ref{sec:IP_header}).  Il campo TTL è di 8 bit e
   l'opzione richiede che \param{optval} sia un intero, che ne conterrà il
   valore.
 
+\item[\const{IP\_MINTTL}] L'opzione, introdotta con il kernel 2.6.34, imposta
+  un valore minimo per il campo \textit{Time to Live} dei pacchetti associati
+  al socket su cui è attivata, che se non rispettato ne causa lo scarto
+  automatico. L'opzione è nata per implementare
+  l'\href{http://www.ietf.org/rfc/rfc5082.txt}{RFC~5082} che la prevede come
+  forma di protezione per i router che usano il protocollo BGP poiché questi,
+  essendo in genere adiacenti, possono, impostando un valore di 255, scartare
+  automaticamente tutti gli eventuali pacchetti falsi creati da un attacco a
+  questo protocollo, senza doversi curare di verificarne la
+  validità.\footnote{l'attacco viene in genere portato per causare un
+    \textit{Denial of Service} aumentando il consumo di CPU del router nella
+    verifica dell'autenticità di un gran numero di pacchetti di pacchetti
+    falsi; questi, arrivando da sorgenti diverse da un router adiacente, non
+    potrebbero più avere un TTL di 255 anche qualora questo fosse stato il
+    valore di partenza, e l'impostazione dell'opzione consente di scartarli
+    senza carico aggiuntivo sulla CPU (che altrimenti dovrebbe calcolare una
+    checksum).}
+
 \item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
   l'intestazione IP in cima ai propri dati. L'opzione è valida soltanto per
   socket di tipo \const{SOCK\_RAW}, e quando utilizzata eventuali valori
@@ -2920,11 +2983,12 @@ sez.~\ref{sec:net_sendmsg}).
   ricerca è disabilitata ed è responsabilità del programma creare pacchetti di
   dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se
   l'opzione viene abilitata, il kernel si incaricherà di tenere traccia
-  automaticamente della \textit{Path MTU} verso ciascuna destinazione, e
-  rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori
-  della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la
-    trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento
-    successivo della trasmissione, o la frammentazione dello stesso.} 
+  automaticamente della \itindex{Maximum~Transfer~Unit} \textit{Path MTU}
+  verso ciascuna destinazione, e rifiuterà immediatamente la trasmissione di
+  pacchetti di dimensioni maggiori della MTU con un errore di
+  \errval{EMSGSIZE}.\footnote{in caso contrario la trasmissione del pacchetto
+    sarebbe effettuata, ottenendo o un fallimento successivo della
+    trasmissione, o la frammentazione dello stesso.}
 
 \item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
   di percorso del socket.  L'opzione richiede per \param{optval} un intero che
@@ -3054,32 +3118,32 @@ strutture collegate all'uso delle opzioni TCP sono definite in
     \hline
     \hline
     \const{TCP\_NODELAY}      &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      spedisce immediatamente i dati in segmenti singoli.\\
+      Spedisce immediatamente i dati in segmenti singoli.\\
     \const{TCP\_MAXSEG}       &$\bullet$&$\bullet$&         &\texttt{int}&
-      valore della \itindex{Maximum~Segment~Size} MSS per i segmenti in
+      Valore della \itindex{Maximum~Segment~Size} MSS per i segmenti in
       uscita.\\  
     \const{TCP\_CORK}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
-      accumula i dati in un unico segmento.\\
+      Accumula i dati in un unico segmento.\\
     \const{TCP\_KEEPIDLE}     &$\bullet$&$\bullet$&         &\texttt{int}& 
-      tempo in secondi prima di inviare un \textit{keepalive}.\\
+      Tempo in secondi prima di inviare un \textit{keepalive}.\\
     \const{TCP\_KEEPINTVL}    &$\bullet$&$\bullet$&         &\texttt{int}&
-      tempo in secondi prima fra \textit{keepalive} successivi.\\
+      Tempo in secondi prima fra \textit{keepalive} successivi.\\
     \const{TCP\_KEEPCNT}      &$\bullet$&$\bullet$&         &\texttt{int}& 
-      numero massimo di \textit{keepalive} inviati.\\
+      Numero massimo di \textit{keepalive} inviati.\\
     \const{TCP\_SYNCNT}       &$\bullet$&$\bullet$&         &\texttt{int}& 
-      numero massimo di ritrasmissioni di un SYN.\\
+      Numero massimo di ritrasmissioni di un SYN.\\
     \const{TCP\_LINGER2}      &$\bullet$&$\bullet$&         &\texttt{int}&
-      tempo di vita in stato \texttt{FIN\_WAIT2}.\\
+      Tempo di vita in stato \texttt{FIN\_WAIT2}.\\
     \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$&         &\texttt{int}&
-      ritorna da \func{accept} solo in presenza di dati.\\
+      Ritorna da \func{accept} solo in presenza di dati.\\
     \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$&         &\texttt{int}&
-      valore della \itindex{advertised~window} \textit{advertised window}.\\
+      Valore della \itindex{advertised~window} \textit{advertised window}.\\
     \const{TCP\_INFO}         &$\bullet$&        &       &\struct{tcp\_info}& 
-      restituisce informazioni sul socket.\\
+      Restituisce informazioni sul socket.\\
     \const{TCP\_QUICKACK}     &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
-      abilita la modalità \textit{quickack}.\\
+      Abilita la modalità \textit{quickack}.\\
     \const{TCP\_CONGESTION}   &$\bullet$&$\bullet$&         &\texttt{char *}&
-      imposta l'algoritmo per il controllo della congestione.\\
+      Imposta l'algoritmo per il controllo della congestione.\\
    \hline
   \end{tabular}
   \caption{Le opzioni per i socket TCP disponibili al livello
@@ -3102,9 +3166,10 @@ quantit
     quando un programma di terminale invia un segmento TCP per ogni tasto
     premuto, 40 byte di intestazione di protocollo con 1 byte di dati
     trasmessi; per evitare situazioni del genere è stato introdotto
-    l'\textsl{algoritmo di Nagle}.}  Questo meccanismo è controllato da un
-  apposito algoritmo (detto \textsl{algoritmo di Nagle}, vedi
-  sez.~\ref{sez:tcp_protocol_xxx}). Il comportamento normale del protocollo
+    \index{algoritmo~di~Nagle} l'\textsl{algoritmo di Nagle}.}  Questo
+  meccanismo è controllato da un apposito algoritmo (detto
+  \index{algoritmo~di~Nagle} \textsl{algoritmo di Nagle}, vedi
+  sez.~\ref{sec:tcp_protocol_xxx}).  Il comportamento normale del protocollo
   prevede che i dati siano accumulati fintanto che non si raggiunge una
   quantità considerata adeguata per eseguire la trasmissione di un singolo
   segmento.
@@ -3115,10 +3180,11 @@ quantit
     richiesta HTTP.} in tal caso l'attesa introdotta dall'algoritmo di
   bufferizzazione non soltanto è inutile, ma peggiora le prestazioni
   introducendo un ritardo.  Impostando questa opzione si disabilita l'uso
-  dell'\textsl{algoritmo di Nagle} ed i dati vengono inviati immediatamente in
-  singoli segmenti, qualunque sia la loro dimensione.  Ovviamente l'uso di
-  questa opzione è dedicato a chi ha esigenze particolari come quella
-  illustrata, che possono essere stabilite solo per la singola applicazione.
+  \index{algoritmo~di~Nagle} dell'\textsl{algoritmo di Nagle} ed i dati
+  vengono inviati immediatamente in singoli segmenti, qualunque sia la loro
+  dimensione.  Ovviamente l'uso di questa opzione è dedicato a chi ha esigenze
+  particolari come quella illustrata, che possono essere stabilite solo per la
+  singola applicazione.
 
   Si tenga conto che questa opzione viene sovrascritta dall'eventuale
   impostazione dell'opzione \const{TCP\_CORK} (il cui scopo è sostanzialmente
@@ -3131,7 +3197,7 @@ quantit
 
 \item[\const{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore
   della \itindex{Maximum~Segment~Size} MSS (\textit{Maximum~Segment~Size},
-  vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sez:tcp_protocol_xxx}) dei
+  vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:tcp_protocol_xxx}) dei
   segmenti TCP uscenti. Se l'opzione è impostata prima di stabilire la
   connessione, si cambia anche il valore della \itindex{Maximum~Segment~Size}
   MSS annunciata all'altro capo della connessione. Se si specificano valori
@@ -3141,15 +3207,15 @@ quantit
 \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di
   \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione
   opposta, cioè quella in cui si sa fin dal principio che si dovranno inviare
-  grosse quantità di dati. Anche in questo caso l'\textsl{algoritmo di Nagle}
-  tenderà a suddividerli in dimensioni da lui ritenute
-  opportune,\footnote{l'algoritmo cerca di tenere conto di queste situazioni,
-    ma essendo un algoritmo generico tenderà comunque ad introdurre delle
-    suddivisioni in segmenti diversi, anche quando potrebbero non essere
-    necessarie, con conseguente spreco di banda.}  ma sapendo fin dall'inizio
-  quale è la dimensione dei dati si potranno di nuovo ottenere delle migliori
-  prestazioni disabilitandolo, e gestendo direttamente l'invio del nostro
-  blocco di dati in soluzione unica.
+  grosse quantità di dati. Anche in questo caso \index{algoritmo~di~Nagle}
+  l'\textsl{algoritmo di Nagle} tenderà a suddividerli in dimensioni da lui
+  ritenute opportune,\footnote{l'algoritmo cerca di tenere conto di queste
+    situazioni, ma essendo un algoritmo generico tenderà comunque ad
+    introdurre delle suddivisioni in segmenti diversi, anche quando potrebbero
+    non essere necessarie, con conseguente spreco di banda.}  ma sapendo fin
+  dall'inizio quale è la dimensione dei dati si potranno di nuovo ottenere
+  delle migliori prestazioni disabilitandolo, e gestendo direttamente l'invio
+  del nostro blocco di dati in soluzione unica.
 
   Quando questa opzione viene abilitata non vengono inviati segmenti di dati
   fintanto che essa non venga disabilitata; a quel punto tutti i dati rimasti
@@ -3162,11 +3228,11 @@ quantit
 
   Si usa molto spesso \const{TCP\_CORK} quando si effettua il trasferimento
   diretto di un blocco di dati da un file ad un socket con \func{sendfile}
-  (vedi sez.~\ref{sec:file_sendfile}), per inserire una intestazione prima
-  della chiamata a questa funzione; senza di essa l'intestazione potrebbe
-  venire spedita in un segmento a parte, che a seconda delle condizioni
-  potrebbe richiedere anche una risposta di ACK, portando ad una notevole
-  penalizzazione delle prestazioni.
+  (vedi sez.~\ref{sec:file_sendfile_splice}), per inserire una intestazione
+  prima della chiamata a questa funzione; senza di essa l'intestazione
+  potrebbe venire spedita in un segmento a parte, che a seconda delle
+  condizioni potrebbe richiedere anche una risposta di ACK, portando ad una
+  notevole penalizzazione delle prestazioni.
 
   Si tenga presente che l'implementazione corrente di \const{TCP\_CORK} non
   consente di bloccare l'invio dei dati per più di 200 millisecondi, passati i
@@ -3202,7 +3268,7 @@ quantit
   di tentativi di ritrasmissione dei segmenti SYN usati nel
   \itindex{three~way~handshake} \textit{three way handshake} prima che il
   tentativo di connessione venga abortito (si ricordi quanto accennato in
-  sez.\ref{sec:TCP_func_connect}). Sovrascrive per il singolo socket il valore
+  sez.~\ref{sec:TCP_func_connect}). Sovrascrive per il singolo socket il valore
   globale impostato con la \textit{sysctl} \texttt{tcp\_syn\_retries} (vedi
   sez.~\ref{sec:sock_ipv4_sysctl}).  Non vengono accettati valori maggiori di
   255; anche questa opzione non è standard e deve essere evitata se si vuole
@@ -3267,7 +3333,7 @@ quantit
 \item[\const{TCP\_WINDOW\_CLAMP}] con questa opzione si legge o si imposta
   alla dimensione specificata, in byte, il valore dichiarato della
   \itindex{advertised~window} \textit{advertised window} (vedi
-  sez.~\ref{sez:tcp_protocol_xxx}). Il kernel impone comunque una dimensione
+  sez.~\ref{sec:tcp_protocol_xxx}). Il kernel impone comunque una dimensione
   minima pari a \texttt{SOCK\_MIN\_RCVBUF/2}.  Questa opzione non deve essere
   utilizzata in codice che vuole essere portabile.
 
@@ -3299,7 +3365,7 @@ quantit
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
-    \includecodesnip{listati/is_closing.c}
+    \includecodesample{listati/is_closing.c}
   \end{minipage}
   \caption{Codice della funzione \texttt{is\_closing.c}, che controlla lo stato
     di un socket TCP per verificare se si sta chiudendo.}
@@ -3337,7 +3403,7 @@ quantit
 \item[\const{TCP\_CONGESTION}] questa opzione permette di impostare quale
   algoritmo per il controllo della congestione\footnote{il controllo della
     congestione è un meccanismo previsto dal protocollo TCP (vedi
-    sez.~\ref{sez:tcp_protocol_xxx}) per evitare di trasmettere inutilmente
+    sez.~\ref{sec:tcp_protocol_xxx}) per evitare di trasmettere inutilmente
     dati quando una connessione è congestionata; un buon algoritmo è
     fondamentale per il funzionamento del protocollo, dato che i pacchetti
     persi andrebbero ritrasmessi, per cui inviare un pacchetto su una linea
@@ -3384,31 +3450,31 @@ quantit
       \textbf{Nome}&\textbf{Configurazione}&\textbf{Riferimento} \\
       \hline
       \hline
-      reno& -- &algoritmo tradizionale, usato in caso di assenza degli altri.\\
+      reno& -- &Algoritmo tradizionale, usato in caso di assenza degli altri.\\
       \texttt{bic}     &\texttt{TCP\_CONG\_BIC}     & 
       \href{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}
-      {\texttt{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}}.\\
+      {\textsf{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}}.\\
       \texttt{cubic}   &\texttt{TCP\_CONG\_CUBIC}     & 
       \href{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}
-      {\texttt{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}}.\\
+      {\textsf{http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/index.htm}}.\\
       \texttt{highspeed}&\texttt{TCP\_CONG\_HSTCP}  & 
       \href{http://www.icir.org/floyd/hstcp.html}
-      {\texttt{http://www.icir.org/floyd/hstcp.html}}.\\
+      {\textsf{http://www.icir.org/floyd/hstcp.html}}.\\
       \texttt{htcp}    &\texttt{TCP\_CONG\_HTCP}    & 
       \href{http://www.hamilton.ie/net/htcp/}
-      {\texttt{http://www.hamilton.ie/net/htcp/}}.\\
+      {\textsf{http://www.hamilton.ie/net/htcp/}}.\\
       \texttt{hybla}   &\texttt{TCP\_CONG\_HYBLA}   &       
       \href{http://www.danielinux.net/projects.html}
-      {\texttt{http://www.danielinux.net/projects.html}}.\\
+      {\textsf{http://www.danielinux.net/projects.html}}.\\
       \texttt{scalable}&\texttt{TCP\_CONG\_SCALABLE}&  
       \href{http://www.deneholme.net/tom/scalable/}
-      {\texttt{http://www.deneholme.net/tom/scalable/}}.\\
+      {\textsf{http://www.deneholme.net/tom/scalable/}}.\\
       \texttt{vegas}   &\texttt{TCP\_CONG\_VEGAS}   &  
       \href{http://www.cs.arizona.edu/protocols/}
-      {\texttt{http://www.cs.arizona.edu/protocols/}}.\\
+      {\textsf{http://www.cs.arizona.edu/protocols/}}.\\
       \texttt{westwood}&\texttt{TCP\_CONG\_WESTWOOD}& 
       \href{http://www.cs.ucla.edu/NRL/hpi/tcpw/}
-      {\texttt{http://www.cs.ucla.edu/NRL/hpi/tcpw/}}.\\
+      {\textsf{http://www.cs.ucla.edu/NRL/hpi/tcpw/}}.\\
 %      \texttt{}&\texttt{}& .\\
       \hline
     \end{tabular}
@@ -3440,9 +3506,9 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente
     \hline
     \hline
     \const{UDP\_CORK}  &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? 
-      accumula tutti i dati su un unico pacchetto.\\
+      Accumula tutti i dati su un unico pacchetto.\\
     \const{UDP\_ENCAP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? 
-      non documentata.\\
+      Non documentata.\\
    \hline
   \end{tabular}
   \caption{Le opzioni per i socket UDP disponibili al livello
@@ -3450,6 +3516,8 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente
   \label{tab:sock_opt_udplevel}
 \end{table}
 
+% TODO documentare \const{UDP\_ENCAP} 
+
 Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel}
 sono un semplice riferimento, una maggiore quantità di dettagli sulle
 caratteristiche delle opzioni citate è quello dell'elenco seguente:
@@ -3593,7 +3661,7 @@ sono le seguenti:
   dell'interfaccia, e restituisce il relativo nome in \var{ifr\_name}.
 
   Il kernel infatti assegna ad ogni interfaccia un numero progressivo, detto
-  appunto \index{interface index} \textit{interface index}, che è quello che
+  appunto \itindex{interface~index} \textit{interface index}, che è quello che
   effettivamente la identifica nelle operazioni a basso livello, il nome
   dell'interfaccia è soltanto una etichetta associata a detto \textsl{indice},
   che permette di rendere più comprensibile l'indicazione dell'interfaccia
@@ -3619,36 +3687,36 @@ sono le seguenti:
     \textbf{Flag} & \textbf{Significato} \\
     \hline
     \hline
-    \const{IFF\_UP}        & l'interfaccia è attiva.\\
-    \const{IFF\_BROADCAST} & l'interfaccia ha impostato un indirizzo di
+    \const{IFF\_UP}        & L'interfaccia è attiva.\\
+    \const{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di
                              \itindex{broadcast} \textit{broadcast} valido.\\
-    \const{IFF\_DEBUG}     & è attivo il flag interno di debug.\\
-    \const{IFF\_LOOPBACK}  & l'interfaccia è una interfaccia di
+    \const{IFF\_DEBUG}     & È attivo il flag interno di debug.\\
+    \const{IFF\_LOOPBACK}  & L'interfaccia è una interfaccia di
                              \textit{loopback}.\\ 
-    \const{IFF\_POINTOPOINT}& l'interfaccia è associata ad un collegamento
+    \const{IFF\_POINTOPOINT}&L'interfaccia è associata ad un collegamento
                              \textsl{punto-punto}.\\ 
-    \const{IFF\_RUNNING}   & l'interfaccia ha delle risorse allocate (non può
+    \const{IFF\_RUNNING}   & L'interfaccia ha delle risorse allocate (non può
                              quindi essere disattivata).\\
-    \const{IFF\_NOARP}     & l'interfaccia ha il protocollo ARP disabilitato o
+    \const{IFF\_NOARP}     & L'interfaccia ha il protocollo ARP disabilitato o
                              l'indirizzo del livello di rete non è impostato.\\
-    \const{IFF\_PROMISC}   & l'interfaccia è in \index{modo~promiscuo}
+    \const{IFF\_PROMISC}   & L'interfaccia è in \index{modo~promiscuo}
                              \textsl{modo promiscuo} (riceve cioè tutti i
                              pacchetti che vede passare, compresi quelli non
                              direttamente indirizzati a lei).\\
-    \const{IFF\_NOTRAILERS}& evita l'uso di \textit{trailer} nei pacchetti.\\
-    \const{IFF\_ALLMULTI}  & riceve tutti i pacchetti di  \itindex{multicast}
+    \const{IFF\_NOTRAILERS}& Evita l'uso di \textit{trailer} nei pacchetti.\\
+    \const{IFF\_ALLMULTI}  & Riceve tutti i pacchetti di  \itindex{multicast}
                              \textit{multicast}.\\
-    \const{IFF\_MASTER}    & l'interfaccia è il master di un bundle per il
+    \const{IFF\_MASTER}    & L'interfaccia è il master di un bundle per il
                              bilanciamento di carico.\\
-    \const{IFF\_SLAVE}     & l'interfaccia è uno slave di un bundle per il
+    \const{IFF\_SLAVE}     & L'interfaccia è uno slave di un bundle per il
                              bilanciamento di carico.\\
-    \const{IFF\_MULTICAST} & l'interfaccia ha il supporto per il
+    \const{IFF\_MULTICAST} & L'interfaccia ha il supporto per il
                              \textit{multicast} \itindex{multicast} attivo.\\
-    \const{IFF\_PORTSEL}   & l'interfaccia può impostare i suoi parametri
-                             hardware (con l'uso di \struct{ifmap})..\\
-    \const{IFF\_AUTOMEDIA} & l'interfaccia è in grado di selezionare
+    \const{IFF\_PORTSEL}   & L'interfaccia può impostare i suoi parametri
+                             hardware (con l'uso di \struct{ifmap}).\\
+    \const{IFF\_AUTOMEDIA} & L'interfaccia è in grado di selezionare
                              automaticamente il tipo di collegamento.\\
-    \const{IFF\_DYNAMIC}   & gli indirizzi assegnati all'interfaccia vengono
+    \const{IFF\_DYNAMIC}   & Gli indirizzi assegnati all'interfaccia vengono
                              persi quando questa viene disattivata.\\
 %    \const{IFF\_}      & .\\
     \hline
@@ -3932,7 +4000,7 @@ Le opzioni disponibili per le propriet
 impostabili con \func{sysctl}, sono riportate sotto il nodo \texttt{net}, o,
 se acceduti tramite l'interfaccia del filesystem \texttt{/proc}, sotto
 \texttt{/proc/sys/net}. In genere sotto questa directory compaiono le
-sottodirectory (corrispondenti ad altrettanti sottonodi per \func{sysctl})
+sottodirectory (corrispondenti ad altrettanti sotto-nodi per \func{sysctl})
 relative ai vari protocolli e tipi di interfacce su cui è possibile
 intervenire per effettuare impostazioni; un contenuto tipico di questa
 directory è il seguente:
@@ -3952,7 +4020,7 @@ significativi.
 
 Si tenga presente infine che se è sempre possibile utilizzare il filesystem
 \texttt{/proc} come sostituto di \func{sysctl}, dato che i valori di nodi e
-sottonodi di quest'ultima sono mappati come file e directory sotto
+sotto-nodi di quest'ultima sono mappati come file e directory sotto
 \texttt{/proc/sys/}, non è vero il contrario, ed in particolare Linux consente
 di impostare alcuni parametri o leggere lo stato della rete a livello di
 sistema sotto \texttt{/proc/net}, dove sono presenti dei file che non
@@ -3962,34 +4030,36 @@ corrispondono a nessun nodo di \func{sysctl}.
 \subsection{I valori di controllo per i socket generici}
 \label{sec:sock_gen_sysctl}
 
-Nella directory \texttt{/proc/sys/net/core} sono presenti i file
+Nella directory \texttt{/proc/sys/net/core/} sono presenti i file
 corrispondenti ai parametri generici di \textit{sysctl} validi per tutti i
 socket.  Quelli descritti anche nella pagina di manuale, accessibile con
 \texttt{man 7 socket} sono i seguenti:
 
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di
-  lettura (cioè per i dati in ingresso) dei socket.
-\item[\texttt{rmem\_max}] imposta la dimensione massima che si può assegnare al
-  buffer di ingresso dei socket attraverso l'uso dell'opzione
-  \const{SO\_RCVBUF}.
-\item[\texttt{wmem\_default}] imposta la dimensione di default del buffer di
-  scrittura (cioè per i dati in uscita) dei socket.
-\item[\texttt{wmem\_max}] imposta la dimensione massima che si può assegnare al
-  buffer di uscita dei socket attraverso l'uso dell'opzione
-  \const{SO\_SNDBUF}.
-\item[\texttt{message\_cost}, \texttt{message\_burst}] contengono le
-  impostazioni del \itindex{bucket~filter} \textit{bucket filter} che
-  controlla l'emissione di messaggi di avviso da parte kernel per eventi
-  relativi a problemi sulla rete, imponendo un limite che consente di
-  prevenire eventuali attacchi di \itindex{Denial~of~Service~(DoS)}
-  \textit{Denial of Service} usando i log.\footnote{senza questo limite un
-    attaccante potrebbe inviare ad arte un traffico che generi
-    intenzionalmente messaggi di errore, per saturare il sistema dei log.}
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
+\item[\procrelfile{/proc/sys/net/core}{rmem\_default}] imposta la dimensione
+  di default del buffer di ricezione (cioè per i dati in ingresso) dei socket.
+\item[\procrelfile{/proc/sys/net/core}{rmem\_max}] imposta la dimensione
+  massima che si può assegnare al buffer di ricezione dei socket attraverso
+  l'uso dell'opzione \const{SO\_RCVBUF}.
+\item[\procrelfile{/proc/sys/net/core}{wmem\_default}] imposta la dimensione
+  di default del buffer di trasmissione (cioè per i dati in uscita) dei
+  socket.
+\item[\procrelfile{/proc/sys/net/core}{wmem\_max}] imposta la dimensione
+  massima che si può assegnare al buffer di trasmissione dei socket attraverso
+  l'uso dell'opzione \const{SO\_SNDBUF}.
+\item[\procrelfile{/proc/sys/net/core}{message\_cost},
+  \procrelfile{/proc/sys/net/core}{message\_burst}] contengono le impostazioni
+  del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione
+  di messaggi di avviso da parte del kernel per eventi relativi a problemi
+  sulla rete, imponendo un limite che consente di prevenire eventuali attacchi
+  di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i
+  log.\footnote{senza questo limite un attaccante potrebbe inviare ad arte un
+    traffico che generi intenzionalmente messaggi di errore, per saturare il
+    sistema dei log.}
 
   Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico
   che permette di impostare dei limiti di flusso su una quantità\footnote{uno
-    analogo viene usato nel \index{netfilter} \textit{netfilter} per imporre
+    analogo viene usato nel \itindex{netfilter} \textit{netfilter} per imporre
     dei limiti sul flusso dei pacchetti.}  senza dovere eseguire medie
   temporali, che verrebbero a dipendere in misura non controllabile dalla
   dimensione dell'intervallo su cui si media e dalla distribuzione degli
@@ -4008,42 +4078,46 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
   emissione (verranno accettati inizialmente fino ad un massimo di
   \texttt{message\_cost/message\_burst} messaggi).
 
-\item[\texttt{netdev\_max\_backlog}] numero massimo di pacchetti che possono
-  essere contenuti nella coda di ingresso generale.
+\item[\procrelfile{/proc/sys/net/core}{netdev\_max\_backlog}] numero massimo
+  di pacchetti che possono essere contenuti nella coda di ingresso generale.
 
-\item[\texttt{optmem\_max}] lunghezza massima dei dati ancillari e di
-  controllo (vedi sez.~\ref{sec:net_ancillary_data}).
+\item[\procrelfile{/proc/sys/net/core}{optmem\_max}] lunghezza massima dei
+  dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
 Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri
 file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel,
 nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di
 questi però non è documentato:
-\begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}}
-\item[\texttt{dev\_weight}] blocco di lavoro (\textit{work quantum}) dello
-  scheduler di processo dei pacchetti. 
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
+\item[\procrelfile{/proc/sys/net/core}{dev\_weight}] blocco di lavoro
+  (\textit{work quantum}) dello scheduler di processo dei pacchetti.
 
 % TODO da documentare meglio
 
-\item[\texttt{lo\_cong}] valore per l'occupazione della coda di ricezione
-  sotto la quale si considera di avere una bassa congestione.
+\item[\procrelfile{/proc/sys/net/core}{lo\_cong}] valore per l'occupazione
+  della coda di ricezione sotto la quale si considera di avere una bassa
+  congestione.
 
-\item[\texttt{mod\_cong}] valore per l'occupazione della coda di ricezione
-  sotto la quale si considera di avere una congestione moderata.
+\item[\procrelfile{/proc/sys/net/core}{mod\_cong}] valore per l'occupazione
+  della coda di ricezione sotto la quale si considera di avere una congestione
+  moderata.
 
-\item[\texttt{no\_cong}] valore per l'occupazione della coda di ricezione
-  sotto la quale si si considera di non avere congestione.
+\item[\procrelfile{/proc/sys/net/core}{no\_cong}] valore per l'occupazione
+  della coda di ricezione sotto la quale si considera di non avere
+  congestione.
 
-\item[\texttt{no\_cong\_thresh}] valore minimo (\textit{low water mark}) per
-  il riavvio dei dispositivi congestionati.
+\item[\procrelfile{/proc/sys/net/core}{no\_cong\_thresh}] valore minimo
+  (\textit{low water mark}) per il riavvio dei dispositivi congestionati.
 
-%\item[\texttt{netdev\_fastroute}] è presente soltanto quando si è compilato il
-%  kernel con l'apposita opzione di ottimizzazione per l'uso come router (.
+  % \item[\procrelfile{/proc/sys/net/core}{netdev\_fastroute}] è presente
+  %   soltanto quando si è compilato il kernel con l'apposita opzione di
+  %   ottimizzazione per l'uso come router.
 
-\item[\texttt{somaxconn}] imposta la dimensione massima del \textit{backlog}
-  della funzione \func{listen} (vedi sez.~\ref{sec:TCP_func_listen}), e
-  corrisponde al valore della costante \const{SOMAXCONN}; il suo valore di
-  default è 128.
+\item[\procrelfile{/proc/sys/net/core}{somaxconn}] imposta la dimensione
+  massima utilizzabile per il \textit{backlog} della funzione \func{listen}
+  (vedi sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della
+  costante \const{SOMAXCONN}; il suo valore di default è 128.
 
 \end{basedescript}
 
@@ -4058,203 +4132,490 @@ vengono usati all'interno di quest'ultimo (come ICMP, TCP e UDP) o a fianco
 dello stesso (come ARP).
 
 I file che consentono di controllare le caratteristiche specifiche del
-protocollo IP in quanto tale, descritti anche nella pagina di manuale
-accessibile con \texttt{man 7 ip}, sono i seguenti:
-\begin{basedescript}{\desclabelwidth{3.5cm}\desclabelstyle{\nextlinelabel}}
-
-\item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL
-  (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti, stabilendo
-  così il numero massimo di router che i pacchetti possono attraversare. Il
-  valore può essere modificato anche per il singolo socket con l'opzione
-  \const{IP\_TTL}.  Prende un valore intero, ma dato che il campo citato è di
-  8 bit hanno senso solo valori fra 0 e 255. Il valore di default è 64, e non
-  ci normalmente non c'è nessuna necessità di modificarlo,\footnote{l'unico
-    motivo sarebbe per raggiungere macchine estremamente ``{lontane}'' in
-    termini di \textit{hop}, ma è praticamente } aumentare il valore è una
-  pratica poco gentile, in quanto in caso di problemi di routing si allunga
-  inutilmente il numero di ritrasmissioni.
-  
-
-\item[\texttt{ip\_forward}] abilita l'inoltro dei pacchetti da una interfaccia
-  ad un altra, e può essere impostato anche per la singola interfaccia. Prende
-  un valore logico (0 disabilita, diverso da zero abilita).
-
-\item[\texttt{ip\_dynaddr}] Abilita la riscrittura automatica degli indirizzi
-  associati ad un socket quando una interfaccia cambia indirizzo. Viene usato
-  per le interfacce usate nei collegamenti in dial-up, il cui indirizzo IP
-  viene assegnato dinamicamente dal provider, e può essere modificato. Un
-  valore nullo disabilita la funzionalità, con 1 la si abilita, con 2 la si
-  abilità in modalità \textsl{prolissa}.
-
-\item[\texttt{ip\_autoconfig}] Specifica se l'indirizzo IP è stato configurato
-  automaticamente via DHCP, BOOTP o RARP.
-
-\item[\texttt{ip\_local\_port\_range}] imposta l'intervallo dei valori usati
-  per l'assegnazione delle porte effimere, permette cioè di modificare i
-  valori illustrati in fig.~\ref{fig:TCP_port_alloc}; prende due valori
-  numerici, che indicano gli estremi dell'intervallo. Si abbia cura di non
-  definire un intervallo che si sovrappone a quello delle porte usate per il
+protocollo IP in quanto tale, che sono descritti anche nella relativa pagina
+di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_default\_ttl}] imposta il valore di
+  default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i
+  pacchetti uscenti, stabilendo così il numero massimo di router che i
+  pacchetti possono attraversare. Il valore può essere modificato anche per il
+  singolo socket con l'opzione \const{IP\_TTL}.  Prende un valore intero, ma
+  dato che il campo citato è di 8 bit hanno senso solo valori fra 0 e 255. Il
+  valore di default è 64, e normalmente non c'è nessuna necessità di
+  modificarlo.\footnote{l'unico motivo sarebbe per raggiungere macchine
+    estremamente ``{lontane}'' in termini di \textit{hop}, ma è praticamente
+    impossibile trovarne.} Aumentare il valore è una pratica poco gentile, in
+  quanto in caso di problemi di routing si allunga inutilmente il numero di
+  ritrasmissioni.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_forward}] abilita l'inoltro dei
+  pacchetti da una interfaccia ad un altra, e può essere impostato anche per
+  la singola interfaccia. Prende un valore logico (0 disabilita, diverso da
+  zero abilita), di default è disabilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_dynaddr}] abilita la riscrittura
+  automatica degli indirizzi associati ad un socket quando una interfaccia
+  cambia indirizzo. Viene usato per le interfacce usate nei collegamenti in
+  dial-up, il cui indirizzo IP viene assegnato dinamicamente dal provider, e
+  può essere modificato. Prende un valore intero, con 0 si disabilita la
+  funzionalità, con 1 la si abilita, con 2 (o con qualunque altro valore
+  diverso dai precedenti) la si abilità in modalità \textsl{prolissa}; di
+  default la funzionalità è disabilitata.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_autoconfig}] specifica se
+  l'indirizzo IP è stato configurato automaticamente dal kernel all'avvio
+  attraverso DHCP, BOOTP o RARP. Riporta un valore logico (0 falso, 1 vero)
+  accessibile solo in lettura, è inutilizzato nei kernel recenti ed eliminato
+  a partire dal kernel 2.6.18.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_local\_port\_range}] imposta
+  l'intervallo dei valori usati per l'assegnazione delle porte effimere,
+  permette cioè di modificare i valori illustrati in
+  fig.~\ref{fig:TCP_port_alloc}; prende due valori interi separati da spazi,
+  che indicano gli estremi dell'intervallo. Si abbia cura di non definire un
+  intervallo che si sovrappone a quello delle porte usate per il
   \itindex{masquerading} \textit{masquerading}, il kernel può gestire la
   sovrapposizione, ma si avrà una perdita di prestazioni. Si imposti sempre un
   valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare
   conflitti con le porte usate dai servizi noti.
 
-\item[\texttt{ip\_no\_pmtu\_disc}] imposta la disciplina di ricerca della
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_no\_pmtu\_disc}] permette di
+  disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della
   \itindex{Maximum~Transfer~Unit} \textit{Path MTU} (vedi
-  sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}).
-
-\item[\texttt{ipfrag\_high\_thresh}] limite massimo (espresso in numero di
-  byte) sui pacchetti IP frammentati presenti in coda; quando questo valore
-  viene raggiunta la coda viene ripulita fino al valore
-  \texttt{ipfrag\_low\_thresh}.
-
-\item[\texttt{ipfrag\_low\_thresh}] soglia bassa (specificata in byte) cui
-  viene riportata la coda dei pacchetti IP frammentati quando si raggiunge il
-  valore \texttt{ipfrag\_high\_thresh}.
-
-\item[\texttt{ip\_always\_defrag}] se abilitato (prende un intero come valore
-  logico) tutti i pacchetti IP frammentati saranno riassemblati, anche in caso
-  in successivo immediato inoltro.\footnote{introdotto con il kernel 2.2.13,
-    nelle versioni precedenti questo comportamento poteva essere solo in fase
-    di compilazione del kernel con l'opzione
-    \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
-
-\item[\texttt{ip\_nonlocal\_bind}] se abilitato (prende un intero come valore
-  logico) è possibile che una applicazione possa collegarsi (con \func{bind}
-  su un indirizzo non locale. Questo può risultare utile per applicazioni
-  particolari (come gli \textit{sniffer}) che hanno la necessità di ricevere
-  pacchetti anche non diretti agli indirizzi presenti sulla macchina, ad
-  esempio per intercettare il traffico per uno specifico indirizzo che si
-  vuole tenere sotto controllo.
+  sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}). Prende un
+  valore logico, e di default è disabilitato (cioè la ricerca viene eseguita).
+
+  In genere si abilita questo parametro quando per qualche motivo il
+  procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery}
+  fallisce; dato che questo può avvenire a causa di router\footnote{ad
+    esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato
+    anche in sez.~1.4.4 di \cite{FwGL}.} o interfacce\footnote{ad esempio se i
+    due capi di un collegamento \textit{point-to-point} non si accordano sulla
+    stessa MTU.}  mal configurate è opportuno correggere le configurazioni,
+  perché disabilitare globalmente il procedimento con questo parametro ha
+  pesanti ripercussioni in termini di prestazioni di rete.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_always\_defrag}] fa si che tutti i
+  pacchetti IP frammentati siano riassemblati, anche in caso in successivo
+  immediato inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni
+    precedenti questo comportamento poteva essere solo stabilito un volta per
+    tutte in fase di compilazione del kernel con l'opzione
+    \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} Prende un valore logico e di default
+  è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione
+  viene attivata automaticamente quando si utilizza il sistema del
+  \itindex{netfilter} \textit{netfilter}, e questo parametro non è più
+  presente.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_high\_thresh}] indica il limite
+  massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
+  in coda; quando questo valore viene raggiunta la coda viene ripulita fino al
+  valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
+  (specificata in byte) a cui viene riportata la coda dei pacchetti IP
+  frammentati quando si raggiunge il valore massimo dato da 
+  \texttt{ipfrag\_high\_thresh}. Prende un valore intero.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
+  possibile ad una applicazione eseguire \func{bind} anche su un indirizzo che
+  non è presente su nessuna interfaccia locale. Prende un valore logico e di
+  default è disabilitato.
+
+  Questo può risultare utile per applicazioni particolari (come gli
+  \textit{sniffer}) che hanno la necessità di ricevere pacchetti anche non
+  diretti agli indirizzi presenti sulla macchina, ad esempio per intercettare
+  il traffico per uno specifico indirizzo che si vuole tenere sotto
+  controllo. Il suo uso però può creare problemi ad alcune applicazioni.
 
 % \item[\texttt{neigh/*}] La directory contiene i valori 
 % TODO trattare neigh/* nella parte su arp, da capire dove sarà.
+
 \end{basedescript}
 
 I file di \texttt{/proc/sys/net/ipv4} che invece fanno riferimento alle
 caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva
 pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
-\begin{basedescript}{\desclabelwidth{3.9cm}\desclabelstyle{\nextlinelabel}}
-
-\item[\texttt{tcp\_abort\_on\_overflow}] è un valore logico (disabilitato di
-  default) che indica di azzerare le connessioni quando il programma che le
-  riceve è troppo lento ed incapace di accettarle. Questo consente di
-  recuperare le connessioni se si è avuto un eccesso dovuto ad un qualche
-  picco di traffico, ma ovviamente va a discapito dei client che interrogano
-  il server. Pertanto è da abilitare soltanto quando si è sicuri che non è
-  possibile ottimizzare il server in modo che sia in grado di accettare
-  connessioni più rapidamente.
-
-\item[\texttt{tcp\_adv\_win\_scale}] questo valore indica al kernel quanto
-  spazio all'interno del buffer associato a un socket (quello impostato con
-  \texttt{tcp\_rmem}) deve essere utilizzato per la
-
-\item[\texttt{tcp\_app\_win}] 
-
-\item[\texttt{tcp\_bic}]
-\item[\texttt{tcp\_bic\_low\_window}] 
-\item[\texttt{tcp\_bic\_fast\_convergence}] 
-
-\item[\texttt{tcp\_dsack}] Abilita il supporto definito
-  nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884} per il
-  \textit{Duplicate SACK}.\footnote{si indica con SACK (\textit{Selective
-      Acknowledgement}) un'opzione TCP, definita
+\begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_abort\_on\_overflow}] indica al
+  kernel di azzerare le connessioni quando il programma che le riceve è troppo
+  lento ed incapace di accettarle. Prende un valore logico ed è disabilitato
+  di default.  Questo consente di recuperare le connessioni se si è avuto un
+  eccesso dovuto ad un qualche picco di traffico, ma ovviamente va a discapito
+  dei client che interrogano il server. Pertanto è da abilitare soltanto
+  quando si è sicuri che non è possibile ottimizzare il server in modo che sia
+  in grado di accettare connessioni più rapidamente.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel
+  quale frazione del buffer associato ad un socket\footnote{quello impostato
+    con \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}.} deve essere utilizzata
+  per la finestra del protocollo TCP\footnote{in sostanza il valore che
+    costituisce la \itindex{advertised~window} \textit{advertised window}
+    annunciata all'altro capo del socket.} e quale come buffer applicativo per
+  isolare la rete dalle latenze dell'applicazione.  Prende un valore intero
+  che determina la suddetta frazione secondo la formula
+  $\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se positivo o con
+  $\texttt{buffer}-\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se
+  negativo.  Il default è 2 che significa che al buffer dell'applicazione
+  viene riservato un quarto del totale.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_app\_win}] indica la frazione
+  della finestra TCP che viene riservata per gestire l'overhaed dovuto alla
+  bufferizzazione. Prende un valore valore intero che consente di calcolare la
+  dimensione in byte come il massimo fra la \itindex{Maximum~Segment~Size}
+  MSS e $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa
+  che non viene riservato nessuno spazio; il valore di default è 31.
+
+% vecchi, presumibilmente usati quando gli algoritmi di congestione non erano
+% modularizzabili 
+% \item[\texttt{tcp\_bic}]
+% \item[\texttt{tcp\_bic\_low\_window}] 
+% \item[\texttt{tcp\_bic\_fast\_convergence}] 
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_dsack}] abilita il supporto,
+  definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}, per il
+  cosiddetto \textit{Duplicate SACK}.\footnote{si indica con SACK
+    (\textit{Selective Acknowledgement}) un'opzione TCP, definita
     nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}, usata per dare
-    un \textit{acknowledgement} unico su blocchi di pacchetti non contigui.}
-
-\item[\texttt{tcp\_ecn}] Abilita il meccanismo della \textit{Explicit
-    Congestion Notification} (o ECN) definito
-  nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}. Si tenga presente
-  che se si abilita questa opzione si possono avere dei malfunzionamenti
-  apparentemente casuali dipendenti dalla destinazione, dovuti al fatto che
-  alcuni vecchi router non supportano il meccanismo ed alla sua attivazione
-  scartano i relativi pacchetti.\\
-
-\item[\texttt{tcp\_fack}] 
-
-\item[\texttt{tcp\_fin\_timeout}] specifica il numero di secondi (il default è
-  60\footnote{nei kernel della serie 2.2.x era invece di 120 secondi.}) da
-  passare in stato \texttt{FIN\_WAIT2} nell'attesa delle ricezione del
-  pacchetto FIN conclusivo, passati quali il socket viene comunque chiuso
-  forzatamente.  L'uso di questa opzione realizza quella che in sostanza è una
-  violazione delle specifiche del protocollo TCP, ma è utile per fronteggiare
-  alcuni attacchi di \itindex{Denial~of~Service~(DoS)} \textit{Denial of
-    Service}.
-
-
-\item[\texttt{tcp\_frto}] 
-\item[\texttt{tcp\_keepalive\_intvl}] 
-\item[\texttt{tcp\_keepalive\_probes}] 
-\item[\texttt{tcp\_keepalive\_time}] 
-\item[\texttt{tcp\_low\_latency}] 
-\item[\texttt{tcp\_max\_orphans}] 
-
-\item[\texttt{tcp\_max\_syn\_backlog}] un numero intero che indica la
+    un \textit{acknowledgement} unico su blocchi di pacchetti non contigui,
+    che consente di diminuire il numero di pacchetti scambiati.} Prende un
+  valore logico e di default è abilitato.
+% TODO documentare o descrivere che cos'è il Duplicate SACK o
+% mettere riferimento nelle appendici
+
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_ecn}] abilita il meccanismo della
+  \textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni
+  TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit
+    Congestion Notification} \itindex{Explicit~Congestion~Notification} è un
+  meccanismo che consente di notificare quando una rotta o una rete è
+  congestionata da un eccesso di traffico,\footnote{il meccanismo è descritto
+    in dettaglio nell'\href{http://www.ietf.org/rfc/rfc3168.txt}{RFC~3168}
+    mentre gli effetti sulle prestazioni del suo utilizzo sono documentate
+    nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}.} si può così
+  essere avvisati e cercare rotte alternative oppure diminuire l'emissione di
+  pacchetti (in modo da non aumentare la congestione).
+
+  Si tenga presente che se si abilita questa opzione si possono avere dei
+  malfunzionamenti apparentemente casuali dipendenti dalla destinazione,
+  dovuti al fatto che alcuni vecchi router non supportano il meccanismo ed
+  alla sua attivazione scartano i relativi pacchetti, bloccando completamente
+  il traffico.
+% TODO documentare o descrivere che cos'è l'Explicit Congestion Notification o
+% mettere riferimento nelle appendici
+
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fack}] abilita il supporto per il
+  \textit{TCP Forward Acknowledgement}, un algoritmo per il controllo della
+  congestione del traffico. Prende un valore logico e di default è abilitato.
+
+% TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement o
+% mettere riferimento nelle appendici
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_fin\_timeout}] specifica il numero
+  di secondi da passare in stato \texttt{FIN\_WAIT2} nell'attesa delle
+  ricezione del pacchetto FIN conclusivo, passati quali il socket viene
+  comunque chiuso forzatamente.  Prende un valore intero che indica i secondi
+  e di default è 60.\footnote{nei kernel della serie 2.2.x era il valore
+    utilizzato era invece di 120 secondi.} L'uso di questa opzione realizza
+  quella che in sostanza è una violazione delle specifiche del protocollo TCP,
+  ma è utile per fronteggiare alcuni attacchi di
+  \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_frto}] abilita il supporto per
+  l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timeout del
+  protocollo TCP, che diventa molto utile per le reti wireless dove la perdita
+  di pacchetti è usualmente dovuta a delle interferenze radio, piuttosto che
+  alla congestione dei router. Prende un valore logico e di default è
+  disabilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_intvl}] indica il
+  numero di secondi che deve trascorrere fra l'emissione di due successivi
+  pacchetti di test quando è abilitata la funzionalità del \textit{keepalive}
+  (vedi sez.~\ref{sec:sock_options_main}). Prende un valore intero che di
+  default è 75.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_probes}] indica il
+  massimo numero pacchetti di \textit{keepalive} (vedi
+  sez.~\ref{sec:sock_options_main}) che devono essere inviati senza ricevere
+  risposta prima che il kernel decida che la connessione è caduta e la
+  termini. Prende un valore intero che di default è 9.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_keepalive\_time}] indica il numero
+  di secondi che devono passare senza traffico sulla connessione prima che il
+  kernel inizi ad inviare pacchetti di pacchetti di
+  \textit{keepalive}.\footnote{ha effetto solo per i socket per cui si è
+    impostata l'opzione \const{SO\_KEEPALIVE} (vedi
+    sez.~\ref{sec:sock_options_main}.}  Prende un valore intero che di default
+  è 7200, pari a due ore.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_low\_latency}] indica allo stack
+  TCP del kernel di ottimizzare il comportamento per ottenere tempi di latenza
+  più bassi a scapito di valori più alti per l'utilizzo della banda. Prende un
+  valore logico che di default è disabilitato in quanto un maggior utilizzo
+  della banda è preferito, ma esistono applicazioni particolari in cui la
+  riduzione della latenza è più importante (ad esempio per i cluster di
+  calcolo parallelo) nelle quali lo si può abilitare.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_orphans}] indica il numero
+  massimo di socket TCP ``\textsl{orfani}'' (vale a dire non associati a
+  nessun file descriptor) consentito nel sistema.\footnote{trattasi in genere
+    delle connessioni relative a socket chiusi che non hanno completato il
+    processo di chiusura.}  Quando il limite viene ecceduto la connessione
+  orfana viene resettata e viene stampato un avvertimento. Questo limite viene
+  usato per contrastare alcuni elementari attacchi di \textit{denial of
+    service}.  Diminuire il valore non è mai raccomandato, in certe condizioni
+  di rete può essere opportuno aumentarlo, ma si deve tenere conto del fatto
+  che ciascuna connessione orfana può consumare fino a 64K di memoria del
+  kernel. Prende un valore intero, il valore di default viene impostato
+  inizialmente al valore del parametro del kernel \texttt{NR\_FILE}, e viene
+  aggiustato a seconda della memoria disponibile.
+
+% TODO verificare la spiegazione di connessione orfana.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_syn\_backlog}] indica la
   lunghezza della coda delle connessioni incomplete, cioè delle connessioni
   per le quali si è ricevuto un SYN di richiesta ma non l'ACK finale del
   \itindex{three~way~handshake} \textit{three way handshake} (si riveda quanto
-  illustrato in sez.\ref{sec:TCP_func_listen}).
+  illustrato in sez.~\ref{sec:TCP_func_listen}).
 
   Quando questo valore è superato il kernel scarterà immediatamente ogni
-  ulteriore richiesta di connessione. Il valore di default (che è 256) viene
-  automaticamente portato a 1024 qualora nel sistema ci sia sufficiente
-  memoria (se maggiore di 128Mb) e ridotto a 128 qualora la memoria sia poca
-  (inferiore a 32Mb).\footnote{si raccomanda, qualora si voglia aumentare il
-    valore oltre 1024, di seguire la procedura citata nella pagina di manuale
-    di TCP, e modificare il valore della costante \texttt{TCP\_SYNQ\_HSIZE}
-    nel file \texttt{include/net/tcp.h} dei sorgenti del kernel, in modo che
-    sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$,
-    per poi ricompilare il kernel.}
-
-\item[\texttt{tcp\_max\_tw\_buckets}] 
-\item[\texttt{tcp\_mem}] 
-\item[\texttt{tcp\_orphan\_retries}] 
-\item[\texttt{tcp\_reordering}] 
-\item[\texttt{tcp\_retrans\_collapse}] 
-
-\item[\texttt{tcp\_retries1}] imposta il massimo numero di volte che
-  protocollo tenterà la ritrasmissione si un pacchetto su una connessione
-  stabilita prima di fare ricorso ad ulteriori sforzi che coinvolgano anche il
-  livello di rete. Passato questo numero di ritrasmissioni verrà fatto
-  eseguire al livello di rete un tentativo di aggiornamento della rotta verso
-  la destinazione prima di eseguire ogni successiva ritrasmissione.
-
-\item[\texttt{tcp\_retries2}] imposta il numero di tentativi di ritrasmissione
-  di un pacchetto inviato su una connessione già stabilita per il quale non si
-  sia ricevuto una risposta di ACK (si veda anche quanto illustrato in
-  sez.~\ref{sec:TCP_server_crash}). Il valore default è 15, che significa un
-  tempo variabile fra 13 e 30 minuti; questo non corrisponde a quanto
-  richiesto nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è
-  indicato un massimo di 100 secondi, che però è un valore considerato troppo
-  basso.
-
-
-\item[\texttt{tcp\_rfc1337}] 
-
-\item[\texttt{tcp\_rmem}] 
-
-
-\item[\texttt{tcp\_sack}] 
-\item[\texttt{tcp\_stdurg}] 
-\item[\texttt{tcp\_synack\_retries}] 
-\item[\texttt{tcp\_syncookies}] 
-
-\item[\texttt{tcp\_syn\_retries}] imposta il numero di tentativi (il default è
-  5) di ritrasmissione dei pacchetti SYN di inizio connessione del
+  ulteriore richiesta di connessione. Prende un valore intero; il default, che
+  è 256, viene automaticamente portato a 1024 qualora nel sistema ci sia
+  sufficiente memoria (se maggiore di 128Mb) e ridotto a 128 qualora la
+  memoria sia poca (inferiore a 32Mb).\footnote{si raccomanda, qualora si
+    voglia aumentare il valore oltre 1024, di seguire la procedura citata
+    nella pagina di manuale di TCP, e modificare il valore della costante
+    \texttt{TCP\_SYNQ\_HSIZE} nel file \texttt{include/net/tcp.h} dei sorgenti
+    del kernel, in modo che sia $\mathtt{tcp\_max\_syn\_backlog} \ge
+    \mathtt{16*TCP\_SYNQ\_HSIZE}$, per poi ricompilare il kernel.}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_max\_tw\_buckets}] indica il
+  numero massimo di socket in stato \texttt{TIME\_WAIT} consentito nel
+  sistema. Prende un valore intero di default è impostato al doppio del valore
+  del parametro \texttt{NR\_FILE}, ma che viene aggiustato automaticamente a
+  seconda della memoria presente. Se il valore viene superato il socket viene
+  chiuso con la stampa di un avviso; l'uso di questa funzionalità consente di
+  prevenire alcuni semplici attacchi di \textit{denial of service}.
+  
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_mem}] viene usato dallo stack TCP
+  per gestire le modalità con cui esso utilizzerà la memoria. Prende una
+  tripletta di valori interi, che indicano un numero di pagine:
+
+  \begin{itemize*}
+  \item il primo valore, chiamato \textit{low} nelle pagine di manuale, indica
+    il numero di pagine allocate sotto il quale non viene usato nessun
+    meccanismo di regolazione dell'uso della memoria.
+
+  \item il secondo valore, chiamato \textit{pressure} indica il numero di
+    pagine allocate passato il quale lo stack TCP inizia a moderare il suo
+    consumo di memoria; si esce da questo stato di \textsl{pressione} sulla
+    memoria quando il numero di pagine scende sotto il precedente valore
+    \textit{low}.
+
+  \item il terzo valore, chiamato \textit{high} indica il numero massimo di
+    pagine che possono essere utilizzate dallo stack TCP/IP, e soprassiede
+    ogni altro valore specificato dagli altri limiti del kernel.
+  \end{itemize*}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_orphan\_retries}] indica il numero
+  massimo di volte che si esegue un tentativo di controllo sull'altro capo di
+  una connessione che è stata già chiusa dalla nostra parte. Prende un valore
+  intero che di default è 8.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_reordering}] indica il numero
+  massimo di volte che un pacchetto può essere riordinato nel flusso di dati,
+  prima che lo stack TCP assuma che è andato perso e si ponga nello stato di
+  \textit{slow start} (si veda sez.~\ref{sec:tcp_protocol_xxx}) viene usata
+  questa metrica di riconoscimento dei riordinamenti per evitare inutili
+  ritrasmissioni provocate dal riordinamento. Prende un valore intero che di
+  default che è 3, e che non è opportuno modificare.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retrans\_collapse}] in caso di
+  pacchetti persi durante una connessione, per ottimizzare l'uso della banda
+  il kernel cerca di eseguire la ritrasmissione inviando pacchetti della
+  massima dimensione possibile; in sostanza dati che in precedenza erano stati
+  trasmessi su pacchetti diversi possono essere ritrasmessi riuniti su un solo
+  pacchetto (o su un numero minore di pacchetti di dimensione
+  maggiore). Prende un valore logico e di default è abilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries1}] imposta il massimo
+  numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su
+  una connessione stabilita prima di fare ricorso ad ulteriori sforzi che
+  coinvolgano anche il livello di rete. Passato questo numero di
+  ritrasmissioni verrà fatto eseguire al livello di rete un tentativo di
+  aggiornamento della rotta verso la destinazione prima di eseguire ogni
+  successiva ritrasmissione. Prende un valore intero che di default è 3.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_retries2}] imposta il numero di
+  tentativi di ritrasmissione di un pacchetto inviato su una connessione già
+  stabilita per il quale non si sia ricevuto una risposta di ACK (si veda
+  anche quanto illustrato in sez.~\ref{sec:TCP_server_crash}). Prende un
+  valore intero che di default è 15, il che comporta un tempo variabile fra 13
+  e 30 minuti; questo non corrisponde a quanto richiesto
+  nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un
+  massimo di 100 secondi, che però è un valore considerato troppo basso.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] indica al kernel di
+  abilitare il comportamento richiesto
+  nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore
+  logico e di default è disabilitato, il che significa che alla ricezione di
+  un segmento RST in stato \texttt{TIME\_WAIT} il socket viene chiuso
+  immediatamente senza attendere la conclusione del periodo di
+  \texttt{TIME\_WAIT}.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP
+  per controllare dinamicamente le dimensioni dei propri buffer di ricezione,
+  anche in rapporto alla memoria disponibile.  Prende una tripletta di valori
+  interi separati da spazi che indicano delle dimensioni in byte:
+
+  \begin{itemize}
+  \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica
+    la dimensione minima in byte del buffer di ricezione; il default è 4Kb, ma
+    in sistemi con poca memoria viene automaticamente ridotto a
+    \const{PAGE\_SIZE}.  Questo valore viene usato per assicurare che anche in
+    situazioni di pressione sulla memoria (vedi quanto detto per
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) le allocazioni al di sotto di
+    questo limite abbiamo comunque successo.  Questo valore non viene comunque
+    ad incidere sulla dimensione del buffer di ricezione di un singolo socket
+    dichiarata con l'opzione \const{SO\_RCVBUF}.
+
+  \item il secondo valore, denominato \textit{default} nelle pagine di
+    manuale, indica la dimensione di default, in byte, del buffer di ricezione
+    di un socket TCP.  Questo valore sovrascrive il default iniziale impostato
+    per tutti i socket con \procfile{/proc/sys/net/core/mem\_default} che vale
+    per qualunque protocollo. Il default è 87380 byte, ridotto a 43689 per
+    sistemi con poca memoria. Se si desiderano dimensioni più ampie per tutti
+    i socket si può aumentare questo valore, ma se si vuole che in
+    corrispondenza aumentino anche le dimensioni usate per la finestra TCP si
+    deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling}
+    (di default è abilitato, vedi più avanti
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}).
+
+  \item il terzo valore, denominato \textit{max} nelle pagine di manuale,
+    indica la dimensione massima in byte del buffer di ricezione di un socket
+    TCP; il default è 174760 byte, che viene ridotto automaticamente a 87380
+    per sistemi con poca memoria. Il valore non può comunque eccedere il
+    limite generale per tutti i socket posto con
+    \procfile{/proc/sys/net/core/rmem\_max}. Questo valore non viene ad
+    incidere sulla dimensione del buffer di ricezione di un singolo socket
+    dichiarata con l'opzione \const{SO\_RCVBUF}.
+  \end{itemize}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] indica al kernel di
+  utilizzare il meccanismo del \textit{TCP selective acknowledgement} definito
+  nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}. Prende un valore
+  logico e di default è abilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_stdurg}] indica al kernel di
+  utilizzare l'interpretazione che viene data
+  dall'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} del puntatore dei
+  \textit{dati urgenti} (vedi sez.~\ref{sec:TCP_urgent_data}) in cui questo
+  punta all'ultimo byte degli stessi; se disabilitato viene usata
+  l'interpretazione usata da BSD per cui esso punta al primo byte successivo.
+  Prende un valore logico e di default è disabilitato, perché abilitarlo può
+  dar luogo a problemi di interoperabilità.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_synack\_retries}] indica il numero
+  massimo di volte che verrà ritrasmesso il segmento SYN/ACK nella creazione di
+  una connessione (vedi sez.~\ref{sec:TCP_conn_cre}). Prende un valore intero
+  ed il valore di default è 5; non si deve superare il valore massimo di 255.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP
+    syncookies}.\footnote{per poter usare questa funzionalità è necessario
+    avere abilitato l'opzione \texttt{CONFIG\_SYN\_COOKIES} nella compilazione
+    del kernel.} Prende un valore logico, e di default è disabilitato. Questa
+  funzionalità serve a fornire una protezione in caso di un attacco di tipo
+  \index{SYN~flood} \textit{SYN flood}, e deve essere utilizzato come ultima
+  risorsa dato che costituisce una violazione del protocollo TCP e confligge
+  con altre funzionalità come le estensioni e può causare problemi per i
+  client ed il reinoltro dei pacchetti.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_syn\_retries}] imposta il numero
+  di tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del
   \itindex{three~way~handshake} \textit{three way handshake} (si ricordi
-  quanto illustrato in sez.\ref{sec:TCP_func_connect}). Il valore non deve
-  superare 255. 
+  quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Prende un valore
+  intero che di default è 5; non si deve superare il valore massimo di 255.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_timestamps}] abilita l'uso dei
+  \textit{TCP timestamps}, come definiti
+  nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
+  logico e di default è abilitato.
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_recycle}] abilita il
+  riutilizzo rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore
+  logico e di default è disabilitato. Non è opportuno abilitare questa opzione
+  che può causare problemi con il NAT.\footnote{il \textit{Network Address
+      Translation} è una tecnica, impiegata nei firewall e nei router, che
+    consente di modificare al volo gli indirizzi dei pacchetti che transitano
+    per una macchina, Linux la supporta con il \itindex{netfilter}
+    \textit{netfilter}, per maggiori dettagli si consulti il cap.~2 di
+    \cite{FwGL}.}
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
+  dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista
+  del protocollo. Prende un valore logico e di default è disabilitato. 
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}] un valore
+  logico, attivo di default, che abilita la funzionalità del
+  \itindex{TCP~window~scaling} \textit{TCP window scaling} definita
+  dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
+  logico e di default è abilitato. Come accennato in
+  sez.~\ref{sec:TCP_TCP_opt} i 16 bit della finestra TCP comportano un limite
+  massimo di dimensione di 64Kb, ma esiste una opportuna opzione del
+  protocollo che permette di applicare un fattore di scale che consente di
+  aumentarne le dimensioni. Questa è pienamente supportata dallo stack TCP di
+  Linux, ma se lo si disabilita la negoziazione del
+  \itindex{TCP~window~scaling} \textit{TCP window scaling} con l'altro capo
+  della connessione non viene effettuata.
+
+%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_vegas\_cong\_avoid}] 
+% TODO: controllare su internet
+
+%\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_westwood}] 
+% TODO: controllare su internet
+
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP
+  per controllare dinamicamente le dimensioni dei propri buffer di spedizione,
+  adeguandole in rapporto alla memoria disponibile.  Prende una tripletta di
+  valori interi separati da spazi che indicano delle dimensioni in byte:
+
+  \begin{itemize}
+  \item il primo valore, chiamato \textit{min}, indica la dimensione minima in
+    byte del buffer di spedizione; il default è 4Kb. Come per l'analogo di
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) viene usato per assicurare
+    che anche in situazioni di pressione sulla memoria (vedi
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_mem}) le allocazioni al di sotto di
+    questo limite abbiamo comunque successo.  Di nuovo questo valore non viene
+    ad incidere sulla dimensione del buffer di trasmissione di un singolo
+    socket dichiarata con l'opzione \const{SO\_SNDBUF}.
+
+  \item il secondo valore, denominato \textit{default}, indica la dimensione
+    di default in byte del buffer di spedizione di un socket TCP.  Questo
+    valore sovrascrive il default iniziale impostato per tutti i tipi di
+    socket con \procfile{/proc/sys/net/core/wmem\_default}. Il default è 87380
+    byte, ridotto a 43689 per sistemi con poca memoria. Si può aumentare
+    questo valore quando si desiderano dimensioni più ampie del buffer di
+    trasmissione per i socket TCP, ma come per il precedente
+    \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) se si vuole che in
+    corrispondenza aumentino anche le dimensioni usate per la finestra TCP si
+    deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling}
+    con \procrelfile{/proc/sys/net/ipv4}{tcp\_window\_scaling}.
+
+  \item il terzo valore, denominato \textit{max}, indica la dimensione massima
+    in byte del buffer di spedizione di un socket TCP; il default è 128Kb, che
+    viene ridotto automaticamente a 64Kb per sistemi con poca memoria. Il
+    valore non può comunque eccedere il limite generale per tutti i socket
+    posto con \procfile{/proc/sys/net/core/wmem\_max}. Questo valore non viene
+    ad incidere sulla dimensione del buffer di trasmissione di un singolo
+    socket dichiarata con l'opzione \const{SO\_SNDBUF}.
+  \end{itemize}
 
-\item[\texttt{tcp\_timestamps}] 
-\item[\texttt{tcp\_tw\_recycle}] 
-\item[\texttt{tcp\_tw\_reuse}] 
-\item[\texttt{tcp\_window\_scaling}] 
+\end{basedescript}
 
 
-\item[\texttt{tcp\_vegas\_cong\_avoid}] 
-\item[\texttt{tcp\_westwood}] 
-\item[\texttt{tcp\_wmem}] 
-\end{basedescript}
 
 % LocalWords:  socket sez dotted decimal resolver Domain Name Service cap DNS
 % LocalWords:  client fig LDAP Lightweight Access Protocol NIS Information Sun
@@ -4326,15 +4687,18 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % LocalWords:  abort overflow adv win app bic convergence dsack ecn fack frto
 % LocalWords:  intvl probes latency orphans l'ACK SYNQ HSIZE tw buckets mem rfc
 % LocalWords:  orphan reordering collapse sack stdurg synack syncookies recycle
-% LocalWords:  timestamps scaling vegas avoid westwood tcpi l'incapsulazione
+% LocalWords:  timestamps scaling vegas avoid westwood tcpi l'incapsulazione NR
 % LocalWords:  metric EOPNOTSUPP mtu hwaddr ARPHRD interrupt DMA map qlen silly
 % LocalWords:  rename ifconf syndrome dell'ACK FTP ACCEPTFILTER advanced reno
 % LocalWords:  congestion control Networking cubic CUBIC highspeed HSTCP htcp
-% LocalWords:  HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa
+% LocalWords:  HTCP hybla HYBLA scalable SCALABLE ifc req iflist access ntoa Kb
+% LocalWords:  hop Selective acknowledgement Explicit RTO stack firewall passwd
+% LocalWords:  Notification wireless denial pressure ATTACH DETACH publickey
+% LocalWords:  libpcap discovery point l'overhaed min PAGE flood NFS blast
+% LocalWords:  selective COOKIES NAT Translation
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-% LocalWords:  hop Selective Acknowledgement acknowledgement Explicit
-% LocalWords:  Notification
+