Novità del kernel
[gapil.git] / sockctrl.tex
index 3a2afa7b8a466f9a04caa67db9c048eecde84974..7b26d58364a0b2466a6dde3da3d9e2554b397375 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2012 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2014 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",
 %% 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",
@@ -118,7 +118,7 @@ problema dell'ordine in cui questi vengono interrogati.\footnote{con le
   predefinito e non modificabile (a meno di una ricompilazione delle librerie
   stesse).}
 
   predefinito e non modificabile (a meno di una ricompilazione delle librerie
   stesse).}
 
-\itindbeg{Name~Service~Switch}
+\itindbeg{Name~Service~Switch~(NSS)}
 Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
 eseguirà dal \textit{resolver} è stata inclusa all'interno di un meccanismo
 generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi
 Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
 eseguirà dal \textit{resolver} è stata inclusa all'interno di un meccanismo
 generico per la risoluzione di corrispondenze fra nomi ed informazioni ad essi
@@ -200,7 +200,7 @@ quello che conta sono le funzioni classiche che il \textit{resolver} mette a
 disposizione,\footnote{è cura della implementazione fattane nelle \acr{glibc}
   tenere conto della presenza del \textit{Name Service Switch}.} e sono queste
 quelle che tratteremo nelle sezioni successive.
 disposizione,\footnote{è cura della implementazione fattane nelle \acr{glibc}
   tenere conto della presenza del \textit{Name Service Switch}.} e sono queste
 quelle che tratteremo nelle sezioni successive.
-\itindend{Name~Service~Switch}
+\itindend{Name~Service~Switch~(NSS)}
 
 
 \subsection{Le funzioni di interrogazione del \textit{resolver}}
 
 
 \subsection{Le funzioni di interrogazione del \textit{resolver}}
@@ -875,6 +875,7 @@ Disattiva l'uso di connessioni per le interrogazioni ad un server DNS.
 \noindent e come si può vedere la funzione è estremamente semplice, non
 richiedendo nessun argomento.
 
 \noindent e come si può vedere la funzione è estremamente semplice, non
 richiedendo nessun argomento.
 
+% TODO manca gethostent (e gethostent_r) e altro ? (vedi man page)
 
 Infine si può richiedere la risoluzione inversa di un indirizzo IP od IPv6,
 per ottenerne il nome a dominio ad esso associato, per fare questo si può
 
 Infine si può richiedere la risoluzione inversa di un indirizzo IP od IPv6,
 per ottenerne il nome a dominio ad esso associato, per fare questo si può
@@ -1019,7 +1020,7 @@ 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} (dove \texttt{XXX} indica il
 servizio) per ciascuna delle informazioni di rete mantenute dal
 generale infatti ci sono una serie di funzioni nella forma
 \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
+\itindex{Name~Service~Switch~(NSS)} \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
 rispettivamente di trovare una corrispondenza cercando per nome o per numero.
 
 L'elenco di queste funzioni è riportato nelle colonne finali di
@@ -1027,8 +1028,8 @@ 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
 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 \itindex{Name~Service~Switch} \textit{Name Service Switch} (anche
-se usualmente questo avviene solo per la risoluzione degli indirizzi).
+interno al \itindex{Name~Service~Switch~(NSS)} \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.
 
 Ciascuna funzione fa riferimento ad una sua apposita struttura che contiene i
 relativi dati, riportata in terza colonna.
 
@@ -1044,15 +1045,15 @@ relativi dati, riportata in terza colonna.
     indirizzo &\conffile{/etc/hosts}&\struct{hostent}&\func{gethostbyname}&
                \func{gethostbyaddr}\\ 
     servizio  &\conffile{/etc/services}&\struct{servent}&\func{getservbyname}&
     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}\\ 
+               \func{getservbyport}\\ 
+    rete      &\conffile{/etc/networks}&\struct{netent}&\funcm{getnetbyname}&
+               \funcm{getnetbyaddr}\\ 
     protocollo&\conffile{/etc/protocols}&\struct{protoent}&
     protocollo&\conffile{/etc/protocols}&\struct{protoent}&
-               \func{getprotobyname}&\func{getprotobyaddr}\\ 
+               \funcm{getprotobyname}&\funcm{getprotobyaddr}\\ 
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
-    \itindex{Name~Service~Switch} \textit{Name Service Switch}.}
+    \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.}
   \label{tab:name_resolution_functions}
 \end{table}
 
   \label{tab:name_resolution_functions}
 \end{table}
 
@@ -1060,13 +1061,13 @@ 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
 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
-\itindex{Name~Service~Switch} NSS a parte, si fa sempre riferimento ai dati
-mantenuti nei rispettivi file.
+\itindex{Name~Service~Switch~(NSS)} 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 di rete più comuni (cioè \texttt{http}, \texttt{smtp},
 ecc.) da associare alle rispettive porte. Le due funzioni da utilizzare per
 
 Dopo la risoluzione dei nomi a dominio una delle ricerche più comuni è quella
 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
+questo sono \funcd{getservbyname} e \funcd{getservbyport}, che permettono
 rispettivamente di ottenere il numero di porta associato ad un servizio dato
 il nome e viceversa; i loro prototipi sono:
 \begin{functions}
 rispettivamente di ottenere il numero di porta associato ad un servizio dato
 il nome e viceversa; i loro prototipi sono:
 \begin{functions}
@@ -1096,7 +1097,7 @@ 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
 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
-  \itindex{Name~Service~Switch} \textit{Name Service Switch} astrae il
+  \itindex{Name~Service~Switch~(NSS)} \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
   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
