Aggiornamento data copyright
[gapil.git] / sockctrl.tex
index a1f5d8be3e2497085a63db0678e424691518f3b6..09d02506de1797da1925ac59ed71fafbe6663dd3 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2007 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",
@@ -50,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}
@@ -145,15 +145,17 @@ 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{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
                         scheda di rete.\\ 
     \texttt{hosts}    & Corrispondenze fra nome a dominio e numero IP.\\ 
-    \texttt{netgroup} & Corrispondenze gruppo di rete e macchine che lo
+    \texttt{netgroup} & Corrispondenze fra gruppo di rete e macchine che lo
                         compongono.\\  
     \texttt{networks} & Corrispondenze fra nome di una rete e suo indirizzo
                         IP.\\  
@@ -161,6 +163,8 @@ tab.~\ref{tab:sys_NSS_classes}.
                         numero identificativo.\\ 
     \texttt{rpc}      & Corrispondenze fra nome di un servizio RPC e relativo 
                         numero identificativo.\\ 
+    \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
@@ -170,6 +174,8 @@ tab.~\ref{tab:sys_NSS_classes}.
   \label{tab:sys_NSS_classes}
 \end{table}
 
+% 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
@@ -227,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
@@ -323,7 +329,9 @@ comportamento del \textit{resolver}.
     \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\_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
@@ -537,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
@@ -565,7 +573,7 @@ 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
@@ -727,41 +735,41 @@ 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
@@ -773,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 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 puntatori) e copiare anche i
-  dati da questi referenziati.}
+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 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}
@@ -829,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
@@ -954,7 +962,7 @@ 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
@@ -1003,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
@@ -1018,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
@@ -1043,22 +1052,23 @@ colonna.
     \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)}
@@ -1085,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 \conffile{/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
@@ -1114,18 +1125,18 @@ 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)} 
@@ -1181,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}
 
@@ -1213,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
@@ -1254,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
@@ -1322,14 +1333,6 @@ rispettivo protocollo di trasporto (i cui valori possibili sono riportati in
 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
@@ -1376,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
@@ -2316,6 +2328,16 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 % 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}
 
@@ -2574,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,
@@ -2742,6 +2764,8 @@ sono definite in \file{netinet/ip.h}, ed accessibili includendo detto file.
       Imposta il valore del campo TOS.\\
     \const{IP\_TTL}             &$\bullet$&$\bullet$&         &\texttt{int}& 
       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.\\
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
@@ -2858,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
@@ -2875,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
@@ -3124,7 +3169,7 @@ quantit
     \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{sez:tcp_protocol_xxx}).  Il comportamento normale del protocollo
+  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.
@@ -3152,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
@@ -3288,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.
 
@@ -3320,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.}
@@ -3358,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
@@ -3408,28 +3453,28 @@ quantit
       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}
@@ -3955,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:
@@ -3975,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
@@ -4383,7 +4428,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \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{sez:tcp_protocol_xxx}) viene usata
+  \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.
@@ -4413,8 +4458,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   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 allo stack TCP
-  del kernel di abilitare il comportamento richiesto
+\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
@@ -4426,7 +4471,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   anche in rapporto alla memoria disponibile.  Prende una tripletta di valori
   interi separati da spazi che indicano delle dimensioni in byte:
 
-  \begin{itemize*}
+  \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
@@ -4457,7 +4502,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
     \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*}
+  \end{itemize}
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] indica al kernel di
   utilizzare il meccanismo del \textit{TCP selective acknowledgement} definito
@@ -4537,7 +4582,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   adeguandole in rapporto alla memoria disponibile.  Prende una tripletta di
   valori interi separati da spazi che indicano delle dimensioni in byte:
 
-  \begin{itemize*}
+  \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
@@ -4566,7 +4611,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
     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*}
+  \end{itemize}
 
 \end{basedescript}
 
@@ -4647,10 +4692,10 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % 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 Kb
-% LocalWords:  hop Selective acknowledgement Explicit RTO stack firewall
-% LocalWords:  Notification wireless denial pressure ATTACH DETACH
-% LocalWords:  libpcap discovery point l'overhaed min PAGE flood
-% LocalWords:  selective COOKIES NAT
+% 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