@@ -1131,7 +1132,7 @@ trovati nelle rispettive pagine di manuale.
 
 Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono
 una lettura sequenziale delle informazioni mantenute nel
 
 Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono
 una lettura sequenziale delle informazioni mantenute nel
-\itindex{Name~Service~Switch} \textit{Name Service Switch} (in sostanza
+\itindex{Name~Service~Switch~(NSS)} \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
 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
@@ -1163,7 +1164,7 @@ voce. La seconda funzione, \func{setservent}, permette di aprire il file
 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
 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
-diverse chiamate a \func{getservbyname} e \func{getservbyaddr}.\footnote{di
+diverse chiamate a \func{getservbyname} e \func{getservbyport}.\footnote{di
   default dopo una chiamata a queste funzioni il file viene chiuso, cosicché
   una successiva chiamata a \func{getservent} riparte dall'inizio.}  La terza
 funzione, \funcd{endservent}, provvede semplicemente a chiudere il file.
   default dopo una chiamata a queste funzioni il file viene chiuso, cosicché
   una successiva chiamata a \func{getservent} riparte dall'inizio.}  La terza
 funzione, \funcd{endservent}, provvede semplicemente a chiudere il file.
@@ -1188,12 +1189,12 @@ rimandando alle rispettive pagine di manuale.
     \hline
     indirizzo &\func{sethostent} &\func{gethostent} &\func{endhostent} \\
     servizio  &\func{setservent} &\func{getservent} &\func{endservent}\\ 
     \hline
     indirizzo &\func{sethostent} &\func{gethostent} &\func{endhostent} \\
     servizio  &\func{setservent} &\func{getservent} &\func{endservent}\\ 
-    rete      &\func{setnetent}  &\func{getnetent}  &\func{endnetent}\\ 
-    protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\ 
+    rete      &\funcm{setnetent}  &\funcm{getnetent}  &\funcm{endnetent}\\ 
+    protocollo&\funcm{setprotoent}&\funcm{getprotoent}&\funcm{endprotoent}\\ 
     \hline
   \end{tabular}
   \caption{Funzioni lettura sequenziale dei dati del
     \hline
   \end{tabular}
   \caption{Funzioni lettura sequenziale dei dati del
-    \itindex{Name~Service~Switch} \textit{Name Service Switch}.} 
+    \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.} 
   \label{tab:name_sequential_read}
 \end{table}
 
   \label{tab:name_sequential_read}
 \end{table}
 
@@ -1445,7 +1446,7 @@ corrispondente è riportato tramite \var{errno}.
 Come per i codici di errore di \func{gethostbyname} anche in questo caso è
 fornita una apposita funzione, analoga di \func{strerror}, che consente di
 utilizzarli direttamente per stampare a video un messaggio esplicativo; la
 Come per i codici di errore di \func{gethostbyname} anche in questo caso è
 fornita una apposita funzione, analoga di \func{strerror}, che consente di
 utilizzarli direttamente per stampare a video un messaggio esplicativo; la
-funzione è \func{gai\_strerror} ed il suo prototipo è:
+funzione è \funcd{gai\_strerror} ed il suo prototipo è:
 \begin{functions}
   \headdecl{netdb.h} 
 
 \begin{functions}
   \headdecl{netdb.h} 
 
@@ -1603,7 +1604,7 @@ struttura \struct{addrinfo}, perché una volta disallocati i dati con
 Anche la nuova interfaccia definita da POSIX prevede una nuova funzione per
 eseguire la risoluzione inversa e determinare nomi di servizi e di dominio
 dati i rispettivi valori numerici. La funzione che sostituisce le varie
 Anche la nuova interfaccia definita da POSIX prevede una nuova funzione per
 eseguire la risoluzione inversa e determinare nomi di servizi e di dominio
 dati i rispettivi valori numerici. La funzione che sostituisce le varie
-\func{gethostbyname}, \func{getipnodebyname} e \func{getservname} è
+\func{gethostbyname}, \func{getipnodebyname} e \func{getservbyname} è
 \funcd{getnameinfo}, ed il suo prototipo è:
 \begin{functions}
   \headdecl{sys/socket.h}
 \funcd{getnameinfo}, ed il suo prototipo è:
 \begin{functions}
   \headdecl{sys/socket.h}
@@ -1687,8 +1688,8 @@ finora, quello in cui si specifica nel client un indirizzo remoto per la
 connessione al server, e quello in cui si specifica nel server un indirizzo
 locale su cui porsi in ascolto.
 
 connessione al server, e quello in cui si specifica nel server un indirizzo
 locale su cui porsi in ascolto.
 
-La prima funzione della nostra interfaccia semplificata è \func{sockconn} che
-permette di ottenere un socket, connesso all'indirizzo ed al servizio
+La prima funzione della nostra interfaccia semplificata è \texttt{sockconn}
+che permette di ottenere un socket, connesso all'indirizzo ed al servizio
 specificati. Il corpo della funzione è riportato in
 fig.~\ref{fig:sockconn_code}, il codice completo è nel file \file{SockUtil.c}
 dei sorgenti allegati alla guida, che contiene varie funzioni di utilità per
 specificati. Il corpo della funzione è riportato in
 fig.~\ref{fig:sockconn_code}, il codice completo è nel file \file{SockUtil.c}
 dei sorgenti allegati alla guida, che contiene varie funzioni di utilità per
@@ -1700,7 +1701,7 @@ l'uso dei socket.
     \includecodesample{listati/sockconn.c}
   \end{minipage}
   \normalsize
     \includecodesample{listati/sockconn.c}
   \end{minipage}
   \normalsize
-  \caption{Il codice della funzione \func{sockconn}.}
+  \caption{Il codice della funzione \texttt{sockconn}.}
   \label{fig:sockconn_code}
 \end{figure}
 
   \label{fig:sockconn_code}
 \end{figure}
 
@@ -1722,12 +1723,12 @@ Una volta definite le variabili necessarie (\texttt{\small 3--5}) la funzione
 prima (\texttt{\small 6}) azzera il contenuto della struttura \var{hint} e poi
 provvede (\texttt{\small 7--9}) ad inizializzarne i valori necessari per la
 chiamata (\texttt{\small 10}) a \func{getaddrinfo}. Di quest'ultima si
 prima (\texttt{\small 6}) azzera il contenuto della struttura \var{hint} e poi
 provvede (\texttt{\small 7--9}) ad inizializzarne i valori necessari per la
 chiamata (\texttt{\small 10}) a \func{getaddrinfo}. Di quest'ultima si
-controlla (\texttt{\small 12-16}) il codice di ritorno, in modo da stampare un
+controlla (\texttt{\small 12--16}) il codice di ritorno, in modo da stampare un
 avviso di errore, azzerare \var{errno} ed uscire in caso di errore.  Dato che
 ad una macchina possono corrispondere più indirizzi IP, e di tipo diverso (sia
 IPv4 che IPv6), mentre il servizio può essere in ascolto soltanto su uno solo
 di questi, si provvede a tentare la connessione per ciascun indirizzo
 avviso di errore, azzerare \var{errno} ed uscire in caso di errore.  Dato che
 ad una macchina possono corrispondere più indirizzi IP, e di tipo diverso (sia
 IPv4 che IPv6), mentre il servizio può essere in ascolto soltanto su uno solo
 di questi, si provvede a tentare la connessione per ciascun indirizzo
-restituito all'interno di un ciclo (\texttt{\small 18-40}) di scansione della
+restituito all'interno di un ciclo (\texttt{\small 18--40}) di scansione della
 lista restituita da \func{getaddrinfo}, ma prima (\texttt{\small 17}) si salva
 il valore del puntatore per poterlo riutilizzare alla fine per disallocare la
 lista.
 lista restituita da \func{getaddrinfo}, ma prima (\texttt{\small 17}) si salva
 il valore del puntatore per poterlo riutilizzare alla fine per disallocare la
 lista.
@@ -1737,7 +1738,7 @@ validi, ed inizia (\texttt{\small 19}) con l'apertura del socket; se questa
 fallisce si controlla (\texttt{\small 20}) se sono disponibili altri
 indirizzi, nel qual caso si passa al successivo (\texttt{\small 21}) e si
 riprende (\texttt{\small 22}) il ciclo da capo; se non ve ne sono si stampa
 fallisce si controlla (\texttt{\small 20}) se sono disponibili altri
 indirizzi, nel qual caso si passa al successivo (\texttt{\small 21}) e si
 riprende (\texttt{\small 22}) il ciclo da capo; se non ve ne sono si stampa
-l'errore ritornando immediatamente (\texttt{\small 24-27}). Quando la
+l'errore ritornando immediatamente (\texttt{\small 24--27}). Quando la
 creazione del socket ha avuto successo si procede (\texttt{\small 29})
 direttamente con la connessione, di nuovo in caso di fallimento viene ripetuto
 (\texttt{\small 30--38}) il controllo se vi sono o no altri indirizzi da
 creazione del socket ha avuto successo si procede (\texttt{\small 29})
 direttamente con la connessione, di nuovo in caso di fallimento viene ripetuto
 (\texttt{\small 30--38}) il controllo se vi sono o no altri indirizzi da
@@ -1771,7 +1772,7 @@ codice usato finora per collegarsi (vedi fig.~\ref{fig:TCP_echo_client_1})
 avremo una semplificazione per cui il corpo principale del nostro client
 diventerà quello illustrato in fig.~\ref{fig:TCP_echo_fifth}, in cui le
 chiamate a \func{socket}, \func{inet\_pton} e \func{connect} sono sostituite
 avremo una semplificazione per cui il corpo principale del nostro client
 diventerà quello illustrato in fig.~\ref{fig:TCP_echo_fifth}, in cui le
 chiamate a \func{socket}, \func{inet\_pton} e \func{connect} sono sostituite
-da una singola chiamata a \func{sockconn}. Inoltre il nuovo client (il cui
+da una singola chiamata a \texttt{sockconn}. Inoltre il nuovo client (il cui
 codice completo è nel file \file{TCP\_echo\_fifth.c} dei sorgenti allegati)
 consente di utilizzare come argomento del programma un nome a dominio al posto
 dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
 codice completo è nel file \file{TCP\_echo\_fifth.c} dei sorgenti allegati)
 consente di utilizzare come argomento del programma un nome a dominio al posto
 dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
@@ -1782,14 +1783,14 @@ dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
     \includecodesample{listati/sockbind.c}
   \end{minipage}
   \normalsize
     \includecodesample{listati/sockbind.c}
   \end{minipage}
   \normalsize
-  \caption{Il codice della funzione \func{sockbind}.}
+  \caption{Il codice della funzione \texttt{sockbind}.}
   \label{fig:sockbind_code}
 \end{figure}
 
   \label{fig:sockbind_code}
 \end{figure}
 
-La seconda funzione di ausilio è \func{sockbind}, il cui corpo principale è
+La seconda funzione di ausilio è \texttt{sockbind}, il cui corpo principale è
 riportato in fig.~\ref{fig:sockbind_code} (al solito il sorgente completo è
 nel file \file{sockbind.c} dei sorgenti allegati alla guida). Come si può
 riportato in fig.~\ref{fig:sockbind_code} (al solito il sorgente completo è
 nel file \file{sockbind.c} dei sorgenti allegati alla guida). Come si può
-notare la funzione è del tutto analoga alla precedente \func{sockconn}, e
+notare la funzione è del tutto analoga alla precedente \texttt{sockconn}, e
 prende gli stessi argomenti, però invece di eseguire una connessione con
 \func{connect} si limita a chiamare \func{bind} per collegare il socket ad una
 porta.
 prende gli stessi argomenti, però invece di eseguire una connessione con
 \func{connect} si limita a chiamare \func{bind} per collegare il socket ad una
 porta.
@@ -1806,16 +1807,16 @@ passare un valore \val{NULL} come valore per l'argomento \var{host}; l'uso
 del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella
 rispettiva struttura degli indirizzi.
 
 del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella
 rispettiva struttura degli indirizzi.
 
-Come già detto la funzione è analoga a \func{sockconn} ed inizia azzerando ed
-inizializzando (\texttt{\small 6-11}) opportunamente la struttura \var{hint}
-con i valori ricevuti come argomenti, soltanto che in questo caso si è usata
-(\texttt{\small 8}) una impostazione specifica dei flag di \var{hint} usando
-\const{AI\_PASSIVE} per indicare che il socket sarà usato per una apertura
-passiva. Per il resto la chiamata (\texttt{\small 12-18}) a \func{getaddrinfo}
-e ed il ciclo principale (\texttt{\small 20--42}) sono identici, solo che si è
-sostituita (\texttt{\small 31}) la chiamata a \func{connect} con una chiamata
-a \func{bind}. Anche la conclusione (\texttt{\small 43--44}) della funzione è
-identica. 
+Come già detto la funzione è analoga a \texttt{sockconn} ed inizia azzerando
+ed inizializzando (\texttt{\small 6--11}) opportunamente la struttura
+\var{hint} con i valori ricevuti come argomenti, soltanto che in questo caso
+si è usata (\texttt{\small 8}) una impostazione specifica dei flag di
+\var{hint} usando \const{AI\_PASSIVE} per indicare che il socket sarà usato
+per una apertura passiva. Per il resto la chiamata (\texttt{\small 12--18}) a
+\func{getaddrinfo} e ed il ciclo principale (\texttt{\small 20--42}) sono
+identici, solo che si è sostituita (\texttt{\small 31}) la chiamata a
+\func{connect} con una chiamata a \func{bind}. Anche la conclusione
+(\texttt{\small 43--44}) della funzione è identica.
 
 Si noti come anche in questo caso si siano inserite le stampe degli errori
 sullo standard error, nonostante la funzione possa essere invocata da un
 
 Si noti come anche in questo caso si siano inserite le stampe degli errori
 sullo standard error, nonostante la funzione possa essere invocata da un
@@ -1838,7 +1839,7 @@ Con l'uso di questa funzione si può modificare anche il codice del nostro
 server \textit{echo}, che rispetto a quanto illustrato nella versione iniziale
 di fig.~\ref{fig:TCP_echo_server_first_code} viene modificato nella forma
 riportata in fig.~\ref{fig:TCP_echod_third}. In questo caso il socket su cui
 server \textit{echo}, che rispetto a quanto illustrato nella versione iniziale
 di fig.~\ref{fig:TCP_echo_server_first_code} viene modificato nella forma
 riportata in fig.~\ref{fig:TCP_echod_third}. In questo caso il socket su cui
-porsi in ascolto viene ottenuto (\texttt{\small 15--18}) da \func{sockbind}
+porsi in ascolto viene ottenuto (\texttt{\small 15--18}) da \texttt{sockbind}
 che si cura anche della eventuale risoluzione di un indirizzo specifico sul
 quale si voglia far ascoltare il server.
 
 che si cura anche della eventuale risoluzione di un indirizzo specifico sul
 quale si voglia far ascoltare il server.
 
@@ -2074,6 +2075,11 @@ tab.~\ref{tab:sock_opt_socklevel}.
   \label{tab:sock_opt_socklevel}
 \end{table}
 
   \label{tab:sock_opt_socklevel}
 \end{table}
 
+% TODO aggiungere e documentare SO_ATTACH_BPF, introdotta con il kernel 3.19,
+% vedi http://lwn.net/Articles/625224/
+% TODO aggiungere e documentare SO_INCOMING_CPU, introdotta con il kernel 3.19,
+% vedi https://lwn.net/Articles/626150/
+
 La tabella elenca le costanti che identificano le singole opzioni da usare
 come valore per \param{optname}; le due colonne seguenti indicano per quali
 delle due funzioni (\func{getsockopt} o \func{setsockopt}) l'opzione è
 La tabella elenca le costanti che identificano le singole opzioni da usare
 come valore per \param{optname}; le due colonne seguenti indicano per quali
 delle due funzioni (\func{getsockopt} o \func{setsockopt}) l'opzione è
@@ -2339,6 +2345,9 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 % Documentation/networking/timestamping.txt
 
 
 % Documentation/networking/timestamping.txt
 
 
+% TOFO documentare SO_REUSEPORT introdotta con il kernel 3.9, vedi
+% http://git.kernel.org/linus/c617f398edd4db2b8567a28e899a88f8f574798d 
+
 \end{basedescript}
 
 
 \end{basedescript}
 
 
@@ -2385,12 +2394,12 @@ avuto un crollo del sistema ed è stata riavviata, per cui dopo il riavvio la
 connessione non esiste più.\footnote{si ricordi che un normale riavvio o il
   crollo dell'applicazione non ha questo effetto, in quanto in tal caso si
   passa sempre per la chiusura del processo, e questo, come illustrato in
 connessione non esiste più.\footnote{si ricordi che un normale riavvio o il
   crollo dell'applicazione non ha questo effetto, in quanto in tal caso si
   passa sempre per la chiusura del processo, e questo, come illustrato in
-  sez.~\ref{sec:file_close}, comporta anche la regolare chiusura del socket
-  con l'invio di un segmento FIN all'altro capo della connessione.} In questo
-caso all'invio del messaggio di \textit{keep-alive} si otterrà come risposta
-un segmento RST che indica che l'altro capo non riconosce più l'esistenza
-della connessione ed il socket verrà chiuso riportando un errore di
-\errcode{ECONNRESET}.
+  sez.~\ref{sec:file_open_close}, comporta anche la regolare chiusura del
+  socket con l'invio di un segmento FIN all'altro capo della connessione.} In
+questo caso all'invio del messaggio di \textit{keep-alive} si otterrà come
+risposta un segmento RST che indica che l'altro capo non riconosce più
+l'esistenza della connessione ed il socket verrà chiuso riportando un errore
+di \errcode{ECONNRESET}.
 
 Se invece non viene ricevuta nessuna risposta (indice che la macchina non è
 più raggiungibile) l'emissione dei messaggi viene ripetuta ad intervalli di 75
 
 Se invece non viene ricevuta nessuna risposta (indice che la macchina non è
 più raggiungibile) l'emissione dei messaggi viene ripetuta ad intervalli di 75
@@ -2505,9 +2514,9 @@ eventuali pacchetti rimasti intrappolati in una precedente connessione possano
 finire fra quelli di una nuova.
 
 Come esempio di uso di questa connessione abbiamo predisposto una nuova
 finire fra quelli di una nuova.
 
 Come esempio di uso di questa connessione abbiamo predisposto una nuova
-versione della funzione \func{sockbind} (vedi fig.~\ref{fig:sockbind_code})
+versione della funzione \texttt{sockbind} (vedi fig.~\ref{fig:sockbind_code})
 che consenta l'impostazione di questa opzione. La nuova funzione è
 che consenta l'impostazione di questa opzione. La nuova funzione è
-\func{sockbindopt}, e le principali differenze rispetto alla precedente sono
+\texttt{sockbindopt}, e le principali differenze rispetto alla precedente sono
 illustrate in fig.~\ref{fig:sockbindopt_code}, dove si sono riportate le
 sezioni di codice modificate rispetto alla versione precedente. Il codice
 completo della funzione si trova, insieme alle altre funzioni di servizio dei
 illustrate in fig.~\ref{fig:sockbindopt_code}, dove si sono riportate le
 sezioni di codice modificate rispetto alla versione precedente. Il codice
 completo della funzione si trova, insieme alle altre funzioni di servizio dei
@@ -2520,15 +2529,15 @@ guida.
     \includecodesample{listati/sockbindopt.c}
   \end{minipage}
   \normalsize
     \includecodesample{listati/sockbindopt.c}
   \end{minipage}
   \normalsize
-  \caption{Le sezioni della funzione \func{sockbindopt} modificate rispetto al
-    codice della precedente \func{sockbind}.} 
+  \caption{Le sezioni della funzione \texttt{sockbindopt} modificate rispetto al
+    codice della precedente \texttt{sockbind}.} 
   \label{fig:sockbindopt_code}
 \end{figure}
 
 In realtà tutto quello che si è fatto è stato introdurre nella nuova funzione
 (\texttt{\small 1}) un nuovo argomento intero, \param{reuse}, che conterrà il
 valore logico da usare nella successiva chiamata (\texttt{\small 14}) a
   \label{fig:sockbindopt_code}
 \end{figure}
 
 In realtà tutto quello che si è fatto è stato introdurre nella nuova funzione
 (\texttt{\small 1}) un nuovo argomento intero, \param{reuse}, che conterrà il
 valore logico da usare nella successiva chiamata (\texttt{\small 14}) a
-\func{setsockopt}. Si è poi aggiunta una sezione (\texttt{\small 13-17}) che
+\func{setsockopt}. Si è poi aggiunta una sezione (\texttt{\small 13--17}) che
 esegue l'impostazione dell'opzione fra la chiamata a \func{socket} e quella a
 \func{bind}.
 
 esegue l'impostazione dell'opzione fra la chiamata a \func{socket} e quella a
 \func{bind}.
 
@@ -2545,7 +2554,7 @@ usata (\texttt{\small 14}) come ultimo argomento di \func{setsockopt}. Il
 valore di default di questa variabile è nullo, ma usando l'opzione \texttt{-r}
 nell'invocazione del server (al solito la gestione delle opzioni non è
 riportata in fig.~\ref{fig:TCP_echod_fifth}) se ne potrà impostare ad 1 il
 valore di default di questa variabile è nullo, ma usando l'opzione \texttt{-r}
 nell'invocazione del server (al solito la gestione delle opzioni non è
 riportata in fig.~\ref{fig:TCP_echod_fifth}) se ne potrà impostare ad 1 il
-valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a
+valore, per cui in tal caso la successiva chiamata (\texttt{\small 13--17}) a
 \func{setsockopt} attiverà l'opzione \const{SO\_REUSEADDR}.
 
 \begin{figure}[!htbp] 
 \func{setsockopt} attiverà l'opzione \const{SO\_REUSEADDR}.
 
 \begin{figure}[!htbp] 
@@ -2555,7 +2564,7 @@ valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a
   \end{minipage}
   \normalsize
   \caption{Il nuovo codice per l'apertura passiva del server \textit{echo} che
   \end{minipage}
   \normalsize
   \caption{Il nuovo codice per l'apertura passiva del server \textit{echo} che
-    usa la nuova funzione \func{sockbindopt}.}
+    usa la nuova funzione \texttt{sockbindopt}.}
   \label{fig:TCP_echod_fifth}
 \end{figure}
 
   \label{fig:TCP_echod_fifth}
 \end{figure}
 
@@ -2623,16 +2632,20 @@ Essendo questo un caso particolare in alcuni sistemi (come BSD) è stata
 introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta
 opzione sia specificata per tutti i socket per i quali si vuole eseguire il
 \textit{completely duplicate binding}. Nel caso di Linux questa opzione non
 introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta
 opzione sia specificata per tutti i socket per i quali si vuole eseguire il
 \textit{completely duplicate binding}. Nel caso di Linux questa opzione non
-esiste, ma il comportamento di \const{SO\_REUSEADDR} è analogo, sarà cioè
-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
-  \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
+esisteva fino al kernel 3.9, ma il comportamento di \const{SO\_REUSEADDR} è
+analogo, sarà cioè 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 parzialmente 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
   primo programma a consentirlo, avendo usato fin dall'inizio
   primo programma a consentirlo, avendo usato fin dall'inizio
-  \const{SO\_REUSEADDR}.}  
+  \const{SO\_REUSEADDR}.}
+
+% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
+
 
 \index{costante!{SO\_REUSEADDR}@{{\tt  {SO\_REUSEADDR}}}|)}
 
 
 \index{costante!{SO\_REUSEADDR}@{{\tt  {SO\_REUSEADDR}}}|)}
 
@@ -2772,9 +2785,9 @@ file.
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Abilita la gestione degli errori.\\
     \const{IP\_MTU\_DISCOVER}   &$\bullet$&$\bullet$&         &\texttt{int}& 
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       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~(MTU)} Discovery.\\
     \const{IP\_MTU}             &$\bullet$&         &         &\texttt{int}& 
     \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)} MTU.\\
     \const{IP\_ROUTER\_ALERT}   &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Imposta l'opzione \textit{IP router alert} sui pacchetti.\\
     \const{IP\_MULTICAST\_TTL}  &$\bullet$&$\bullet$&         &\texttt{int}& 
     \const{IP\_ROUTER\_ALERT}   &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Imposta l'opzione \textit{IP router alert} sui pacchetti.\\
     \const{IP\_MULTICAST\_TTL}  &$\bullet$&$\bullet$&         &\texttt{int}& 
@@ -2946,7 +2959,7 @@ sez.~\ref{sec:net_sendmsg}).
   come valore logico e non è applicabile a socket di tipo
   \const{SOCK\_STREAM}.
 
   come valore logico e non è applicabile a socket di tipo
   \const{SOCK\_STREAM}.
 
-\itindbeg{Maximum~Transfer~Unit}
+\itindbeg{Maximum~Transfer~Unit~(MTU)}
 \item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel
   della serie 2.2.x, ed è specifica di Linux.  L'opzione permette di scrivere
   o leggere le impostazioni della modalità usata per la determinazione della
 \item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel
   della serie 2.2.x, ed è specifica di Linux.  L'opzione permette di scrivere
   o leggere le impostazioni della modalità usata per la determinazione della
@@ -2984,12 +2997,11 @@ 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
   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 \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.}
+  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.}
 
 \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
 
 \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
@@ -3003,15 +3015,15 @@ sez.~\ref{sec:net_sendmsg}).
   esplicitamente connesso con \func{connect}. 
 
   Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
   esplicitamente connesso con \func{connect}. 
 
   Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
-  \itindex{Maximum~Transfer~Unit} \textit{Path MTU} eseguendo prima una
-  \func{connect} verso la destinazione, e poi usando \func{getsockopt} con
-  questa opzione. Si può anche avviare esplicitamente il procedimento di
-  scoperta inviando un pacchetto di grosse dimensioni (che verrà scartato) e
-  ripetendo l'invio coi dati aggiornati. Si tenga infine conto che durante il
-  procedimento i pacchetti iniziali possono essere perduti, ed è compito
-  dell'applicazione gestirne una eventuale ritrasmissione.
+  \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
+  e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
+  esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
+  dimensioni (che verrà scartato) e ripetendo l'invio coi dati aggiornati. Si
+  tenga infine conto che durante il procedimento i pacchetti iniziali possono
+  essere perduti, ed è compito dell'applicazione gestirne una eventuale
+  ritrasmissione.
 
 
-\itindend{Maximum~Transfer~Unit}
+\itindend{Maximum~Transfer~Unit~(MTU)}
 
 \item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i
   kernel della serie 2.2.x, ed è specifica di Linux. Prende per
 
 \item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i
   kernel della serie 2.2.x, ed è specifica di Linux. Prende per
@@ -3074,6 +3086,9 @@ sez.~\ref{sec:net_sendmsg}).
   del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture
   \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni.
 
   del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture
   \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni.
 
+% TODO chiarire quale è la struttura \struct{ip\_mreq}
+
+
 \itindend{multicast}
 \end{basedescript}
 
 \itindend{multicast}
 \end{basedescript}
 
@@ -3122,7 +3137,7 @@ strutture collegate all'uso delle opzioni TCP sono definite in
     \const{TCP\_NODELAY}      &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Spedisce immediatamente i dati in segmenti singoli.\\
     \const{TCP\_MAXSEG}       &$\bullet$&$\bullet$&         &\texttt{int}&
     \const{TCP\_NODELAY}      &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       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)} MSS per i segmenti in
       uscita.\\  
     \const{TCP\_CORK}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
       Accumula i dati in un unico segmento.\\
       uscita.\\  
     \const{TCP\_CORK}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
       Accumula i dati in un unico segmento.\\
@@ -3198,13 +3213,14 @@ quantità di dettagli è fornita nel seguente elenco:
     kernel 2.5.71.}
 
 \item[\const{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore
     kernel 2.5.71.}
 
 \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{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
-  maggiori della \itindex{Maximum~Transfer~Unit} MTU questi verranno ignorati,
-  inoltre TCP imporrà anche i suoi limiti massimo e minimo per questo valore.
+  della \itindex{Maximum~Segment~Size~(MSS)} MSS
+  (\textit{Maximum~Segment~Size}, 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)} MSS annunciata all'altro capo della
+  connessione. Se si specificano valori maggiori della
+  \itindex{Maximum~Transfer~Unit~(MTU)} MTU questi verranno ignorati, inoltre
+  TCP imporrà anche i suoi limiti massimo e minimo per questo valore.
 
 \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di
   \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione
 
 \item[\const{TCP\_CORK}] questa opzione è il complemento naturale di
   \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione
@@ -3541,11 +3557,10 @@ caratteristiche delle opzioni citate è quello dell'elenco seguente:
 Benché la maggior parte delle caratteristiche dei socket sia gestibile con le
 funzioni \func{setsockopt} e \func{getsockopt}, alcune proprietà possono
 essere impostate attraverso le funzioni \func{fcntl} e \func{ioctl} già
 Benché la maggior parte delle caratteristiche dei socket sia gestibile con le
 funzioni \func{setsockopt} e \func{getsockopt}, alcune proprietà possono
 essere impostate attraverso le funzioni \func{fcntl} e \func{ioctl} già
-trattate in sez.~\ref{sec:file_fcntl} e sez.~\ref{sec:file_ioctl}; in
-quell'occasione abbiamo parlato di queste funzioni esclusivamente nell'ambito
-della loro applicazione a file descriptor associati a dei file normali; qui
-tratteremo invece i dettagli del loro utilizzo con file descriptor associati a
-dei socket.
+trattate in sez.~\ref{sec:file_fcntl_ioctl}; in quell'occasione abbiamo
+parlato di queste funzioni esclusivamente nell'ambito della loro applicazione
+a file descriptor associati a dei file normali; qui tratteremo invece i
+dettagli del loro utilizzo con file descriptor associati a dei socket.
 
 
 \subsection{L'uso di \func{ioctl} e \func{fcntl} per i socket generici}
 
 
 \subsection{L'uso di \func{ioctl} e \func{fcntl} per i socket generici}
@@ -3553,10 +3568,10 @@ dei socket.
 
 Tratteremo in questa sezione le caratteristiche specifiche delle funzioni
 \func{ioctl} e \func{fcntl} quando esse vengono utilizzate con dei socket
 
 Tratteremo in questa sezione le caratteristiche specifiche delle funzioni
 \func{ioctl} e \func{fcntl} quando esse vengono utilizzate con dei socket
-generici. Quanto già detto in precedenza in sez.~\ref{sec:file_fcntl} e
-sez.~\ref{sec:file_ioctl} continua a valere; quello che tratteremo qui sono le
-operazioni ed i comandi che sono validi, o che hanno significati peculiari,
-quando queste funzioni vengono applicate a dei socket generici.
+generici. Quanto già detto in precedenza sez.~\ref{sec:file_fcntl_ioctl}
+continua a valere; quello che tratteremo qui sono le operazioni ed i comandi
+che sono validi, o che hanno significati peculiari, quando queste funzioni
+vengono applicate a dei socket generici.
 
 Nell'elenco seguente si riportano i valori specifici che può assumere il
 secondo argomento della funzione \func{ioctl} (\param{request}, che indica il
 
 Nell'elenco seguente si riportano i valori specifici che può assumere il
 secondo argomento della funzione \func{ioctl} (\param{request}, che indica il
@@ -3573,7 +3588,7 @@ identificano le operazioni sono le seguenti:
   \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
   socket, questa operazione può essere utilizzata per effettuare delle
   misurazioni precise del tempo di andata e ritorno\footnote{il
   \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
   socket, questa operazione può essere utilizzata per effettuare delle
   misurazioni precise del tempo di andata e ritorno\footnote{il
-    \itindex{Round~Trip~Time} \textit{Round Trip Time} cui abbiamo già
+    \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time} cui abbiamo già
     accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
     accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
@@ -3596,10 +3611,10 @@ identificano le operazioni sono le seguenti:
   nullo.
 
 \item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
   nullo.
 
 \item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
-  socket. Questo significa (vedi sez.~\ref{sec:file_asyncronous_operation})
-  che verrà inviato il segnale di \signal{SIGIO} (o quanto impostato con
-  \const{F\_SETSIG}, vedi sez.~\ref{sec:file_fcntl}) in caso di eventi di I/O
-  sul socket.
+  socket. Questo significa (vedi sez.~\ref{sec:signal_driven_io}) che verrà
+  inviato il segnale di \signal{SIGIO} (o quanto impostato con
+  \const{F\_SETSIG}, vedi sez.~\ref{sec:file_fcntl_ioctl}) in caso di eventi
+  di I/O sul socket.
 \end{basedescript}
 
 Nel caso dei socket generici anche \func{fcntl} prevede un paio di comandi
 \end{basedescript}
 
 Nel caso dei socket generici anche \func{fcntl} prevede un paio di comandi
@@ -3739,11 +3754,11 @@ sono le seguenti:
   non ancora implementato, restituisce un errore di \errval{EOPNOTSUPP}.
 
 \item[\const{SIOCGIFMTU}] permette di leggere il valore della
   non ancora implementato, restituisce un errore di \errval{EOPNOTSUPP}.
 
 \item[\const{SIOCGIFMTU}] permette di leggere il valore della
-  \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del
+  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del
   dispositivo nel campo \var{ifr\_mtu}.
 
 \item[\const{SIOCSIFMTU}] permette di impostare il valore della
   dispositivo nel campo \var{ifr\_mtu}.
 
 \item[\const{SIOCSIFMTU}] permette di impostare il valore della
-  \itindex{Maximum~Transfer~Unit} \textit{Maximum Transfer Unit} del
+  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del
   dispositivo al valore specificato campo \var{ifr\_mtu}. L'operazione è
   privilegiata, e si tenga presente che impostare un valore troppo basso può
   causare un blocco del kernel.
   dispositivo al valore specificato campo \var{ifr\_mtu}. L'operazione è
   privilegiata, e si tenga presente che impostare un valore troppo basso può
   causare un blocco del kernel.
@@ -3816,6 +3831,10 @@ sono le seguenti:
 
 \end{basedescript}
 
 
 \end{basedescript}
 
+
+% TODO aggiunta con il kernel 3.14 SIOCGHWTSTAMP per ottenere il timestamp
+% hardware senza modificarlo
+
 Una ulteriore operazione, che consente di ricavare le caratteristiche delle
 interfacce di rete, è \const{SIOCGIFCONF}; però per ragioni di compatibilità
 questa operazione è disponibile soltanto per i socket della famiglia
 Una ulteriore operazione, che consente di ricavare le caratteristiche delle
 interfacce di rete, è \const{SIOCGIFCONF}; però per ragioni di compatibilità
 questa operazione è disponibile soltanto per i socket della famiglia
@@ -4177,19 +4196,20 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 
 \item[\sysctlrelfile{net/ipv4}{ip\_no\_pmtu\_disc}] permette di
   disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della
 
 \item[\sysctlrelfile{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
+  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Path MTU} (vedi
   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
   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.~3.4.4 di \cite{SGL}.} o interfacce\footnote{ad esempio se i
-    due capi di un collegamento \textit{point-to-point} non si accordano sulla
-    stessa MTU.}  mal configurati è opportuno correggere le configurazioni,
-  perché disabilitare globalmente il procedimento con questo parametro ha
-  pesanti ripercussioni in termini di prestazioni di rete.
+  procedimento del \itindex{Maximum~Transfer~Unit~(MTU)} \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.~3.4.4 di \cite{SGL}.} o
+  interfacce\footnote{ad esempio se i due capi di un collegamento
+    \textit{point-to-point} non si accordano sulla stessa MTU.}  mal
+  configurati è opportuno correggere le configurazioni, perché disabilitare
+  globalmente il procedimento con questo parametro ha pesanti ripercussioni in
+  termini di prestazioni di rete.
 
 \item[\sysctlrelfile{net/ipv4}{ip\_always\_defrag}] fa si che tutti i
   pacchetti IP frammentati siano riassemblati, anche in caso in successivo
 
 \item[\sysctlrelfile{net/ipv4}{ip\_always\_defrag}] fa si che tutti i
   pacchetti IP frammentati siano riassemblati, anche in caso in successivo
@@ -4255,12 +4275,13 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   negativo.  Il default è 2 che significa che al buffer dell'applicazione
   viene riservato un quarto del totale.
 
   negativo.  Il default è 2 che significa che al buffer dell'applicazione
   viene riservato un quarto del totale.
 
-\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione
-  della finestra TCP che viene riservata per gestire l'overhaed dovuto alla
+\item[\sysctlrelfile{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
   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.
+  dimensione in byte come il massimo fra la
+  \itindex{Maximum~Segment~Size~(MSS)} 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 
 
 % vecchi, presumibilmente usati quando gli algoritmi di congestione non erano
 % modularizzabili 
@@ -4633,7 +4654,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % LocalWords:  ERANGE sethostent stayopen endhostent gethostbyaddr order pton
 % LocalWords:  getipnodebyname getipnodebyaddr flags num MAPPED ALL ADDRCONFIG
 % LocalWords:  freehostent ip getXXXbyname getXXXbyaddr servent getservbyname
 % LocalWords:  ERANGE sethostent stayopen endhostent gethostbyaddr order pton
 % LocalWords:  getipnodebyname getipnodebyaddr flags num MAPPED ALL ADDRCONFIG
 % LocalWords:  freehostent ip getXXXbyname getXXXbyaddr servent getservbyname
-% LocalWords:  getservbyaddr netent getnetbyname getnetbyaddr protoent smtp udp
+% LocalWords:  netent getnetbyname getnetbyaddr protoent smtp udp
 % LocalWords:  getprotobyname getprotobyaddr getservbyport port tcp setservent
 % LocalWords:  getservent endservent setXXXent getXXXent endXXXent gethostent
 % LocalWords:  setnetent getnetent endnetent setprotoent getprotoent POSIX RFC
 % LocalWords:  getprotobyname getprotobyaddr getservbyport port tcp setservent
 % LocalWords:  getservent endservent setXXXent getXXXent endXXXent gethostent
 % LocalWords:  setnetent getnetent endnetent setprotoent getprotoent POSIX RFC