fine (si spera) delle reindicizzazioni
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 1 Nov 2015 17:51:28 +0000 (17:51 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 1 Nov 2015 17:51:28 +0000 (17:51 +0000)
15 files changed:
fileadv.tex
filedir.tex
fileio.tex
intro.tex
ipc.tex
netlayer.tex
network.tex
othersock.tex
prochand.tex
signal.tex
sockctrl.tex
socket.tex
system.tex
tcpsock.tex
trasplayer.tex

index 440bc32..0251c7b 100644 (file)
@@ -753,7 +753,7 @@ prototipo è:
   \item[\errcode{EINVAL}] si è usato un valore non valido per \param{cmd}.
   \end{errlist}
   ed inoltre \errcode{EDEADLK} e \errcode{ENOLCK} con lo stesso significato
-  che hanno con \funcd{fcntl}.
+  che hanno con \func{fcntl}.
 }
 \end{funcproto}
   
@@ -1050,13 +1050,13 @@ identifica un insieme di segnali. Per la manipolazione di questi \textit{file
 \vspace{3pt}
 \begin{funcbox}{
 \fhead{sys/select.h}
-\fdecl{void \macro{FD\_ZERO}(fd\_set *set)}
+\fdecl{void \macrod{FD\_ZERO}(fd\_set *set)}
 \fdesc{Inizializza l'insieme (vuoto).} 
-\fdecl{void \macro{FD\_SET}(int fd, fd\_set *set)}
+\fdecl{void \macrod{FD\_SET}(int fd, fd\_set *set)}
 \fdesc{Inserisce il file descriptor \param{fd} nell'insieme.} 
-\fdecl{void \macro{FD\_CLR}(int fd, fd\_set *set)}
+\fdecl{void \macrod{FD\_CLR}(int fd, fd\_set *set)}
 \fdesc{Rimuove il file descriptor \param{fd} dall'insieme.} 
-\fdecl{int \macro{FD\_ISSET}(int fd, fd\_set *set)}
+\fdecl{int \macrod{FD\_ISSET}(int fd, fd\_set *set)}
 \fdesc{Controlla se il file descriptor \param{fd} è nell'insieme.} 
 }
 \end{funcbox}}
@@ -1974,12 +1974,12 @@ funzione di sistema si chiama \funcd{epoll\_pwait}\footnote{la funzione è
 
 {La funzione ritorna il numero di file descriptor pronti in caso di successo e
   $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori già
-  visti con \funcd{epoll\_wait}.
+  visti con \func{epoll\_wait}.
 
 }  
 \end{funcproto}
 
-La funzione è del tutto analoga \funcd{epoll\_wait}, soltanto che alla sua
+La funzione è del tutto analoga \func{epoll\_wait}, soltanto che alla sua
 uscita viene ripristinata la maschera di segnali originale, sostituita durante
 l'esecuzione da quella impostata con l'argomento \param{sigmask}; in sostanza
 la chiamata a questa funzione è equivalente al seguente codice, eseguito però
@@ -2005,7 +2005,7 @@ notifiche di eventi tramite i segnali, presente da sempre nei sistemi
 unix-like, porti a notevoli problemi nell'interazione con le funzioni per
 l'\textit{I/O multiplexing}, tanto che per evitare possibili \textit{race
   condition} sono state introdotte estensioni dello standard POSIX e funzioni
-apposite come \func{pselect}, \func{ppoll} e \funcd{epoll\_pwait}.
+apposite come \func{pselect}, \func{ppoll} e \func{epoll\_pwait}.
 
 Benché i segnali siano il meccanismo più usato per effettuare notifiche ai
 processi, la loro interfaccia di programmazione, che comporta l'esecuzione di
@@ -2056,7 +2056,7 @@ gestore in occasione dell'arrivo di un segnale, e rilevarne l'avvenuta
 ricezione leggendone la notifica tramite l'uso di uno speciale file
 descriptor. Trattandosi di un file descriptor questo potrà essere tenuto sotto
 osservazione con le ordinarie funzioni dell'\textit{I/O multiplexing} (vale a
-dire con le solite \func{select}, \func{poll} e \funcd{epoll\_wait}) allo
+dire con le solite \func{select}, \func{poll} e \func{epoll\_wait}) allo
 stesso modo di quelli associati a file o socket, per cui alla fine si potrà
 attendere in contemporanea sia l'arrivo del segnale che la disponibilità di
 accesso ai dati relativi a questi ultimi.
@@ -2164,7 +2164,7 @@ condizioni di gestione, né da un gestore, né dalla funzione \func{sigwaitinfo}
 Come anticipato, essendo questo lo scopo principale della nuova interfaccia,
 il file descriptor può essere tenuto sotto osservazione tramite le funzioni
 dell'\textit{I/O multiplexing} (vale a dire con le solite \func{select},
-\func{poll} e \funcd{epoll\_wait}), e risulterà accessibile in lettura quando
+\func{poll} e \func{epoll\_wait}), e risulterà accessibile in lettura quando
 uno o più dei segnali indicati tramite \param{mask} sarà pendente.
 
 La funzione può essere chiamata più volte dallo stesso processo, consentendo
@@ -2813,9 +2813,9 @@ tab.~\ref{tab:file_lease_fctnl}.
     \textbf{Valore}  & \textbf{Significato} \\
     \hline
     \hline
-    \consts{F\_RDLCK} & Richiede un \textit{read lease}.\\
-    \consts{F\_WRLCK} & Richiede un \textit{write lease}.\\
-    \consts{F\_UNLCK} & Rilascia un \textit{file lease}.\\
+    \constd{F\_RDLCK} & Richiede un \textit{read lease}.\\
+    \constd{F\_WRLCK} & Richiede un \textit{write lease}.\\
+    \constd{F\_UNLCK} & Rilascia un \textit{file lease}.\\
     \hline    
   \end{tabular}
   \caption{Costanti per i tre possibili valori dell'argomento \param{arg} di
@@ -3514,7 +3514,7 @@ nome sta per \textit{asyncronous I/O control block}), che viene passata come
 argomento a tutte le funzioni dell'interfaccia. La sua definizione, come
 effettuata in \headfiled{aio.h}, è riportata in
 fig.~\ref{fig:file_aiocb}. Nello steso file è definita la macro
-\macro{\_POSIX\_ASYNCHRONOUS\_IO}, che dichiara la disponibilità
+\macrod{\_POSIX\_ASYNCHRONOUS\_IO}, che dichiara la disponibilità
 dell'interfaccia per l'I/O asincrono.
 
 \begin{figure}[!htb]
@@ -3544,8 +3544,8 @@ del blocco di dati da trasferire.
 Il campo \var{aio\_reqprio} permette di impostare la priorità delle operazioni
 di I/O, in generale perché ciò sia possibile occorre che la piattaforma
 supporti questa caratteristica, questo viene indicato dal fatto che le macro
-\macro{\_POSIX\_PRIORITIZED\_IO}, e \macro{\_POSIX\_PRIORITY\_SCHEDULING} sono
-definite. La priorità viene impostata a partire da quella del processo
+\macrod{\_POSIX\_PRIORITIZED\_IO}, e \macrod{\_POSIX\_PRIORITY\_SCHEDULING}
+sono definite. La priorità viene impostata a partire da quella del processo
 chiamante (vedi sez.~\ref{sec:proc_priority}), cui viene sottratto il valore
 di questo campo.  Il campo \var{aio\_lio\_opcode} è usato solo dalla funzione
 \func{lio\_listio}, che, come vedremo, permette di eseguire con una sola
index 4c70860..ae7b557 100644 (file)
@@ -5832,7 +5832,7 @@ prototipo è:
 }
 \end{funcproto}
 
-La funzione è del tutto è analoga a \funcd{acl\_set\_file} ma opera
+La funzione è del tutto è analoga a \func{acl\_set\_file} ma opera
 esclusivamente sui file identificati tramite un file descriptor. Non dovendo
 avere a che fare con directory (e con la conseguente possibilità di avere una
 ACL di default) la funzione non necessita che si specifichi il tipo di ACL,
index ead199a..20c4c1d 100644 (file)
@@ -1858,7 +1858,7 @@ costanti utilizzabili per i valori di \param{flags}.
 
 Un'ultima differenza fra le \textit{at-functions} e le funzioni tradizionali
 di cui sono estensione è, come accennato in sez.~\ref{sec:file_temp_file},
-quella relativa a \funcm{utimensat} che non è propriamente una corrispondente
+quella relativa a \func{utimensat} che non è propriamente una corrispondente
 esatta di \func{utimes} e \func{lutimes}, dato che questa funzione ha una
 maggiore precisione nella indicazione dei tempi dei file, per i quali come per
 \func{futimes}, si devono usare strutture \struct{timespec} che consentono una
index dba0ded..fd6a41b 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -1442,7 +1442,7 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
   sez.~\ref{sec:file_openat}.
 
 \item[\macrod{\_REENTRANT}] definendo questa macro, o la equivalente
-  \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
+  \macrod{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le
   versioni rientranti (vedi sez.~\ref{sec:proc_reentrant}) di alcune funzioni,
   necessarie quando si usano i \textit{thread}.  Alcune di queste funzioni
   sono anche previste nello standard POSIX.1c, ma ve ne sono altre che sono
diff --git a/ipc.tex b/ipc.tex
index 7520e33..bc8d542 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -954,7 +954,7 @@ Usando la stessa chiave due processi diversi possono ricavare l'identificatore
 associato ad un oggetto ed accedervi. Il problema che sorge a questo punto è
 come devono fare per accordarsi sull'uso di una stessa chiave. Se i processi
 sono \textsl{imparentati} la soluzione è relativamente semplice, in tal caso
-infatti si può usare il valore speciale \texttt{IPC\_PRIVATE} per creare un
+infatti si può usare il valore speciale \constd{IPC\_PRIVATE} per creare un
 nuovo oggetto nel processo padre, l'identificatore così ottenuto sarà
 disponibile in tutti i figli, e potrà essere passato come argomento attraverso
 una \func{exec}.
@@ -1045,8 +1045,8 @@ il proprietario, il suo gruppo e tutti gli altri.
 
 Se però si vogliono usare le costanti simboliche di
 tab.~\ref{tab:file_mode_flags} occorrerà includere anche il file
-\headfile{sys/stat.h}; alcuni sistemi definiscono le costanti \const{MSG\_R}
-(il valore ottale \texttt{0400}) e \const{MSG\_W} (il valore ottale
+\headfile{sys/stat.h}; alcuni sistemi definiscono le costanti \constd{MSG\_R}
+(il valore ottale \texttt{0400}) e \constd{MSG\_W} (il valore ottale
 \texttt{0200}) per indicare i permessi base di lettura e scrittura per il
 proprietario, da utilizzare, con gli opportuni shift, pure per il gruppo e gli
 altri. In Linux, visto la loro scarsa utilità, queste costanti non sono
@@ -1127,8 +1127,8 @@ Il sistema dispone sempre di un numero fisso di oggetti di IPC, fino al kernel
 \const{SHMMNI}, e potevano essere cambiati (come tutti gli altri limiti
 relativi al \textit{SysV-IPC}) solo con una ricompilazione del kernel.  A
 partire dal kernel 2.4.x è possibile cambiare questi valori a sistema attivo
-scrivendo sui file \sysctlrelfiled{kernel}{shmmni},
-\sysctlrelfiled{kernel}{msgmni} e \sysctlrelfiled{kernel}{sem} di
+scrivendo sui file \sysctlrelfile{kernel}{shmmni},
+\sysctlrelfile{kernel}{msgmni} e \sysctlrelfiled{kernel}{sem} di
 \file{/proc/sys/kernel} o con l'uso di \func{sysctl}.
 
 \begin{figure}[!htb]
@@ -1151,7 +1151,7 @@ numero di oggetti presenti viene sommato il valore corrente del campo
 
 Questo in realtà è quanto avveniva fino ai kernel della serie 2.2, dalla serie
 2.4 viene usato lo stesso fattore di moltiplicazione per qualunque tipo di
-oggetto, utilizzando il valore dalla costante \const{IPCMNI} (definita in
+oggetto, utilizzando il valore dalla costante \constd{IPCMNI} (definita in
 \file{include/linux/ipc.h}), che indica il limite massimo complessivo per il
 numero di tutti gli oggetti presenti nel \textit{SysV-IPC}, ed il cui default
 è 32768.  Si evita così il riutilizzo degli stessi numeri, e si fa sì che
@@ -1267,10 +1267,10 @@ validi.
 
 Se invece si vuole creare una nuova coda di messaggi \param{flag} non può
 essere nullo e deve essere fornito come maschera binaria, impostando il bit
-corrispondente al valore \const{IPC\_CREAT}. In questo caso i nove bit meno
+corrispondente al valore \constd{IPC\_CREAT}. In questo caso i nove bit meno
 significativi di \param{flag} saranno usati come permessi per il nuovo
 oggetto, secondo quanto illustrato in sez.~\ref{sec:ipc_sysv_access_control}.
-Se si imposta anche il bit corrispondente a \const{IPC\_EXCL} la funzione avrà
+Se si imposta anche il bit corrispondente a \constd{IPC\_EXCL} la funzione avrà
 successo solo se l'oggetto non esiste già, fallendo con un errore di
 \errcode{EEXIST} altrimenti.
 
@@ -1292,11 +1292,11 @@ creazione di una nuova coda.
     & \textbf{Significato} \\
     \hline
     \hline
-    \const{MSGMNI}&   16& \file{msgmni} & Numero massimo di code di
+    \constd{MSGMNI}&   16& \file{msgmni} & Numero massimo di code di
                                           messaggi.\\
-    \const{MSGMAX}& 8192& \file{msgmax} & Dimensione massima di un singolo
+    \constd{MSGMAX}& 8192& \file{msgmax} & Dimensione massima di un singolo
                                           messaggio.\\
-    \const{MSGMNB}&16384& \file{msgmnb} & Dimensione massima del contenuto di 
+    \constd{MSGMNB}&16384& \file{msgmnb} & Dimensione massima del contenuto di 
                                           una coda.\\
     \hline
   \end{tabular}
@@ -1435,17 +1435,17 @@ comportamento della funzione dipende dal valore dell'argomento \param{cmd},
 che specifica il tipo di azione da eseguire. I valori possibili
 per \param{cmd} sono:
 \begin{basedescript}{\desclabelwidth{1.6cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{IPC\_STAT}] Legge le informazioni riguardo la coda nella
+\item[\constd{IPC\_STAT}] Legge le informazioni riguardo la coda nella
   struttura \struct{msqid\_ds} indicata da \param{buf}. Occorre avere il
   permesso di lettura sulla coda.
-\item[\const{IPC\_RMID}] Rimuove la coda, cancellando tutti i dati, con
+\item[\constd{IPC\_RMID}] Rimuove la coda, cancellando tutti i dati, con
   effetto immediato. Tutti i processi che cercheranno di accedere alla coda
   riceveranno un errore di \errcode{EIDRM}, e tutti processi in attesa su
   funzioni di lettura o di scrittura sulla coda saranno svegliati ricevendo
   il medesimo errore. Questo comando può essere eseguito solo da un processo
   con \ids{UID} effettivo corrispondente al creatore o al proprietario della
   coda, o all'amministratore.
-\item[\const{IPC\_SET}] Permette di modificare i permessi ed il proprietario
+\item[\constd{IPC\_SET}] Permette di modificare i permessi ed il proprietario
   della coda, ed il limite massimo sulle dimensioni del totale dei messaggi in
   essa contenuti (\var{msg\_qbytes}). I valori devono essere passati in una
   struttura \struct{msqid\_ds} puntata da \param{buf}.  Per modificare i
@@ -1459,8 +1459,8 @@ per \param{cmd} sono:
 \end{basedescript}
 
 A questi tre valori, che sono quelli previsti dallo standard, su Linux se ne
-affiancano altri tre (\const{IPC\_INFO}, \const{MSG\_STAT} e
-\const{MSG\_INFO}) introdotti ad uso del programma \cmd{ipcs} per ottenere le
+affiancano altri tre (\constd{IPC\_INFO}, \constd{MSG\_STAT} e
+\constd{MSG\_INFO}) introdotti ad uso del programma \cmd{ipcs} per ottenere le
 informazioni generali relative alle risorse usate dalle code di
 messaggi. Questi potranno essere modificati o rimossi in favore dell'uso di
 \texttt{/proc}, per cui non devono essere usati e non li tratteremo.
@@ -1533,7 +1533,7 @@ argomento è solo quella del messaggio, non quella di tutta la struttura, se
 cioè \var{message} è una propria struttura che si passa alla funzione,
 \param{msgsz} dovrà essere uguale a \code{sizeof(message)-sizeof(long)}, (se
 consideriamo il caso dell'esempio in fig.~\ref{fig:ipc_msbuf}, \param{msgsz}
-dovrà essere pari a \const{LENGTH}).
+dovrà essere pari a \var{LENGTH}).
 
 Per capire meglio il funzionamento della funzione riprendiamo in
 considerazione la struttura della coda illustrata in
@@ -1550,7 +1550,7 @@ della funzione. Di norma, quando si specifica un valore nullo, la funzione
 ritorna immediatamente a meno che si sia ecceduto il valore di
 \var{msg\_qbytes}, o il limite di sistema sul numero di messaggi, nel qual
 caso si blocca.  Se si specifica per \param{flag} il valore
-\const{IPC\_NOWAIT} la funzione opera in modalità non-bloccante, ed in questi
+\constd{IPC\_NOWAIT} la funzione opera in modalità non-bloccante, ed in questi
 casi ritorna immediatamente con un errore di \errcode{EAGAIN}.
 
 Se non si specifica \const{IPC\_NOWAIT} la funzione resterà bloccata fintanto
@@ -1602,11 +1602,11 @@ scrivendolo sulla struttura puntata da \param{msgp}, che dovrà avere un
 formato analogo a quello di fig.~\ref{fig:ipc_msbuf}.  Una volta estratto, il
 messaggio sarà rimosso dalla coda.  L'argomento \param{msgsz} indica la
 lunghezza massima del testo del messaggio (equivalente al valore del parametro
-\const{LENGTH} nell'esempio di fig.~\ref{fig:ipc_msbuf}).
+\var{LENGTH} nell'esempio di fig.~\ref{fig:ipc_msbuf}).
 
 Se il testo del messaggio ha lunghezza inferiore a \param{msgsz} esso viene
 rimosso dalla coda; in caso contrario, se \param{msgflg} è impostato a
-\const{MSG\_NOERROR}, il messaggio viene troncato e la parte in eccesso viene
+\constd{MSG\_NOERROR}, il messaggio viene troncato e la parte in eccesso viene
 perduta, altrimenti il messaggio non viene estratto e la funzione ritorna con
 un errore di \errcode{E2BIG}.
 
@@ -1630,7 +1630,7 @@ coda, è quello meno recente); in particolare:
 Il valore di \param{msgflg} permette di controllare il comportamento della
 funzione, esso può essere nullo o una maschera binaria composta da uno o più
 valori.  Oltre al precedente \const{MSG\_NOERROR}, sono possibili altri due
-valori: \const{MSG\_EXCEPT}, che permette, quando \param{msgtyp} è positivo,
+valori: \constd{MSG\_EXCEPT}, che permette, quando \param{msgtyp} è positivo,
 di leggere il primo messaggio nella coda con tipo diverso da \param{msgtyp}, e
 \const{IPC\_NOWAIT} che causa il ritorno immediato della funzione quando non
 ci sono messaggi sulla coda.
@@ -2020,17 +2020,17 @@ direttamente nel file \sysctlfile{kernel/sem}.
     \textbf{Costante} & \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \const{SEMMNI}&          128 & Numero massimo di insiemi di semafori.\\
-    \const{SEMMSL}&          250 & Numero massimo di semafori per insieme.\\
-    \const{SEMMNS}&\const{SEMMNI}*\const{SEMMSL}& Numero massimo di semafori
-                                   nel sistema.\\
-    \const{SEMVMX}&        32767 & Massimo valore per un semaforo.\\
-    \const{SEMOPM}&           32 & Massimo numero di operazioni per chiamata a
-                                   \func{semop}. \\
-    \const{SEMMNU}&\const{SEMMNS}& Massimo numero di strutture di ripristino.\\
-    \const{SEMUME}&\const{SEMOPM}& Massimo numero di voci di ripristino.\\
-    \const{SEMAEM}&\const{SEMVMX}& Valore massimo per l'aggiustamento
-                                   all'uscita. \\
+    \constd{SEMMNI}&          128 & Numero massimo di insiemi di semafori.\\
+    \constd{SEMMSL}&          250 & Numero massimo di semafori per insieme.\\
+    \constd{SEMMNS}&\const{SEMMNI}*\const{SEMMSL}& Numero massimo di semafori
+                                                   nel sistema.\\
+    \constd{SEMVMX}&        32767 & Massimo valore per un semaforo.\\
+    \constd{SEMOPM}&           32 & Massimo numero di operazioni per chiamata a
+                                    \func{semop}. \\
+    \constd{SEMMNU}&\const{SEMMNS}& Massimo numero di strutture di ripristino.\\
+    \constd{SEMUME}&\const{SEMOPM}& Massimo numero di voci di ripristino.\\
+    \constd{SEMAEM}&\const{SEMVMX}& Valore massimo per l'aggiustamento
+                                    all'uscita. \\
     \hline
   \end{tabular}
   \caption{Valori delle costanti associate ai limiti degli insiemi di
@@ -2099,7 +2099,7 @@ Nelle versioni più vecchie delle \acr{glibc} questa unione veniva definita in
 \file{sys/sem.h}, ma nelle versioni più recenti questo non avviene più in
 quanto lo standard POSIX.1-2001 richiede che sia sempre definita a cura del
 chiamante. In questa seconda evenienza le \acr{glibc} definiscono però la
-macro \macro{\_SEM\_SEMUN\_UNDEFINED} che può essere usata per controllare la
+macro \macrod{\_SEM\_SEMUN\_UNDEFINED} che può essere usata per controllare la
 situazione.
 
 Come già accennato sia il comportamento della funzione che il numero di
@@ -2126,40 +2126,40 @@ i seguenti:
   \var{sem\_ctime}.  L'\ids{UID} effettivo del processo deve corrispondere o
   al creatore o al proprietario dell'insieme, o all'amministratore.
   L'argomento \param{semnum} viene ignorato.
-\item[\const{GETALL}] Restituisce il valore corrente di ciascun semaforo
+\item[\constd{GETALL}] Restituisce il valore corrente di ciascun semaforo
   dell'insieme (corrispondente al campo \var{semval} di \struct{sem}) nel
   vettore indicato da \param{arg.array}. Occorre avere il permesso di lettura.
   L'argomento \param{semnum} viene ignorato.
-\item[\const{GETNCNT}] Restituisce come valore di ritorno della funzione il
+\item[\constd{GETNCNT}] Restituisce come valore di ritorno della funzione il
   numero di processi in attesa che il semaforo \param{semnum} dell'insieme
   \param{semid} venga incrementato (corrispondente al campo \var{semncnt} di
   \struct{sem}). Va invocata con tre argomenti.  Occorre avere il permesso di
   lettura.
-\item[\const{GETPID}] Restituisce come valore di ritorno della funzione il
+\item[\constd{GETPID}] Restituisce come valore di ritorno della funzione il
   \ids{PID} dell'ultimo processo che ha compiuto una operazione sul semaforo
   \param{semnum} dell'insieme \param{semid} (corrispondente al campo
   \var{sempid} di \struct{sem}). Va invocata con tre argomenti.  Occorre avere
   il permesso di lettura.
-\item[\const{GETVAL}] Restituisce come valore di ritorno della funzione il il
+\item[\constd{GETVAL}] Restituisce come valore di ritorno della funzione il il
   valore corrente del semaforo \param{semnum} dell'insieme \param{semid}
   (corrispondente al campo \var{semval} di \struct{sem}). Va invocata con tre
   argomenti.  Occorre avere il permesso di lettura.
-\item[\const{GETZCNT}] Restituisce come valore di ritorno della funzione il
+\item[\constd{GETZCNT}] Restituisce come valore di ritorno della funzione il
   numero di processi in attesa che il valore del semaforo \param{semnum}
   dell'insieme \param{semid} diventi nullo (corrispondente al campo
   \var{semncnt} di \struct{sem}). Va invocata con tre argomenti.  Occorre
   avere il permesso di lettura.
-\item[\const{SETALL}] Inizializza il valore di tutti i semafori dell'insieme,
+\item[\constd{SETALL}] Inizializza il valore di tutti i semafori dell'insieme,
   aggiornando il campo \var{sem\_ctime} di \struct{semid\_ds}. I valori devono
   essere passati nel vettore indicato da \param{arg.array}.  Si devono avere i
   privilegi di scrittura.  L'argomento \param{semnum} viene ignorato.
-\item[\const{SETVAL}] Inizializza il semaforo \param{semnum} al valore passato
+\item[\constd{SETVAL}] Inizializza il semaforo \param{semnum} al valore passato
   dall'argomento \param{arg.val}, aggiornando il campo \var{sem\_ctime} di
   \struct{semid\_ds}.  Si devono avere i privilegi di scrittura.
 \end{basedescript}
 
 Come per \func{msgctl} esistono tre ulteriori valori, \const{IPC\_INFO},
-\const{SEM\_STAT} e \const{SEM\_INFO}, specifici di Linux e fuori da ogni
+\constd{SEM\_STAT} e \constd{SEM\_INFO}, specifici di Linux e fuori da ogni
 standard, creati specificamente ad uso del comando \cmd{ipcs}. Dato che anche
 questi potranno essere modificati o rimossi, non devono essere utilizzati e
 pertanto non li tratteremo.
@@ -2304,7 +2304,7 @@ un valore nullo di \var{sem\_num}.
 
 Il campo \var{sem\_flg} è un flag, mantenuto come maschera binaria, per il
 quale possono essere impostati i due valori \const{IPC\_NOWAIT} e
-\const{SEM\_UNDO}.  Impostando \const{IPC\_NOWAIT} si fa si che in tutti quei
+\constd{SEM\_UNDO}.  Impostando \const{IPC\_NOWAIT} si fa si che in tutti quei
 casi in cui l'esecuzione di una operazione richiederebbe di porre il processo
 vada nello stato di \textit{sleep}, invece di bloccarsi \func{semop} ritorni
 immediatamente (abortendo così le eventuali operazioni restanti) con un errore
@@ -2587,7 +2587,7 @@ l'argomento \param{flag}, specifici di \func{shmget}, attinenti alle modalità
 di gestione del segmento di memoria condivisa in relazione al sistema della
 memoria virtuale.
 
-Il primo dei due flag è \const{SHM\_HUGETLB} che consente di richiedere la
+Il primo dei due flag è \constd{SHM\_HUGETLB} che consente di richiedere la
 creazione del segmento usando una \textit{huge page}, le pagine di memoria di
 grandi dimensioni introdotte con il kernel 2.6 per ottimizzare le prestazioni
 nei sistemi più recenti che hanno grandi quantità di memoria. L'operazione è
@@ -2596,7 +2596,7 @@ privilegiata e richiede che il processo abbia la \textit{capability}
 portabile.
 
 Il secondo flag aggiuntivo, introdotto a partire dal kernel 2.6.15, è
-\const{SHM\_NORESERVE}, ed ha lo stesso scopo del flag \const{MAP\_NORESERVE}
+\constd{SHM\_NORESERVE}, ed ha lo stesso scopo del flag \const{MAP\_NORESERVE}
 di \func{mmap} (vedi sez.~\ref{sec:file_memory_map}): non vengono riservate
 delle pagine di swap ad uso del meccanismo del \textit{copy on write} per
 mantenere le modifiche fatte sul segmento. Questo significa che caso di
@@ -2685,27 +2685,27 @@ che permettono di cambiarne il valore.
     & \textbf{Significato} \\
     \hline
     \hline
-    \const{SHMALL}& 0x200000&\sysctlrelfile{kernel}{shmall}
-                            & Numero massimo di pagine che 
-                              possono essere usate per i segmenti di
-                              memoria condivisa.\\
-    \const{SHMMAX}&0x2000000&\sysctlrelfile{kernel}{shmmax} 
-                            & Dimensione massima di un segmento di memoria
-                              condivisa.\\ 
-    \const{SHMMNI}&     4096&\sysctlrelfile{kernel}{msgmni}
-                            & Numero massimo di segmenti di memoria condivisa
+    \constd{SHMALL}& 0x200000&\sysctlrelfiled{kernel}{shmall}
+                             & Numero massimo di pagine che 
+                               possono essere usate per i segmenti di
+                               memoria condivisa.\\
+    \constd{SHMMAX}&0x2000000&\sysctlrelfiled{kernel}{shmmax} 
+                             & Dimensione massima di un segmento di memoria
+                               condivisa.\\ 
+    \constd{SHMMNI}&     4096&\sysctlrelfiled{kernel}{shmmni}
+                             & Numero massimo di segmenti di memoria condivisa
                               presenti nel kernel.\\ 
-    \const{SHMMIN}&        1& ---         & Dimensione minima di un segmento di
-                                            memoria condivisa.\\
-    \const{SHMLBA}&\const{PAGE\_SIZE}&--- & Limite inferiore per le dimensioni
-                                            minime di un segmento (deve essere
-                                            allineato alle dimensioni di una
-                                            pagina di memoria).\\
-    \const{SHMSEG}&   ---   &     ---     & Numero massimo di segmenti di
-                                            memoria condivisa per ciascun
-                                            processo (l'implementazione non
-                                            prevede l'esistenza di questo
-                                            limite).\\
+    \constd{SHMMIN}&        1& ---         & Dimensione minima di un segmento di
+                                             memoria condivisa.\\
+    \constd{SHMLBA}&\const{PAGE\_SIZE}&--- & Limite inferiore per le dimensioni
+                                             minime di un segmento (deve essere
+                                             allineato alle dimensioni di una
+                                             pagina di memoria).\\
+    \constd{SHMSEG}&   ---   &     ---     & Numero massimo di segmenti di
+                                             memoria condivisa per ciascun
+                                             processo (l'implementazione non
+                                             prevede l'esistenza di questo
+                                             limite).\\
 
 
     \hline
@@ -2775,7 +2775,7 @@ consentono di estendere le funzionalità, ovviamente non devono essere usati se
 si ha a cuore la portabilità. Questi comandi aggiuntivi sono:
 
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SHM\_LOCK}] Abilita il \textit{memory locking} sul segmento di
+\item[\constd{SHM\_LOCK}] Abilita il \textit{memory locking} sul segmento di
   memoria condivisa, impedendo che la memoria usata per il segmento venga
   salvata su disco dal meccanismo della memoria virtuale. Come illustrato in
   sez.~\ref{sec:proc_mem_lock} fino al kernel 2.6.9 solo l'amministratore
@@ -2784,13 +2784,13 @@ si ha a cuore la portabilità. Questi comandi aggiuntivi sono:
   2.6.10 anche gli utenti normali possono farlo fino al limite massimo
   determinato da \const{RLIMIT\_MEMLOCK} (vedi
   sez.~\ref{sec:sys_resource_limit}).
-\item[\const{SHM\_UNLOCK}] Disabilita il \textit{memory locking} sul segmento
+\item[\constd{SHM\_UNLOCK}] Disabilita il \textit{memory locking} sul segmento
   di memoria condivisa.  Fino al kernel 2.6.9 solo l'amministratore poteva
   utilizzare questo comando in corrispondenza di un segmento da lui bloccato.
 \end{basedescript}
 
 A questi due, come per \func{msgctl} e \func{semctl}, si aggiungono tre
-ulteriori valori, \const{IPC\_INFO}, \const{MSG\_STAT} e \const{MSG\_INFO},
+ulteriori valori, \const{IPC\_INFO}, \constd{SHM\_STAT} e \constd{SHM\_INFO},
 introdotti ad uso del programma \cmd{ipcs} per ottenere le informazioni
 generali relative alle risorse usate dai segmenti di memoria condivisa. Dato
 che potranno essere modificati o rimossi in favore dell'uso di \texttt{/proc},
@@ -2873,14 +2873,14 @@ momento sono sono tre e sono identificati dalle costanti \const{SHM\_RND},
 \const{SHM\_RDONLY} e \const{SHM\_REMAP} che vanno combinate con un OR
 aritmetico.  
 
-Specificando \const{SHM\_RND} si evita che \func{shmat} ritorni un errore
+Specificando \constd{SHM\_RND} si evita che \func{shmat} ritorni un errore
 quando \param{shmaddr} non è allineato ai confini di una pagina. Si può quindi
 usare un valore qualunque per \param{shmaddr}, e il segmento verrà comunque
 agganciato, ma al più vicino multiplo di \const{SHMLBA}; il nome della
 costante sta infatti per \textit{rounded}, e serve per specificare un
 indirizzo come arrotondamento.
 
-L'uso di \const{SHM\_RDONLY} permette di agganciare il segmento in sola
+L'uso di \constd{SHM\_RDONLY} permette di agganciare il segmento in sola
 lettura (si ricordi che anche le pagine di memoria hanno dei permessi), in tal
 caso un tentativo di scrivere sul segmento comporterà una violazione di
 accesso con l'emissione di un segnale di \signal{SIGSEGV}. Il comportamento
@@ -2889,13 +2889,13 @@ lettura e scrittura (ed il processo deve aver questi permessi in
 \var{shm\_perm}), non è prevista la possibilità di agganciare un segmento in
 sola scrittura.
 
-Infine \const{SHM\_REMAP} è una estensione specifica di Linux (quindi non
+Infine \constd{SHM\_REMAP} è una estensione specifica di Linux (quindi non
 portabile) che indica che la mappatura del segmento deve rimpiazzare ogni
 precedente mappatura esistente nell'intervallo iniziante
 all'indirizzo \param{shmaddr} e di dimensione pari alla lunghezza del
 segmento. In condizioni normali questo tipo di richiesta fallirebbe con un
 errore di \errval{EINVAL}. Ovviamente usando \const{SHM\_REMAP}
-l'argomento  \param{shmaddr} non può essere nullo. 
+l'argomento \param{shmaddr} non può essere nullo.
 
 In caso di successo la funzione \func{shmat} aggiorna anche i seguenti campi
 della struttura \struct{shmid\_ds}:
@@ -3785,7 +3785,7 @@ dei limiti sono:
 \item[\sysctlfiled{fs/mqueue/msg\_max}] Indica il valore massimo del numero di
   messaggi in una coda e agisce come limite superiore per il valore di
   \var{attr->mq\_maxmsg} in \func{mq\_open}. Il suo valore di default è 10. Il
-  valore massimo è \const{HARD\_MAX} che vale \code{(131072/sizeof(void *))},
+  valore massimo è \constd{HARD\_MAX} che vale \code{(131072/sizeof(void *))},
   ed il valore minimo 1 (ma era 10 per i kernel precedenti il 2.6.28). Questo
   limite viene ignorato per i processi con privilegi amministrativi (più
   precisamente con la \textit{capability} \const{CAP\_SYS\_RESOURCE}) ma
@@ -3938,7 +3938,8 @@ I rispettivi prototipi sono:
 \fhead{time.h}
 \fdecl{int mq\_timedsend(mqd\_t mqdes, const char *msg\_ptr, size\_t
     msg\_len, \\ 
-\phantom{int mq\_timedsend(}unsigned int msg\_prio, const struct timespec *abs\_timeout)}
+\phantom{int mq\_timedsend(}unsigned int msg\_prio, const struct timespec
+*abs\_timeout)} 
 \fdesc{Esegue l'inserimento di un messaggio su una coda entro un tempo
   specificato}
 }
@@ -3973,7 +3974,7 @@ priorità maggiore vengono inseriti davanti a quelli di priorità inferiore, e
 quindi saranno riletti per primi. A parità del valore della priorità il
 messaggio sarà inserito in coda a tutti quelli che hanno la stessa priorità
 che quindi saranno letti con la politica di una \textit{fifo}. Il valore della
-priorità non può eccedere il limite di sistema \const{MQ\_PRIO\_MAX}, che al
+priorità non può eccedere il limite di sistema \constd{MQ\_PRIO\_MAX}, che al
 momento è pari a 32768.
 
 Qualora la coda sia piena, entrambe le funzioni si bloccano, a meno che non
@@ -4194,7 +4195,7 @@ mount -t tmpfs -o size=128M,nr_inodes=10k,mode=700 tmpfs /mytmpfs
 Il filesystem riconosce, oltre quelle mostrate, le opzioni \texttt{uid} e
 \texttt{gid} che identificano rispettivamente utente e gruppo cui assegnarne
 la titolarità, e \texttt{nr\_blocks} che permette di specificarne la
-dimensione in blocchi, cioè in multipli di \const{PAGECACHE\_SIZE} che in
+dimensione in blocchi, cioè in multipli di \constd{PAGECACHE\_SIZE} che in
 questo caso è l'unità di allocazione elementare.
 
 La funzione che permette di aprire un segmento di memoria condivisa POSIX, ed
@@ -4424,7 +4425,7 @@ esistente o per crearne uno nuovi, i relativi prototipi sono:
 \fdesc{Crea un semaforo o ne apre uno esistente.}
 }
 {La funzione ritorna l'indirizzo del semaforo in caso di successo e
-  \const{SEM\_FAILED} per un errore, nel qual caso \var{errno} assumerà uno
+  \constd{SEM\_FAILED} per un errore, nel qual caso \var{errno} assumerà uno
   dei valori:
   \begin{errlist}
     \item[\errcode{EACCES}] il semaforo esiste ma non si hanno permessi
@@ -4432,7 +4433,7 @@ esistente o per crearne uno nuovi, i relativi prototipi sono:
     \item[\errcode{EEXIST}] si sono specificati \const{O\_CREAT} e
       \const{O\_EXCL} ma il semaforo esiste.
     \item[\errcode{EINVAL}] il valore di \param{value} eccede
-      \const{SEM\_VALUE\_MAX} o il nome è solo ``\texttt{/}''.
+      \constd{SEM\_VALUE\_MAX} o il nome è solo ``\texttt{/}''.
     \item[\errcode{ENAMETOOLONG}] si è utilizzato un nome troppo lungo.
     \item[\errcode{ENOENT}] non si è usato \const{O\_CREAT} ed il nome
       specificato non esiste.
@@ -4527,7 +4528,7 @@ semaforo con una chiamata a \func{sem\_post}) così che poi essa possa
 decrementarlo con successo e proseguire.
 
 Si tenga presente che la funzione può sempre essere interrotta da un segnale,
-nel qual caso si avrà un errore di \const{EINTR}; inoltre questo avverrà
+nel qual caso si avrà un errore di \errval{EINTR}; inoltre questo avverrà
 comunque, anche qualora si fosse richiesta la gestione con la semantica BSD,
 installando il gestore del suddetto segnale con l'opzione \const{SA\_RESTART}
 (vedi sez.~\ref{sec:sig_sigaction}) per riavviare le \textit{system call}
index a7d778b..f113a7e 100644 (file)
@@ -304,24 +304,24 @@ priorità e politiche di distribuzione degli stessi.
     \multicolumn{2}{|c|}{\textbf{Valore}}&\textbf{Significato}\\
     \hline
     \hline
-    \const{IPTOS\_LOWDELAY}     &\texttt{0x10}& Minimizza i ritardi
+    \constd{IPTOS\_LOWDELAY}    &\texttt{0x10}& Minimizza i ritardi
                                                 per rendere più veloce
                                                 possibile la ritrasmissione
                                                 dei pacchetti (usato per
                                                 traffico interattivo di
                                                 controllo come SSH).\\
-    \const{IPTOS\_THROUGHPUT}   &\texttt{0x8} & Ottimizza la trasmissione
+    \constd{IPTOS\_THROUGHPUT}  &\texttt{0x8} & Ottimizza la trasmissione
                                                 per rendere il più elevato
                                                 possibile il flusso netto di
                                                 dati (usato su traffico dati,
                                                 come quello di FTP).\\ 
-    \const{IPTOS\_RELIABILITY}  &\texttt{0x4} & Ottimizza la trasmissione
+    \constd{IPTOS\_RELIABILITY} &\texttt{0x4} & Ottimizza la trasmissione
                                                 per ridurre al massimo le
                                                 perdite di pacchetti (usato su
                                                 traffico soggetto a rischio di
                                                 perdita di pacchetti come TFTP
                                                 o DHCP).\\
-   \const{IPTOS\_MINCOST}       &\texttt{0x2} & Indica i dati di riempimento,
+    \constd{IPTOS\_MINCOST}     &\texttt{0x2} & Indica i dati di riempimento,
                                                 dove non interessa se si ha
                                                 una bassa velocità di
                                                 trasmissione, da utilizzare
@@ -609,11 +609,10 @@ quello di IPv6 sono le seguenti:
   frammentazione di pacchetti troppo grandi potrà essere gestita solo ai
   capi della comunicazione (usando un'apposita estensione vedi
   sez.~\ref{sec:IP_ipv6_extens}).
-\item IPv6 richiede il supporto per il \itindex{Maximum~Transfer~Unit~(MTU)}
-  \textit{path MTU discovery} (cioè il protocollo per la selezione della
-  massima lunghezza del pacchetto); seppure questo sia in teoria opzionale,
-  senza di esso non sarà possibile inviare pacchetti più larghi della
-  dimensione minima (576 byte).
+\item IPv6 richiede il supporto per il \textit{path MTU discovery} (cioè il
+  protocollo per la selezione della massima lunghezza del pacchetto); seppure
+  questo sia in teoria opzionale, senza di esso non sarà possibile inviare
+  pacchetti più larghi della dimensione minima (576 byte).
 \end{itemize}
 
 \subsection{Gli indirizzi di IPv6}
index 2e1d070..6470c1f 100644 (file)
@@ -627,17 +627,18 @@ protocollo IP sono forniti nell'appendice sez.~\ref{sec:ip_protocol}.
 \subsection{User Datagram Protocol (UDP)}
 \label{sec:net_udp}
 
-UDP è un protocollo di trasporto molto semplice; la sua descrizione completa è
-contenuta dell'\href{http://www.ietf.org/rfc/rfc0768.txt}{RFC~768}, ma in
-sostanza esso è una semplice interfaccia al protocollo IP dal livello di
-trasporto. Quando un'applicazione usa UDP essa scrive un pacchetto di dati (il
-cosiddetto \textit{datagram} che da il nome al protocollo) su un socket, al
-pacchetto viene aggiunto un header molto semplice (per una descrizione più
-accurata vedi sez.~\ref{sec:udp_protocol}), e poi viene passato al livello
-superiore (IPv4 o IPv6 che sia) che lo spedisce verso la destinazione.  Dato
-che né IPv4 né IPv6 garantiscono l'affidabilità niente assicura che il
-pacchetto arrivi a destinazione, né che più pacchetti arrivino nello stesso
-ordine in cui sono stati spediti.
+Il protocollo UDP è un protocollo di trasporto molto semplice; la sua
+descrizione completa è contenuta
+dell'\href{http://www.ietf.org/rfc/rfc0768.txt}{RFC~768}, ma in sostanza esso
+è una semplice interfaccia al protocollo IP dal livello di trasporto. Quando
+un'applicazione usa UDP essa scrive un pacchetto di dati (il cosiddetto
+\textit{datagram} che da il nome al protocollo) su un socket, al pacchetto
+viene aggiunto un header molto semplice (per una descrizione più accurata vedi
+sez.~\ref{sec:udp_protocol}), e poi viene passato al livello superiore (IPv4 o
+IPv6 che sia) che lo spedisce verso la destinazione.  Dato che né IPv4 né IPv6
+garantiscono l'affidabilità niente assicura che il pacchetto arrivi a
+destinazione, né che più pacchetti arrivino nello stesso ordine in cui sono
+stati spediti.
 
 Pertanto il problema principale che si affronta quando si usa UDP è la
 mancanza di affidabilità, se si vuole essere sicuri che i pacchetti arrivino a
@@ -698,9 +699,9 @@ minuti.
 Inoltre, per tenere conto delle diverse condizioni in cui può trovarsi la
 linea di comunicazione, TCP comprende anche un algoritmo di calcolo dinamico
 del tempo di andata e ritorno dei pacchetti fra un client e un server (il
-cosiddetto RTT, \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time}), che
-lo rende in grado di adattarsi alle condizioni della rete per non generare
-inutili ritrasmissioni o cadere facilmente in timeout.
+cosiddetto RTT, \textit{Round Trip Time}), che lo rende in grado di adattarsi
+alle condizioni della rete per non generare inutili ritrasmissioni o cadere
+facilmente in timeout.
 
 Inoltre TCP è in grado di preservare l'ordine dei dati assegnando un numero di
 sequenza ad ogni byte che trasmette. Ad esempio se un'applicazione scrive 3000
@@ -846,7 +847,7 @@ annuncia all'altro capo della connessione la dimensione massima dimensione del
 segmento di dati che può essere ricevuto, così da evitare la
 frammentazione. Di norma viene impostato alla dimensione della MTU
 dell'interfaccia meno la lunghezza delle intestazioni di IP e TCP, in Linux il
-default, mantenuto nella costante \const{TCP\_MSS} è 512.
+default, mantenuto nella costante \constd{TCP\_MSS} è 512.
 
 \itindend{Maximum~Transfer~Unit~(MTU)}
 
index 6d73bee..3f2e28a 100644 (file)
@@ -55,11 +55,10 @@ utilizzando per il tipo di socket il valore \const{SOCK\_DGRAM}.
 Questa differenza comporta ovviamente che anche le modalità con cui si usano i
 socket UDP sono completamente diverse rispetto ai socket TCP, ed in
 particolare non esistendo il concetto di connessione non esiste il meccanismo
-del \itindex{three~way~handshake} \textit{three way handshake} né quello degli
-stati del protocollo. In realtà tutto quello che avviene nella comunicazione
-attraverso dei socket UDP è la trasmissione di un pacchetto da un client ad un
-server o viceversa, secondo lo schema illustrato in
-fig.~\ref{fig:UDP_packet-exchange}.
+del \textit{three way handshake} né quello degli stati del protocollo. In
+realtà tutto quello che avviene nella comunicazione attraverso dei socket UDP
+è la trasmissione di un pacchetto da un client ad un server o viceversa,
+secondo lo schema illustrato in fig.~\ref{fig:UDP_packet-exchange}.
 
 \begin{figure}[!htb]
   \centering \includegraphics[width=10cm]{img/udp_connection}  
@@ -210,11 +209,11 @@ qualora si sia specificato un indirizzo è possibile ricevere un errore di
 Finora abbiamo tralasciato l'argomento \param{flags}; questo è un intero usato
 come maschera binaria che permette di impostare una serie di modalità di
 funzionamento della comunicazione attraverso il socket (come
-\const{MSG\_NOSIGNAL} che impedisce l'invio del segnale \signal{SIGPIPE} quando
-si è già chiuso il capo locale della connessione). Torneremo con maggiori
-dettagli sul significato di questo argomento in sez.~\ref{sec:net_sendmsg},
-dove tratteremo le funzioni avanzate dei socket, per il momento ci si può
-limitare ad usare sempre un valore nullo.
+\constd{MSG\_NOSIGNAL} che impedisce l'invio del segnale \signal{SIGPIPE}
+quando si è già chiuso il capo locale della connessione). Torneremo con
+maggiori dettagli sul significato di questo argomento in
+sez.~\ref{sec:net_sendmsg}, dove tratteremo le funzioni avanzate dei socket,
+per il momento ci si può limitare ad usare sempre un valore nullo.
 
 La seconda funzione utilizzata nella comunicazione fra socket UDP è
 \funcd{recvfrom}, che serve a ricevere i dati inviati da un altro socket; il
index 1a51f3c..db19575 100644 (file)
@@ -2962,8 +2962,8 @@ corrente. Benché la funzione sia utilizzabile anche con processi sottoposti a
 politica ordinaria essa ha senso soltanto per quelli \textit{real-time}, dato
 che per i primi la priorità statica può essere soltanto nulla.  La
 disponibilità di entrambe le funzioni può essere verificata controllando la
-macro \macrod{\_POSIX\_PRIORITY\_SCHEDULING} che è definita
-nell'\textit{header file} \headfiled{sched.h}.
+macro \macro{\_POSIX\_PRIORITY\_SCHEDULING} che è definita nell'\textit{header
+  file} \headfiled{sched.h}.
 
 Se invece si vuole sapere quale è politica di \textit{scheduling} di un
 processo si può usare la funzione di sistema \funcd{sched\_getscheduler}, il
@@ -4477,8 +4477,8 @@ parte del programmatore.
 
 In genere le funzioni di libreria non sono rientranti, molte di esse ad
 esempio utilizzano variabili statiche, la \acr{glibc} però mette a
-disposizione due macro di compilatore, \macrod{\_REENTRANT} e
-\macrod{\_THREAD\_SAFE}, la cui definizione attiva le versioni rientranti di
+disposizione due macro di compilatore, \macro{\_REENTRANT} e
+\macro{\_THREAD\_SAFE}, la cui definizione attiva le versioni rientranti di
 varie funzioni di libreria, che sono identificate aggiungendo il suffisso
 \code{\_r} al nome della versione normale.
 
index e348bb1..f78b3db 100644 (file)
@@ -2824,7 +2824,7 @@ Secondo lo standard POSIX la profondità della coda è indicata dalla costante
 \constd{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
 standard POSIX che non abbiamo riportato esplicitamente in
 sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard,
-\constd{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una
+\macrod{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una
 dimensione variabile; fino alla versione 2.6.7 c'era un limite massimo globale
 che poteva essere impostato come parametro del kernel in
 \sysctlfiled{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A
@@ -3555,7 +3555,7 @@ singolo (in gergo \textit{one shot}).
 
 Infine, quando un timer non viene più utilizzato, lo si può cancellare,
 rimuovendolo dal sistema e recuperando le relative risorse, effettuando in
-sostanza l'operazione inversa rispetto a \funcd{timer\_create}. Per questo
+sostanza l'operazione inversa rispetto a \func{timer\_create}. Per questo
 compito lo standard prevede una apposita funzione di sistema,
 \funcd{timer\_delete}, il cui prototipo è:
 
index 78b2dc1..7d0d957 100644 (file)
@@ -296,43 +296,43 @@ comportamento del \textit{resolver}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{RES\_INIT}       & Viene attivato se è stata chiamata
-                              \func{res\_init}. \\
-    \const{RES\_DEBUG}      & Stampa dei messaggi di debug.\\
-    \const{RES\_AAONLY}     & Accetta solo risposte autoritative.\\
-    \const{RES\_USEVC}      & Usa connessioni TCP per contattare i server 
-                              invece che l'usuale UDP.\\
-    \const{RES\_PRIMARY}    & Interroga soltanto server DNS primari.
-                              \\
-    \const{RES\_IGNTC}      & Ignora gli errori di troncamento, non ritenta la
-                              richiesta con una connessione TCP.\\
-    \const{RES\_RECURSE}    & Imposta il bit che indica che si desidera
-                              eseguire una interrogazione ricorsiva.\\
-    \const{RES\_DEFNAMES}   & Se attivo \func{res\_search} aggiunge il nome
-                              del dominio di default ai nomi singoli (che non
-                              contengono cioè un ``\texttt{.}'').\\
-    \const{RES\_STAYOPEN}   & Usato con \const{RES\_USEVC} per mantenere
-                              aperte le connessioni TCP fra interrogazioni
-                              diverse. \\
-    \const{RES\_DNSRCH}     & Se attivo \func{res\_search} esegue le ricerche
-                              di nomi di macchine nel dominio corrente o nei
-                              domini ad esso sovrastanti.\\
-    \const{RES\_INSECURE1}  & Blocca i controlli di sicurezza di tipo 1.\\
-    \const{RES\_INSECURE2}  & Blocca i controlli di sicurezza di tipo 2.\\
-    \const{RES\_NOALIASES}  & Blocca l'uso della variabile di ambiente
-                              \envvar{HOSTALIASES}.\\ 
-    \const{RES\_USE\_INET6} & Restituisce indirizzi IPv6 con
-                              \func{gethostbyname}. \\
-    \const{RES\_ROTATE}     & Ruota la lista dei server DNS dopo ogni
-                              interrogazione.\\
-    \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}      & 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}.\\
+    \constd{RES\_INIT}       & Viene attivato se è stata chiamata
+                               \func{res\_init}. \\
+    \constd{RES\_DEBUG}      & Stampa dei messaggi di debug.\\
+    \constd{RES\_AAONLY}     & Accetta solo risposte autoritative.\\
+    \constd{RES\_USEVC}      & Usa connessioni TCP per contattare i server 
+                               invece che l'usuale UDP.\\
+    \constd{RES\_PRIMARY}    & Interroga soltanto server DNS primari.
+    \\
+    \constd{RES\_IGNTC}      & Ignora gli errori di troncamento, non ritenta la
+                               richiesta con una connessione TCP.\\
+    \constd{RES\_RECURSE}    & Imposta il bit che indica che si desidera
+                               eseguire una interrogazione ricorsiva.\\
+    \constd{RES\_DEFNAMES}   & Se attivo \func{res\_search} aggiunge il nome
+                               del dominio di default ai nomi singoli (che non
+                               contengono cioè un ``\texttt{.}'').\\
+    \constd{RES\_STAYOPEN}   & Usato con \const{RES\_USEVC} per mantenere
+                               aperte le connessioni TCP fra interrogazioni
+                               diverse. \\
+    \constd{RES\_DNSRCH}     & Se attivo \func{res\_search} esegue le ricerche
+                               di nomi di macchine nel dominio corrente o nei
+                               domini ad esso sovrastanti.\\
+    \constd{RES\_INSECURE1}  & Blocca i controlli di sicurezza di tipo 1.\\
+    \constd{RES\_INSECURE2}  & Blocca i controlli di sicurezza di tipo 2.\\
+    \constd{RES\_NOALIASES}  & Blocca l'uso della variabile di ambiente
+                               \envvar{HOSTALIASES}.\\ 
+    \constd{RES\_USE\_INET6} & Restituisce indirizzi IPv6 con
+                               \func{gethostbyname}. \\
+    \constd{RES\_ROTATE}     & Ruota la lista dei server DNS dopo ogni
+                               interrogazione.\\
+    \constd{RES\_NOCHECKNAME}& Non controlla i nomi per verificarne la
+                               correttezza sintattica. \\
+    \constd{RES\_KEEPTSIG}   & Non elimina i record di tipo \texttt{TSIG}.\\
+    \constd{RES\_BLAST}      & Effettua un ``\textit{blast}'' inviando
+                               simultaneamente le richieste a tutti i server;
+                               non ancora implementata. \\
+    \constd{RES\_DEFAULT}    & Combinazione di \const{RES\_RECURSE},
+                               \const{RES\_DEFNAMES} e \const{RES\_DNSRCH}.\\
     \hline
   \end{tabular}
   \caption{Costanti utilizzabili come valori per \var{\_res.options}.}
@@ -428,7 +428,7 @@ pratica oggi viene utilizzata soltanto quella degli indirizzi internet; le
 costanti che identificano dette classi, da usare come valore per l'argomento
 \param{class} delle precedenti funzioni, sono riportate in
 tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realtà anche una classe
-  \const{C\_CSNET} per la omonima rete, ma è stata dichiarata obsoleta.}
+  \constd{C\_CSNET} per la omonima rete, ma è stata dichiarata obsoleta.}
 
 \begin{table}[htb]
   \centering
@@ -438,12 +438,12 @@ tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realtà anche una classe
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{C\_IN}   & Indirizzi internet, in pratica i soli utilizzati oggi.\\
-    \const{C\_HS}   & Indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
-                      completamente estinti. \\
-    \const{C\_CHAOS}& Indirizzi per la rete \textit{Chaosnet}, un'altra rete
-                      sperimentale nata al MIT. \\
-    \const{C\_ANY}  & Indica un indirizzo di classe qualunque.\\
+    \constd{C\_IN}   & Indirizzi internet, in pratica i soli utilizzati oggi.\\
+    \constd{C\_HS}   & Indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
+                       completamente estinti. \\
+    \constd{C\_CHAOS}& Indirizzi per la rete \textit{Chaosnet}, un'altra rete
+                       sperimentale nata al MIT. \\
+    \constd{C\_ANY}  & Indica un indirizzo di classe qualunque.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative delle classi di indirizzi per l'argomento
@@ -476,47 +476,47 @@ normalmente sono anche usati come nomi per indicare i record.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{T\_A}     & Indirizzo di una stazione.\\
-    \const{T\_NS}    & Server DNS autoritativo per il dominio richiesto.\\
-    \const{T\_MD}    & Destinazione per la posta elettronica.\\
-    \const{T\_MF}    & Redistributore per la posta elettronica.\\
-    \const{T\_CNAME} & Nome canonico.\\
-    \const{T\_SOA}   & Inizio di una zona di autorità.\\
-    \const{T\_MB}    & Nome a dominio di una casella di posta.\\
-    \const{T\_MG}    & Nome di un membro di un gruppo di posta.\\
-    \const{T\_MR}    & Nome di un cambiamento di nome per la posta.\\
-    \const{T\_NULL}  & Record nullo.\\
-    \const{T\_WKS}   & Servizio noto.\\
-    \const{T\_PTR}   & Risoluzione inversa di un indirizzo numerico.\\
-    \const{T\_HINFO} & Informazione sulla stazione.\\
-    \const{T\_MINFO} & Informazione sulla casella di posta.\\
-    \const{T\_MX}    & Server cui instradare la posta per il dominio.\\
-    \const{T\_TXT}   & Stringhe di testo (libere).\\
-    \const{T\_RP}    & Nome di un responsabile (\textit{responsible person}).\\
-    \const{T\_AFSDB} & Database per una cella AFS.\\
-    \const{T\_X25}   & Indirizzo di chiamata per X.25.\\
-    \const{T\_ISDN}  & Indirizzo di chiamata per ISDN.\\
-    \const{T\_RT}    & Router.\\
-    \const{T\_NSAP}  & Indirizzo NSAP.\\
-    \const{T\_NSAP\_PTR}& Risoluzione inversa per NSAP (deprecato).\\
-    \const{T\_SIG}   & Firma digitale di sicurezza.\\
-    \const{T\_KEY}   & Chiave per firma.\\
-    \const{T\_PX}    & Corrispondenza per la posta X.400.\\
-    \const{T\_GPOS}  & Posizione geografica.\\
-    \const{T\_AAAA}  & Indirizzo IPv6.\\
-    \const{T\_LOC}   & Informazione di collocazione.\\
-    \const{T\_NXT}   & Dominio successivo.\\
-    \const{T\_EID}   & Identificatore di punto conclusivo.\\
-    \const{T\_NIMLOC}& Posizionatore \textit{nimrod}.\\
-    \const{T\_SRV}   & Servizio.\\
-    \const{T\_ATMA}  & Indirizzo ATM.\\
-    \const{T\_NAPTR} & Puntatore ad una \textit{naming authority}.\\
-    \const{T\_TSIG}  & Firma di transazione.\\
-    \const{T\_IXFR}  & Trasferimento di zona incrementale.\\
-    \const{T\_AXFR}  & Trasferimento di zona di autorità.\\
-    \const{T\_MAILB} & Trasferimento di record di caselle di posta.\\
-    \const{T\_MAILA} & Trasferimento di record di server di posta.\\
-    \const{T\_ANY}   & Valore generico.\\
+    \constd{T\_A}     & Indirizzo di una stazione.\\
+    \constd{T\_NS}    & Server DNS autoritativo per il dominio richiesto.\\
+    \constd{T\_MD}    & Destinazione per la posta elettronica.\\
+    \constd{T\_MF}    & Redistributore per la posta elettronica.\\
+    \constd{T\_CNAME} & Nome canonico.\\
+    \constd{T\_SOA}   & Inizio di una zona di autorità.\\
+    \constd{T\_MB}    & Nome a dominio di una casella di posta.\\
+    \constd{T\_MG}    & Nome di un membro di un gruppo di posta.\\
+    \constd{T\_MR}    & Nome di un cambiamento di nome per la posta.\\
+    \constd{T\_NULL}  & Record nullo.\\
+    \constd{T\_WKS}   & Servizio noto.\\
+    \constd{T\_PTR}   & Risoluzione inversa di un indirizzo numerico.\\
+    \constd{T\_HINFO} & Informazione sulla stazione.\\
+    \constd{T\_MINFO} & Informazione sulla casella di posta.\\
+    \constd{T\_MX}    & Server cui instradare la posta per il dominio.\\
+    \constd{T\_TXT}   & Stringhe di testo (libere).\\
+    \constd{T\_RP}    & Nome di un responsabile (\textit{responsible person}).\\
+    \constd{T\_AFSDB} & Database per una cella AFS.\\
+    \constd{T\_X25}   & Indirizzo di chiamata per X.25.\\
+    \constd{T\_ISDN}  & Indirizzo di chiamata per ISDN.\\
+    \constd{T\_RT}    & Router.\\
+    \constd{T\_NSAP}  & Indirizzo NSAP.\\
+    \constd{T\_NSAP\_PTR}& Risoluzione inversa per NSAP (deprecato).\\
+    \constd{T\_SIG}   & Firma digitale di sicurezza.\\
+    \constd{T\_KEY}   & Chiave per firma.\\
+    \constd{T\_PX}    & Corrispondenza per la posta X.400.\\
+    \constd{T\_GPOS}  & Posizione geografica.\\
+    \constd{T\_AAAA}  & Indirizzo IPv6.\\
+    \constd{T\_LOC}   & Informazione di collocazione.\\
+    \constd{T\_NXT}   & Dominio successivo.\\
+    \constd{T\_EID}   & Identificatore di punto conclusivo.\\
+    \constd{T\_NIMLOC}& Posizionatore \textit{nimrod}.\\
+    \constd{T\_SRV}   & Servizio.\\
+    \constd{T\_ATMA}  & Indirizzo ATM.\\
+    \constd{T\_NAPTR} & Puntatore ad una \textit{naming authority}.\\
+    \constd{T\_TSIG}  & Firma di transazione.\\
+    \constd{T\_IXFR}  & Trasferimento di zona incrementale.\\
+    \constd{T\_AXFR}  & Trasferimento di zona di autorità.\\
+    \constd{T\_MAILB} & Trasferimento di record di caselle di posta.\\
+    \constd{T\_MAILA} & Trasferimento di record di server di posta.\\
+    \constd{T\_ANY}   & Valore generico.\\
     \hline
   \end{tabular}
   \caption{Costanti identificative del tipo di record per l'argomento
@@ -578,15 +578,15 @@ tab.~\ref{tab:h_errno_values}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{HOST\_NOT\_FOUND} & L'indirizzo richiesto non è valido e la
+    \constd{HOST\_NOT\_FOUND}& L'indirizzo richiesto non è valido e la
                                macchina indicata è sconosciuta.\\
-    \const{NO\_ADDRESS}      & Il nome a dominio richiesto è valido, ma non ha
+    \constd{NO\_ADDRESS}     & Il nome a dominio richiesto è valido, ma non ha
                                un indirizzo associato ad esso
                                (alternativamente può essere indicato come 
-                               \const{NO\_DATA}).\\
-    \const{NO\_RECOVERY}     & Si è avuto un errore non recuperabile
+                               \constd{NO\_DATA}).\\
+    \constd{NO\_RECOVERY}    & Si è avuto un errore non recuperabile
                                nell'interrogazione di un server DNS.\\
-    \const{TRY\_AGAIN}       & Si è avuto un errore temporaneo
+    \constd{TRY\_AGAIN}      & Si è avuto un errore temporaneo
                                nell'interrogazione di un server DNS, si può
                                ritentare l'interrogazione in un secondo
                                tempo.\\
@@ -627,12 +627,11 @@ argomento (che si presume sia dato da \var{h\_errno}).
 \subsection{La risoluzione dei nomi a dominio}
 \label{sec:sock_name_services}
 
-La principale funzionalità del \itindex{resolver} \textit{resolver} resta
-quella di risolvere i nomi a dominio in indirizzi IP, per cui non ci
-dedicheremo oltre alle funzioni di richiesta generica ed esamineremo invece le
-funzioni a questo dedicate. La prima funzione è \funcd{gethostbyname} il cui
-scopo è ottenere l'indirizzo di una stazione noto il suo nome a dominio, il
-suo prototipo è:
+La principale funzionalità del \textit{resolver} resta quella di risolvere i
+nomi a dominio in indirizzi IP, per cui non ci dedicheremo oltre alle funzioni
+di richiesta generica ed esamineremo invece le funzioni a questo dedicate. La
+prima funzione è \funcd{gethostbyname} il cui scopo è ottenere l'indirizzo di
+una stazione noto il suo nome a dominio, il suo prototipo è:
 \begin{prototype}{netdb.h}
 {struct hostent *gethostbyname(const char *name)}
 
@@ -692,10 +691,10 @@ Con l'uso di \func{gethostbyname} normalmente si ottengono solo gli indirizzi
 IPv4, se si vogliono ottenere degli indirizzi IPv6 occorrerà prima impostare
 l'opzione \const{RES\_USE\_INET6} nel campo \texttt{\_res.options} e poi
 chiamare \func{res\_init} (vedi sez.~\ref{sec:sock_resolver_functions}) per
-modificare le opzioni del \itindex{resolver} \textit{resolver}; dato che
-questo non è molto comodo è stata definita\footnote{questa è una estensione
-  fornita dalle \acr{glibc}, disponibile anche in altri sistemi unix-like.}
-un'altra funzione, \funcd{gethostbyname2}, il cui prototipo è:
+modificare le opzioni del \textit{resolver}; dato che questo non è molto
+comodo è stata definita\footnote{questa è una estensione fornita dalle
+  \acr{glibc}, disponibile anche in altri sistemi unix-like.}  un'altra
+funzione, \funcd{gethostbyname2}, il cui prototipo è:
 \begin{functions}
   \headdecl{netdb.h} 
   \headdecl{sys/socket.h}
@@ -728,11 +727,11 @@ suoi risultati.
 
 Vediamo allora un primo esempio dell'uso delle funzioni di risoluzione, in
 fig.~\ref{fig:mygethost_example} è riportato un estratto del codice di un
-programma che esegue una semplice interrogazione al
-\itindex{resolver} \textit{resolver} usando \func{gethostbyname} e poi ne
-stampa a video i risultati. Al solito il sorgente completo, che comprende il
-trattamento delle opzioni ed una funzione per stampare un messaggio di aiuto,
-è nel file \texttt{mygethost.c} dei sorgenti allegati alla guida.
+programma che esegue una semplice interrogazione al \textit{resolver} usando
+\func{gethostbyname} e poi ne stampa a video i risultati. Al solito il
+sorgente completo, che comprende il trattamento delle opzioni ed una funzione
+per stampare un messaggio di aiuto, è nel file \texttt{mygethost.c} dei
+sorgenti allegati alla guida.
 
 Il programma richiede un solo argomento che specifichi il nome da cercare,
 senza il quale (\texttt{\small 15--18}) esce con un errore. Dopo di che
@@ -968,19 +967,19 @@ tab.~\ref{tab:sock_getipnodebyname_flags}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{AI\_V4MAPPED}  & Usato con \const{AF\_INET6} per richiedere una
-                            ricerca su un indirizzo IPv4 invece che IPv6; gli
-                            eventuali risultati saranno rimappati su indirizzi 
-                            IPv6.\\
-    \const{AI\_ALL}       & Usato con \const{AI\_V4MAPPED}; richiede sia
-                            indirizzi IPv4 che IPv6, e gli indirizzi IPv4
-                            saranno rimappati in IPv6.\\
-    \const{AI\_ADDRCONFIG}& Richiede che una richiesta IPv4 o IPv6 venga
-                            eseguita solo se almeno una interfaccia del
-                            sistema è associata ad un indirizzo di tale tipo.\\
-    \const{AI\_DEFAULT}   & Il valore di default, è equivalente alla
-                            combinazione di \const{AI\_ADDRCONFIG} e di
-                            \const{AI\_V4MAPPED}.\\  
+    \constd{AI\_V4MAPPED}  & Usato con \const{AF\_INET6} per richiedere una
+                             ricerca su un indirizzo IPv4 invece che IPv6; gli
+                             eventuali risultati saranno rimappati su indirizzi 
+                             IPv6.\\
+    \constd{AI\_ALL}       & Usato con \const{AI\_V4MAPPED}; richiede sia
+                             indirizzi IPv4 che IPv6, e gli indirizzi IPv4
+                             saranno rimappati in IPv6.\\
+    \constd{AI\_ADDRCONFIG}& Richiede che una richiesta IPv4 o IPv6 venga
+                             eseguita solo se almeno una interfaccia del
+                             sistema è associata ad un indirizzo di tale tipo.\\
+    \constd{AI\_DEFAULT}   & Il valore di default, è equivalente alla
+                             combinazione di \const{AI\_ADDRCONFIG} e di
+                             \const{AI\_V4MAPPED}.\\  
     \hline
   \end{tabular}
   \caption{Valori possibili per i bit dell'argomento \param{flags} della
@@ -1166,7 +1165,7 @@ modo si può far ricominciare da capo una lettura sequenziale. L'argomento
 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.
+funzione, \func{endservent}, provvede semplicemente a chiudere il file.
 
 Queste tre funzioni per la lettura sequenziale di nuovo sono presenti per
 ciascuno dei vari tipi di informazione relative alle reti di
@@ -1341,37 +1340,37 @@ nella selezione.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{AI\_PASSIVE}    & Viene utilizzato per ottenere un indirizzo in
-                             formato adatto per una successiva chiamata a
-                             \func{bind}. Se specificato quando si è usato 
-                             \val{NULL} come valore per \param{node} gli
-                             indirizzi restituiti saranno inizializzati al
-                             valore generico (\const{INADDR\_ANY} per IPv4 e
-                             \const{IN6ADDR\_ANY\_INIT} per IPv6), altrimenti
-                             verrà usato l'indirizzo dell'interfaccia di
-                             \textit{loopback}. Se invece non è impostato gli
-                             indirizzi verranno restituiti in formato adatto ad
-                             una chiamata a \func{connect} o \func{sendto}.\\
-    \const{AI\_CANONNAME}  & Richiede la restituzione del nome canonico della
-                             macchina, che verrà salvato in una stringa il cui
-                             indirizzo sarà restituito nel campo
-                             \var{ai\_canonname} della prima struttura
-                             \struct{addrinfo} dei risultati. Se il nome
-                             canonico non è disponibile al suo posto
-                             viene restituita una copia di \param{node}. \\ 
-    \const{AI\_NUMERICHOST}& Se impostato il nome della macchina specificato
-                             con \param{node} deve essere espresso in forma
-                             numerica, altrimenti sarà restituito un errore
-                             \const{EAI\_NONAME} (vedi
-                             tab.~\ref{tab:addrinfo_error_code}), in questo
-                             modo si evita ogni chiamata alle funzioni di
-                             risoluzione.\\ 
+    \constd{AI\_PASSIVE}    & Viene utilizzato per ottenere un indirizzo in
+                              formato adatto per una successiva chiamata a
+                              \func{bind}. Se specificato quando si è usato 
+                              \val{NULL} come valore per \param{node} gli
+                              indirizzi restituiti saranno inizializzati al
+                              valore generico (\const{INADDR\_ANY} per IPv4 e
+                              \const{IN6ADDR\_ANY\_INIT} per IPv6), altrimenti
+                              verrà usato l'indirizzo dell'interfaccia di
+                              \textit{loopback}. Se invece non è impostato gli
+                              indirizzi verranno restituiti in formato adatto ad
+                              una chiamata a \func{connect} o \func{sendto}.\\
+    \constd{AI\_CANONNAME}  & Richiede la restituzione del nome canonico della
+                              macchina, che verrà salvato in una stringa il cui
+                              indirizzo sarà restituito nel campo
+                              \var{ai\_canonname} della prima struttura
+                              \struct{addrinfo} dei risultati. Se il nome
+                              canonico non è disponibile al suo posto
+                              viene restituita una copia di \param{node}. \\ 
+    \constd{AI\_NUMERICHOST}& Se impostato il nome della macchina specificato
+                              con \param{node} deve essere espresso in forma
+                              numerica, altrimenti sarà restituito un errore
+                              \const{EAI\_NONAME} (vedi
+                              tab.~\ref{tab:addrinfo_error_code}), in questo
+                              modo si evita ogni chiamata alle funzioni di
+                              risoluzione.\\ 
     \const{AI\_V4MAPPED}   & Stesso significato dell'analoga di
-                             tab.~\ref{tab:sock_getipnodebyname_flags}.\\  
+                              tab.~\ref{tab:sock_getipnodebyname_flags}.\\  
     \const{AI\_ALL}        & Stesso significato dell'analoga di
-                             tab.~\ref{tab:sock_getipnodebyname_flags}.\\ 
+                              tab.~\ref{tab:sock_getipnodebyname_flags}.\\ 
     \const{AI\_ADDRCONFIG} & Stesso significato dell'analoga di
-                             tab.~\ref{tab:sock_getipnodebyname_flags}.\\ 
+                              tab.~\ref{tab:sock_getipnodebyname_flags}.\\ 
     \hline
   \end{tabular}
   \caption{Costanti associate ai bit del campo \var{ai\_flags} della struttura 
@@ -1404,37 +1403,37 @@ corrispondente è riportato tramite \var{errno}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{EAI\_FAMILY}  & La famiglia di indirizzi richiesta non è
-                           supportata. \\ 
-    \const{EAI\_SOCKTYPE}& Il tipo di socket richiesto non è supportato. \\
-    \const{EAI\_BADFLAGS}& Il campo \var{ai\_flags} contiene dei valori non
-                           validi. \\
-    \const{EAI\_NONAME}  & Il nome a dominio o il servizio non sono noti,
-                           viene usato questo errore anche quando si specifica
-                           il valore \val{NULL} per entrambi gli argomenti
-                           \param{node} e \param{service}. \\
-    \const{EAI\_SERVICE} & Il servizio richiesto non è disponibile per il tipo
-                           di socket richiesto, anche se può esistere per
-                           altri tipi di socket. \\
-    \const{EAI\_ADDRFAMILY}& La rete richiesta non ha nessun indirizzo di rete
-                           per la famiglia di indirizzi specificata. \\
-    \const{EAI\_NODATA}  & La macchina specificata esiste, ma non ha nessun
-                           indirizzo di rete definito. \\
-    \const{EAI\_MEMORY}  & È stato impossibile allocare la memoria necessaria
-                           alle operazioni. \\
-    \const{EAI\_FAIL}    & Il DNS ha restituito un errore di risoluzione  
-                           permanente. \\
-    \const{EAI\_AGAIN}   & Il DNS ha restituito un errore di risoluzione  
-                           temporaneo, si può ritentare in seguito. \\
-    \const{EAI\_SYSTEM}  & C'è stato un errore di sistema, si può controllare
-                           \var{errno} per i dettagli. \\
+    \constd{EAI\_FAMILY}  & La famiglia di indirizzi richiesta non è
+                            supportata. \\ 
+    \constd{EAI\_SOCKTYPE}& Il tipo di socket richiesto non è supportato. \\
+    \constd{EAI\_BADFLAGS}& Il campo \var{ai\_flags} contiene dei valori non
+                            validi. \\
+    \constd{EAI\_NONAME}  & Il nome a dominio o il servizio non sono noti,
+                            viene usato questo errore anche quando si specifica
+                            il valore \val{NULL} per entrambi gli argomenti
+                            \param{node} e \param{service}. \\
+    \constd{EAI\_SERVICE} & Il servizio richiesto non è disponibile per il tipo
+                            di socket richiesto, anche se può esistere per
+                            altri tipi di socket. \\
+    \constd{EAI\_ADDRFAMILY}& La rete richiesta non ha nessun indirizzo di rete
+                              per la famiglia di indirizzi specificata. \\
+    \constd{EAI\_NODATA}  & La macchina specificata esiste, ma non ha nessun
+                            indirizzo di rete definito. \\
+    \constd{EAI\_MEMORY}  & È stato impossibile allocare la memoria necessaria
+                            alle operazioni. \\
+    \constd{EAI\_FAIL}    & Il DNS ha restituito un errore di risoluzione  
+                            permanente. \\
+    \constd{EAI\_AGAIN}   & Il DNS ha restituito un errore di risoluzione  
+                            temporaneo, si può ritentare in seguito. \\
+    \constd{EAI\_SYSTEM}  & C'è stato un errore di sistema, si può controllare
+                            \var{errno} per i dettagli. \\
 %    \hline
 % TODO estensioni GNU, trovarne la documentazione
-%    \const{EAI\_INPROGRESS}& Richiesta in corso. \\
-%    \const{EAI\_CANCELED}& La richiesta è stata cancellata.\\
-%    \const{EAI\_NOTCANCELED}& La richiesta non è stata cancellata. \\
-%    \const{EAI\_ALLDONE} & Tutte le richieste sono complete. \\
-%    \const{EAI\_INTR}    & Richiesta interrotta. \\
+%    \constd{EAI\_INPROGRESS}& Richiesta in corso. \\
+%    \constd{EAI\_CANCELED}& La richiesta è stata cancellata.\\
+%    \constd{EAI\_NOTCANCELED}& La richiesta non è stata cancellata. \\
+%    \constd{EAI\_ALLDONE} & Tutte le richieste sono complete. \\
+%    \constd{EAI\_INTR}    & Richiesta interrotta. \\
     \hline
   \end{tabular}
   \caption{Costanti associate ai valori dei codici di errore della funzione
@@ -1482,13 +1481,12 @@ lista illustrata in fig.~\ref{fig:sock_addrinfo_list}.
 \end{figure}
 
 Come primo esempio di uso di \func{getaddrinfo} vediamo un programma
-elementare di interrogazione del \itindex{resolver} \textit{resolver} basato
-questa funzione, il cui corpo principale è riportato in
-fig.~\ref{fig:mygetaddr_example}. Il codice completo del programma, compresa
-la gestione delle opzioni in cui è gestita l'eventuale inizializzazione
-dell'argomento \var{hints} per restringere le ricerche su protocolli, tipi di
-socket o famiglie di indirizzi, è disponibile nel file \texttt{mygetaddr.c}
-dei sorgenti allegati alla guida.
+elementare di interrogazione del \textit{resolver} basato questa funzione, il
+cui corpo principale è riportato in fig.~\ref{fig:mygetaddr_example}. Il
+codice completo del programma, compresa la gestione delle opzioni in cui è
+gestita l'eventuale inizializzazione dell'argomento \var{hints} per
+restringere le ricerche su protocolli, tipi di socket o famiglie di indirizzi,
+è disponibile nel file \texttt{mygetaddr.c} dei sorgenti allegati alla guida.
 
 \begin{figure}[!htbp]
   \footnotesize \centering
@@ -1595,10 +1593,10 @@ per \param{res}.
 
 Si tenga presente infine che se si copiano i risultati da una delle strutture
 \struct{addrinfo} restituite nella lista indicizzata da \param{res}, occorre
-avere cura di eseguire una \itindex{deep~copy} \textit{deep copy} in cui
-si copiano anche tutti i dati presenti agli indirizzi contenuti nella
-struttura \struct{addrinfo}, perché una volta disallocati i dati con
-\func{freeaddrinfo} questi non sarebbero più disponibili. 
+avere cura di eseguire una \textit{deep copy} in cui si copiano anche tutti i
+dati presenti agli indirizzi contenuti nella struttura \struct{addrinfo},
+perché una volta disallocati i dati con \func{freeaddrinfo} questi non
+sarebbero più disponibili.
 
 Anche la nuova interfaccia definita da POSIX prevede una nuova funzione per
 eseguire la risoluzione inversa e determinare nomi di servizi e di dominio
@@ -1645,20 +1643,20 @@ tab.~\ref{tab:getnameinfo_flags}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{NI\_NOFQDN}     & Richiede che venga restituita solo il nome della
-                             macchina all'interno del dominio al posto del
-                             nome completo (FQDN).\\
-    \const{NI\_NUMERICHOST}& Richiede che venga restituita la forma numerica
-                             dell'indirizzo (questo succede sempre se il nome
-                             non può essere ottenuto).\\ 
-    \const{NI\_NAMEREQD}   & Richiede la restituzione di un errore se il nome
-                             non può essere risolto.\\
-    \const{NI\_NUMERICSERV}& Richiede che il servizio venga restituito in
-                             forma numerica (attraverso il numero di porta).\\
-    \const{NI\_DGRAM}      & Richiede che venga restituito il nome del
-                             servizio su UDP invece che quello su TCP per quei
-                             pichi servizi (porte 512-214) che soni diversi
-                             nei due protocolli.\\
+    \constd{NI\_NOFQDN}     & Richiede che venga restituita solo il nome della
+                              macchina all'interno del dominio al posto del
+                              nome completo (FQDN).\\
+    \constd{NI\_NUMERICHOST}& Richiede che venga restituita la forma numerica
+                              dell'indirizzo (questo succede sempre se il nome
+                              non può essere ottenuto).\\ 
+    \constd{NI\_NAMEREQD}   & Richiede la restituzione di un errore se il nome
+                              non può essere risolto.\\
+    \constd{NI\_NUMERICSERV}& Richiede che il servizio venga restituito in
+                              forma numerica (attraverso il numero di porta).\\
+    \constd{NI\_DGRAM}      & Richiede che venga restituito il nome del
+                              servizio su UDP invece che quello su TCP per quei
+                              pichi servizi (porte 512-214) che soni diversi
+                              nei due protocolli.\\
     \hline
   \end{tabular}
   \caption{Costanti associate ai bit dell'argomento \param{flags} della  
@@ -1671,7 +1669,7 @@ indirizzi indicati dagli argomenti \param{host} e \param{serv} come stringhe
 terminate dal carattere NUL, a meno che queste non debbano essere troncate
 qualora la loro dimensione ecceda quelle specificate dagli argomenti
 \param{hostlen} e \param{servlen}. Sono comunque definite le due costanti
-\const{NI\_MAXHOST} e \const{NI\_MAXSERV}\footnote{in Linux le due costanti
+\constd{NI\_MAXHOST} e \constd{NI\_MAXSERV}\footnote{in Linux le due costanti
   sono definite in \headfile{netdb.h} ed hanno rispettivamente il valore 1024
   e 12.}  che possono essere utilizzate come limiti massimi.  In caso di
 errore viene restituito invece un codice che assume gli stessi valori
@@ -1932,11 +1930,11 @@ riassunti i valori che possono essere usati per l'argomento
     \textbf{Livello} & \textbf{Significato} \\
     \hline
     \hline
-    \const{SOL\_SOCKET}& Opzioni generiche dei socket.\\
-    \const{SOL\_IP}    & Opzioni specifiche per i socket che usano IPv4.\\
-    \const{SOL\_TCP}   & Opzioni per i socket che usano TCP.\\
-    \const{SOL\_IPV6}  & Opzioni specifiche per i socket che usano IPv6.\\
-    \const{SOL\_ICMPV6}& Opzioni specifiche per i socket che usano ICMPv6.\\
+    \constd{SOL\_SOCKET}& Opzioni generiche dei socket.\\
+    \constd{SOL\_IP}    & Opzioni specifiche per i socket che usano IPv4.\\
+    \constd{SOL\_TCP}   & Opzioni per i socket che usano TCP.\\
+    \constd{SOL\_IPV6}  & Opzioni specifiche per i socket che usano IPv6.\\
+    \constd{SOL\_ICMPV6}& Opzioni specifiche per i socket che usano ICMPv6.\\
     \hline
   \end{tabular}
   \caption{Possibili valori dell'argomento \param{level} delle 
@@ -2026,8 +2024,7 @@ tab.~\ref{tab:sock_opt_socklevel}.
     \const{SO\_KEEPALIVE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           Controlla l'attività della connessione.\\
     \const{SO\_OOBINLINE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          Lascia in linea i dati \itindex{out-of-band}
-                          \textit{out-of-band}.\\
+                          Lascia in linea i dati \textit{out-of-band}.\\
     \const{SO\_RCVLOWAT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           Basso livello sul buffer di ricezione.\\
     \const{SO\_SNDLOWAT} &$\bullet$&$\bullet$&         &\texttt{int}&
@@ -2102,17 +2099,16 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   usato come valore logico. Maggiori dettagli sul suo funzionamento sono
   forniti in sez.~\ref{sec:sock_options_main}.
 
-\item[\const{SO\_OOBINLINE}] se questa opzione viene abilitata i dati
-  \itindex{out-of-band} \textit{out-of-band} vengono inviati direttamente nel
-  flusso di dati del socket (e sono quindi letti con una normale \func{read})
-  invece che restare disponibili solo per l'accesso con l'uso del flag
-  \const{MSG\_OOB} di \func{recvmsg}. L'argomento è trattato in dettaglio in
+\item[\constd{SO\_OOBINLINE}] se questa opzione viene abilitata i dati
+  \textit{out-of-band} vengono inviati direttamente nel flusso di dati del
+  socket (e sono quindi letti con una normale \func{read}) invece che restare
+  disponibili solo per l'accesso con l'uso del flag \const{MSG\_OOB} di
+  \func{recvmsg}. L'argomento è trattato in dettaglio in
   sez.~\ref{sec:TCP_urgent_data}. L'opzione funziona soltanto con socket che
-  supportino i dati \itindex{out-of-band} \textit{out-of-band} (non ha senso
-  per socket UDP ad esempio), ed utilizza per \param{optval} un intero usato
-  come valore logico.
+  supportino i dati \textit{out-of-band} (non ha senso per socket UDP ad
+  esempio), ed utilizza per \param{optval} un intero usato come valore logico.
 
-\item[\const{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
+\item[\constd{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
   numero minimo di byte che devono essere presenti nel buffer di ricezione
   perché il kernel passi i dati all'utente, restituendoli ad una \func{read} o
   segnalando ad una \func{select} (vedi sez.~\ref{sec:TCP_sock_select}) che ci
@@ -2121,7 +2117,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   essere cambiato; \func{getsockopt} leggerà questo valore mentre
   \func{setsockopt} darà un errore di \errcode{ENOPROTOOPT}. 
 
-\item[\const{SO\_SNDLOWAT}] questa opzione imposta il valore che indica il
+\item[\constd{SO\_SNDLOWAT}] questa opzione imposta il valore che indica il
   numero minimo di byte che devono essere presenti nel buffer di trasmissione
   perché il kernel li invii al protocollo successivo, consentendo ad una
   \func{write} di ritornare o segnalando ad una \func{select} (vedi
@@ -2131,7 +2127,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   sempre 1 e non può essere cambiato; \func{getsockopt} leggerà questo valore
   mentre \func{setsockopt} darà un errore di \errcode{ENOPROTOOPT}.
 
-\item[\const{SO\_RCVTIMEO}] l'opzione permette di impostare un tempo massimo
+\item[\constd{SO\_RCVTIMEO}] l'opzione permette di impostare un tempo massimo
   sulle operazioni di lettura da un socket, e prende per \param{optval} una
   struttura di tipo \struct{timeval} (vedi fig.~\ref{fig:sys_timeval_struct})
   identica a quella usata con \func{select}. Con \func{getsockopt} si può
@@ -2159,14 +2155,14 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 
 % TODO verificare il timeout con un programma di test
 
-\item[\const{SO\_SNDTIMEO}] l'opzione permette di impostare un tempo massimo
+\item[\constd{SO\_SNDTIMEO}] l'opzione permette di impostare un tempo massimo
   sulle operazioni di scrittura su un socket, ed usa gli stessi valori di
   \const{SO\_RCVTIMEO}.  In questo caso però si avrà un errore di
   \errcode{EAGAIN} o \errcode{EWOULDBLOCK} per le funzioni di scrittura
   \func{write}, \func{writev}, \func{send}, \func{sendto} e \func{sendmsg}
   qualora queste restino bloccate per un tempo maggiore di quello specificato. 
 
-\item[\const{SO\_BSDCOMPAT}] questa opzione abilita la compatibilità con il
+\item[\constd{SO\_BSDCOMPAT}] questa opzione abilita la compatibilità con il
   comportamento di BSD (in particolare ne riproduce i bug).  Attualmente è una
   opzione usata solo per il protocollo UDP e ne è prevista la rimozione in
   futuro.  L'opzione utilizza per \param{optval} un intero usato come valore
@@ -2178,18 +2174,18 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   state rimosse con il passaggio al 2.2; è consigliato correggere i programmi
   piuttosto che usare questa funzione. 
 
-\item[\const{SO\_PASSCRED}] questa opzione abilita sui socket unix-domain
+\item[\constd{SO\_PASSCRED}] questa opzione abilita sui socket unix-domain
   (vedi sez.~\ref{sec:unix_socket}) la ricezione dei messaggi di controllo di
   tipo \const{SCM\_CREDENTIALS}. Prende come \param{optval} un intero usato
   come valore logico.
 
-\item[\const{SO\_PEERCRED}] questa opzione restituisce le credenziali del
+\item[\constd{SO\_PEERCRED}] questa opzione restituisce le credenziali del
   processo remoto connesso al socket; l'opzione è disponibile solo per socket
   unix-domain e può essere usata solo con \func{getsockopt}.  Utilizza per
   \param{optval} una apposita struttura \struct{ucred} (vedi
   sez.~\ref{sec:unix_socket}). 
 
-\item[\const{SO\_BINDTODEVICE}] questa opzione permette di \textsl{legare} il
+\item[\constd{SO\_BINDTODEVICE}] questa opzione permette di \textsl{legare} il
   socket ad una particolare interfaccia, in modo che esso possa ricevere ed
   inviare pacchetti solo su quella. L'opzione richiede per \param{optval} il
   puntatore ad una stringa contenente il nome dell'interfaccia (ad esempio
@@ -2197,24 +2193,24 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   \param{optlen} si può rimuovere un precedente collegamento.
 
   Il nome della interfaccia deve essere specificato con una stringa terminata
-  da uno zero e di lunghezza massima pari a \const{IFNAMSIZ}; l'opzione è
+  da uno zero e di lunghezza massima pari a \constd{IFNAMSIZ}; l'opzione è
   effettiva solo per alcuni tipi di socket, ed in particolare per quelli della
   famiglia \const{AF\_INET}; non è invece supportata per i \textit{packet
     socket} (vedi sez.~\ref{sec:socket_raw}). 
 
-\item[\const{SO\_DEBUG}] questa opzione abilita il debugging delle operazioni
+\item[\constd{SO\_DEBUG}] questa opzione abilita il debugging delle operazioni
   dei socket; l'opzione utilizza per \param{optval} un intero usato come
   valore logico, e può essere utilizzata solo da un processo con i privilegi
   di amministratore (in particolare con la \textit{capability}
   \const{CAP\_NET\_ADMIN}).  L'opzione necessita inoltre dell'opportuno
   supporto nel kernel;\footnote{deve cioè essere definita la macro di
-    preprocessore \macro{SOCK\_DEBUGGING} nel file \file{include/net/sock.h}
+    preprocessore \macrod{SOCK\_DEBUGGING} nel file \file{include/net/sock.h}
     dei sorgenti del kernel, questo è sempre vero nei kernel delle serie
     superiori alla 2.3, per i kernel delle serie precedenti invece è
     necessario aggiungere a mano detta definizione; è inoltre possibile
     abilitare anche il tracciamento degli stati del TCP definendo la macro
-    \macro{STATE\_TRACE} in \file{include/net/tcp.h}.}  quando viene abilitata
-  una serie di messaggi con le informazioni di debug vengono inviati
+    \macrod{STATE\_TRACE} in \file{include/net/tcp.h}.}  quando viene
+  abilitata una serie di messaggi con le informazioni di debug vengono inviati
   direttamente al sistema del kernel log.\footnote{si tenga presente che il
     comportamento è diverso da quanto avviene con BSD, dove l'opzione opera
     solo sui socket TCP, causando la scrittura di tutti i pacchetti inviati
@@ -2231,37 +2227,37 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   socket.  Maggiori dettagli sul suo funzionamento sono forniti in
   sez.~\ref{sec:sock_options_main}.
 
-\item[\const{SO\_TYPE}] questa opzione permette di leggere il tipo di socket
+\item[\constd{SO\_TYPE}] questa opzione permette di leggere il tipo di socket
   su cui si opera; funziona solo con \func{getsockopt}, ed utilizza per
   \param{optval} un intero in cui verrà restituito il valore numerico che lo
   identifica (ad esempio \const{SOCK\_STREAM}). 
 
-\item[\const{SO\_ACCEPTCONN}] questa opzione permette di rilevare se il socket
+\item[\constd{SO\_ACCEPTCONN}] questa opzione permette di rilevare se il socket
   su cui opera è stato posto in modalità di ricezione di eventuali connessioni
   con una chiamata a \func{listen}. L'opzione può essere usata soltanto con
   \func{getsockopt} e utilizza per \param{optval} un intero in cui viene
   restituito 1 se il socket è in ascolto e 0 altrimenti. 
 
-\item[\const{SO\_DONTROUTE}] questa opzione forza l'invio diretto dei
+\item[\constd{SO\_DONTROUTE}] questa opzione forza l'invio diretto dei
   pacchetti del socket, saltando ogni processo relativo all'uso della tabella
   di routing del kernel. Prende per \param{optval} un intero usato come valore
   logico.
 
-\item[\const{SO\_BROADCAST}] questa opzione abilita il \textit{broadcast};
+\item[\constd{SO\_BROADCAST}] questa opzione abilita il \textit{broadcast};
   quanto abilitata i socket di tipo \const{SOCK\_DGRAM} riceveranno i
   pacchetti inviati all'indirizzo di \textit{broadcast}, e potranno scrivere
   pacchetti su tale indirizzo.  Prende per \param{optval} un intero usato come
   valore logico. L'opzione non ha effetti su un socket di tipo
   \const{SOCK\_STREAM}.
 
-\item[\const{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di
+\item[\constd{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di
   trasmissione del socket. Prende per \param{optval} un intero indicante il
   numero di byte. Il valore di default ed il valore massimo che si possono
   specificare come argomento per questa opzione sono impostabili
   rispettivamente tramite gli opportuni valori di \func{sysctl} (vedi
   sez.~\ref{sec:sock_sysctl}).
 
-\item[\const{SO\_RCVBUF}] questa opzione imposta la dimensione del buffer di
+\item[\constd{SO\_RCVBUF}] questa opzione imposta la dimensione del buffer di
   ricezione del socket. Prende per \param{optval} un intero indicante il
   numero di byte. Il valore di default ed il valore massimo che si può
   specificare come argomento per questa opzione sono impostabili tramiti gli
@@ -2294,7 +2290,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   fig.~\ref{fig:sock_linger_struct}.  Maggiori dettagli sul suo funzionamento
   sono forniti in sez.~\ref{sec:sock_options_main}.
 
-\item[\const{SO\_PRIORITY}] questa opzione permette di impostare le priorità
+\item[\constd{SO\_PRIORITY}] questa opzione permette di impostare le priorità
   per tutti i pacchetti che sono inviati sul socket, prende per \param{optval}
   un valore intero. Con questa opzione il kernel usa il valore per ordinare le
   priorità sulle code di rete,\footnote{questo richiede che sia abilitato il
@@ -2307,7 +2303,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   priorità al di fuori dell'intervallo di valori fra 0 e 6 sono richiesti i
   privilegi di amministratore con la capability \const{CAP\_NET\_ADMIN}.
 
-\item[\const{SO\_ERROR}] questa opzione riceve un errore presente sul socket;
+\item[\constd{SO\_ERROR}] questa opzione riceve un errore presente sul socket;
   può essere utilizzata soltanto con \func{getsockopt} e prende per
   \param{optval} un valore intero, nel quale viene restituito il codice di
   errore, e la condizione di errore sul socket viene cancellata. Viene
@@ -2315,14 +2311,14 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   sez.~\ref{sec:TCP_sock_select}, quando si sta osservando il socket con una
   \func{select} che ritorna a causa dello stesso.
 
-\item[\const{SO\_ATTACH\_FILTER}] questa opzione permette di agganciare ad un
+\item[\constd{SO\_ATTACH\_FILTER}] questa opzione permette di agganciare ad un
   socket un filtro di pacchetti che consente di selezionare quali pacchetti,
   fra tutti quelli ricevuti, verranno letti. Viene usato principalmente con i
   socket di tipo \const{PF\_PACKET} con la libreria \texttt{libpcap} per
   implementare programmi di cattura dei pacchetti, torneremo su questo in
   sez.~\ref{sec:packet_socket}.
 
-\item[\const{SO\_DETACH\_FILTER}] consente di distaccare un filtro
+\item[\constd{SO\_DETACH\_FILTER}] consente di distaccare un filtro
   precedentemente aggiunto ad un socket.
 
 % TODO documentare SO_ATTACH_FILTER e SO_DETACH_FILTER
@@ -2585,7 +2581,7 @@ Il terzo impiego è simile al precedente e prevede l'uso di \func{bind}
 all'interno dello stesso programma per associare indirizzi locali diversi a
 socket diversi. In genere questo viene fatto per i socket UDP quando è
 necessario ottenere l'indirizzo a cui sono rivolte le richieste del client ed
-il sistema non supporta l'opzione \const{IP\_RECVDSTADDR};\footnote{nel caso
+il sistema non supporta l'opzione \constd{IP\_RECVDSTADDR};\footnote{nel caso
   di Linux questa opzione è stata supportata per in certo periodo nello
   sviluppo del kernel 2.1.x, ma è in seguito stata soppiantata dall'uso di
   \const{IP\_PKTINFO} (vedi sez.~\ref{sec:sock_ipv4_options}).} in tale modo
@@ -2738,11 +2734,11 @@ socket che usano il protocollo IPv4.\footnote{come per le precedenti opzioni
   generiche una descrizione di esse è disponibile nella settima sezione delle
   pagine di manuale, nel caso specifico la documentazione si può consultare
   con \texttt{man 7 ip}.}  Se si vuole operare su queste opzioni generiche il
-livello da utilizzare è \const{SOL\_IP} (o l'equivalente \const{IPPROTO\_IP});
-si è riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_iplevel}.
-Le costanti indicanti le opzioni e tutte le altre costanti ad esse collegate
-sono definite in \headfiled{netinet/ip.h}, ed accessibili includendo detto
-file.
+livello da utilizzare è \const{SOL\_IP} (o l'equivalente
+\constd{IPPROTO\_IP}); si è riportato un elenco di queste opzioni in
+tab.~\ref{tab:sock_opt_iplevel}.  Le costanti indicanti le opzioni e tutte le
+altre costanti ad esse collegate sono definite in \headfiled{netinet/ip.h}, ed
+accessibili includendo detto file.
 
 \begin{table}[!htb]
   \centering
@@ -2778,7 +2774,7 @@ file.
     \const{IP\_MTU\_DISCOVER}   &$\bullet$&$\bullet$&         &\texttt{int}& 
       Imposta il \textit{Path MTU Discovery}.\\
     \const{IP\_MTU}             &$\bullet$&         &         &\texttt{int}& 
-      Legge il valore attuale della \itindex{Maximum~Transfer~Unit~(MTU)} MTU.\\
+      Legge il valore attuale della 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}& 
@@ -2803,7 +2799,7 @@ seguente elenco:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
 
-\item[\const{IP\_OPTIONS}] l'opzione permette di impostare o leggere le
+\item[\constd{IP\_OPTIONS}] l'opzione permette di impostare o leggere le
   opzioni del protocollo IP (si veda sez.~\ref{sec:IP_options}). L'opzione
   prende come valore dell'argomento \param{optval} un puntatore ad un buffer
   dove sono mantenute le opzioni, mentre \param{optlen} indica la dimensione
@@ -2814,7 +2810,7 @@ seguente elenco:
   torneremo in parte sull'argomento in sez.~\ref{sec:sock_IP_options}.
 
 
-\item[\const{IP\_PKTINFO}] Quando abilitata l'opzione permette di ricevere
+\item[\constd{IP\_PKTINFO}] Quando abilitata l'opzione permette di ricevere
   insieme ai pacchetti un messaggio ancillare (vedi
   sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_PKTINFO} contenente
   una struttura \struct{pktinfo} (vedi fig.~\ref{fig:sock_pktinfo_struct}) che
@@ -2854,14 +2850,14 @@ letto o scritto direttamente con \func{recvmsg} e \func{sendmsg} (vedi
 sez.~\ref{sec:net_sendmsg}).
 
 
-\item[\const{IP\_RECVTOS}] Quando abilitata l'opzione permette di ricevere
+\item[\constd{IP\_RECVTOS}] Quando abilitata l'opzione permette di ricevere
   insieme ai pacchetti un messaggio ancillare (vedi
   sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_TOS}, che contiene un
   byte con il valore del campo \textit{Type of Service} dell'intestazione IP
   del pacchetto stesso (vedi sez.~\ref{sec:IP_header}).  Prende per
   \param{optval} un intero usato come valore logico.
 
-\item[\const{IP\_RECVTTL}] Quando abilitata l'opzione permette di ricevere
+\item[\constd{IP\_RECVTTL}] Quando abilitata l'opzione permette di ricevere
   insieme ai pacchetti un messaggio ancillare (vedi
   sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_RECVTTL}, contenente
   un byte con il valore del campo \textit{Time to Live} dell'intestazione IP
@@ -2869,7 +2865,7 @@ sez.~\ref{sec:net_sendmsg}).
   intero usato come valore logico. L'opzione non è supportata per socket di
   tipo \const{SOCK\_STREAM}.
 
-\item[\const{IP\_RECVOPTS}] Quando abilitata l'opzione permette di ricevere
+\item[\constd{IP\_RECVOPTS}] Quando abilitata l'opzione permette di ricevere
   insieme ai pacchetti un messaggio ancillare (vedi
   sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_OPTIONS}, contenente
   le opzioni IP del protocollo (vedi sez.~\ref{sec:IP_options}). Le
@@ -2878,13 +2874,13 @@ sez.~\ref{sec:net_sendmsg}).
   valore logico.  L'opzione non è supportata per socket di tipo
   \const{SOCK\_STREAM}.
 
-\item[\const{IP\_RETOPTS}] Identica alla precedente \const{IP\_RECVOPTS}, ma
+\item[\constd{IP\_RETOPTS}] Identica alla precedente \const{IP\_RECVOPTS}, ma
   in questo caso restituisce i dati grezzi delle opzioni, senza che siano
   riempiti i capi di instradamento e le marche temporali.  L'opzione richiede
   per \param{optval} un intero usato come valore logico.  L'opzione non è
   supportata per socket di tipo \const{SOCK\_STREAM}.
 
-\item[\const{IP\_TOS}] L'opzione consente di leggere o impostare il campo
+\item[\constd{IP\_TOS}] L'opzione consente di leggere o impostare il campo
   \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
@@ -2903,7 +2899,7 @@ 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 per tutti i
+\item[\constd{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ù
@@ -2911,7 +2907,7 @@ sez.~\ref{sec:net_sendmsg}).
   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
+\item[\constd{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
@@ -2929,7 +2925,7 @@ sez.~\ref{sec:net_sendmsg}).
     senza carico aggiuntivo sulla CPU (che altrimenti dovrebbe calcolare una
     checksum).}
 
-\item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
+\item[\constd{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
   impostati con \const{IP\_OPTIONS}, \const{IP\_TOS} o \const{IP\_TTL} sono
@@ -2937,7 +2933,7 @@ sez.~\ref{sec:net_sendmsg}).
   dell'intestazione vengono comunque modificati dal kernel, torneremo
   sull'argomento in sez.~\ref{sec:socket_raw}
 
-\item[\const{IP\_RECVERR}] Questa è una opzione introdotta con i kernel della
+\item[\constd{IP\_RECVERR}] Questa è una opzione introdotta con i kernel della
   serie 2.2.x, ed è specifica di Linux. Essa permette di usufruire di un
   meccanismo affidabile per ottenere un maggior numero di informazioni in caso
   di errori. Se l'opzione è abilitata tutti gli errori generati su un socket
@@ -2949,7 +2945,7 @@ sez.~\ref{sec:net_sendmsg}).
   \const{SOCK\_STREAM}.
 
 \itindbeg{Path~MTU}
-\item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel
+\item[\constd{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
   \textit{Path MTU} (vedi sez.~\ref{sec:net_lim_dim}) del
@@ -2965,14 +2961,14 @@ sez.~\ref{sec:net_sendmsg}).
       \multicolumn{2}{|c|}{\textbf{Valore}}&\textbf{Significato} \\
       \hline
       \hline
-      \const{IP\_PMTUDISC\_DONT}&0& Non effettua la ricerca dalla \textit{Path
-                                    MTU}.\\
-      \const{IP\_PMTUDISC\_WANT}&1& Utilizza il valore impostato per la rotta
-                                    utilizzata dai pacchetti (dal comando
-                                    \texttt{route}).\\ 
-      \const{IP\_PMTUDISC\_DO}  &2& Esegue la procedura di determinazione
-                                    della \textit{Path MTU} come richiesto
-                                    dall'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191}.\\ 
+      \constd{IP\_PMTUDISC\_DONT}&0& Non effettua la ricerca dalla \textit{Path
+                                     MTU}.\\
+      \constd{IP\_PMTUDISC\_WANT}&1& Utilizza il valore impostato per la rotta
+                                     utilizzata dai pacchetti (dal comando
+                                     \texttt{route}).\\ 
+      \constd{IP\_PMTUDISC\_DO}  &2& Esegue la procedura di determinazione
+                                     della \textit{Path MTU} come richiesto
+                                     dall'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191}.\\ 
       \hline
     \end{tabular}
     \caption{Valori possibili per l'argomento \param{optval} di
@@ -2992,7 +2988,7 @@ sez.~\ref{sec:net_sendmsg}).
     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}
+\item[\constd{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
   di percorso del socket.  L'opzione richiede per \param{optval} un intero che
   conterrà il valore della \textit{Path MTU} in byte.  Questa è una opzione
   introdotta con i kernel della serie 2.2.x, ed è specifica di Linux.
@@ -3014,14 +3010,14 @@ sez.~\ref{sec:net_sendmsg}).
 
 \itindend{Path~MTU}
 
-\item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i
+\item[\constd{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i
   kernel della serie 2.2.x, ed è specifica di Linux. Prende per
   \param{optval} un intero usato come valore logico. Se abilitata
   passa tutti i pacchetti con l'opzione \textit{IP Router Alert} (vedi
   sez.~\ref{sec:IP_options}) che devono essere inoltrati al socket
   corrente. Può essere usata soltanto per socket di tipo raw.
 
-\item[\const{IP\_MULTICAST\_TTL}] L'opzione permette di impostare o leggere il
+\item[\constd{IP\_MULTICAST\_TTL}] L'opzione permette di impostare o leggere il
   valore del campo TTL per i pacchetti \textit{multicast} in uscita associati
   al socket. È importante che questo valore sia il più basso possibile, ed il
   default è 1, che significa che i pacchetti non potranno uscire dalla rete
@@ -3029,7 +3025,7 @@ sez.~\ref{sec:net_sendmsg}).
   questo limite.  L'opzione richiede per
   \param{optval} un intero che conterrà il valore del TTL.
 
-\item[\const{IP\_MULTICAST\_LOOP}] L'opzione consente di decidere se i dati
+\item[\constd{IP\_MULTICAST\_LOOP}] L'opzione consente di decidere se i dati
   che si inviano su un socket usato con il \textit{multicast} vengano ricevuti
   anche sulla stessa macchina da cui li si stanno inviando.  Prende per
   \param{optval} un intero usato come valore logico.
@@ -3040,7 +3036,7 @@ sez.~\ref{sec:net_sendmsg}).
   disponibili in locale l'uso di questa opzione permette di disabilitare
   questo tipo di traffico.
 
-\item[\const{IP\_ADD\_MEMBERSHIP}] L'opzione consente di unirsi ad gruppo di
+\item[\constd{IP\_ADD\_MEMBERSHIP}] L'opzione consente di unirsi ad gruppo di
   \textit{multicast}, e può essere usata solo con \func{setsockopt}.
   L'argomento \param{optval} in questo caso deve essere una struttura di tipo
   \struct{ip\_mreqn}, illustrata in fig.~\ref{fig:ip_mreqn_struct}, che
@@ -3066,11 +3062,11 @@ sez.~\ref{sec:net_sendmsg}).
   \label{fig:ip_mreqn_struct}
 \end{figure}
 
-\item[\const{IP\_DROP\_MEMBERSHIP}] Lascia un gruppo di \textit{multicast},
+\item[\constd{IP\_DROP\_MEMBERSHIP}] Lascia un gruppo di \textit{multicast},
   prende per \param{optval} la stessa struttura \struct{ip\_mreqn} (o
   \struct{ip\_mreq}) usata anche per \const{IP\_ADD\_MEMBERSHIP}.
 
-\item[\const{IP\_MULTICAST\_IF}] Imposta l'interfaccia locale per l'utilizzo
+\item[\constd{IP\_MULTICAST\_IF}] Imposta l'interfaccia locale per l'utilizzo
   del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture
   \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni.
 
@@ -3101,7 +3097,7 @@ precedenti opzioni di sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in
 
 Il protocollo che supporta il maggior numero di opzioni è TCP; per poterle
 utilizzare occorre specificare \const{SOL\_TCP} (o l'equivalente
-\const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si sono
+\constd{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si sono
 riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcplevel},
 dove sono elencate le rispettive costanti da utilizzare come valore per
 l'argomento \param{optname}. Dette costanti e tutte le altre costanti e
@@ -3124,8 +3120,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}&
-      Valore della \itindex{Maximum~Segment~Size~(MSS)} MSS per i segmenti in
-      uscita.\\  
+      Valore della MSS per i segmenti in uscita.\\  
     \const{TCP\_CORK}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
       Accumula i dati in un unico segmento.\\
     \const{TCP\_KEEPIDLE}     &$\bullet$&$\bullet$&         &\texttt{int}& 
@@ -3161,17 +3156,17 @@ la spiegazione del funzionamento delle singole opzioni con una maggiore
 quantità di dettagli è fornita nel seguente elenco:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\const{TCP\_NODELAY}] il protocollo TCP utilizza un meccanismo di
+\item[\constd{TCP\_NODELAY}] il protocollo TCP utilizza un meccanismo di
   bufferizzazione dei dati uscenti, per evitare la trasmissione di tanti
   piccoli segmenti con un utilizzo non ottimale della banda
-  disponibile.\footnote{il problema è chiamato anche \textit{silly window
-      syndrome}, per averne un'idea si pensi al risultato che si ottiene
-    quando un programma di terminale invia un segmento TCP per ogni tasto
-    premuto, 40 byte di intestazione di protocollo con 1 byte di dati
-    trasmessi; per evitare situazioni del genere è stato introdotto
-    \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
+  disponibile.\footnote{il problema è chiamato anche
+    \itindex{silly~window~syndrome} \textit{silly window syndrome}, per averne
+    un'idea si pensi al risultato che si ottiene quando un programma di
+    terminale invia un segmento TCP per ogni tasto premuto, 40 byte di
+    intestazione di protocollo con 1 byte di dati trasmessi; per evitare
+    situazioni del genere è stato introdotto \index{algoritmo~di~Nagle}
+    l'\textsl{algoritmo di Nagle}.}  Questo meccanismo è controllato da un
+  apposito algoritmo (detto \textsl{algoritmo di Nagle}, vedi
   sez.~\ref{sec:tcp_protocol_xxx}).  Il comportamento normale del protocollo
   prevede che i dati siano accumulati fintanto che non si raggiunge una
   quantità considerata adeguata per eseguire la trasmissione di un singolo
@@ -3183,11 +3178,10 @@ quantità di dettagli è fornita nel seguente elenco:
     richiesta HTTP.} in tal caso l'attesa introdotta dall'algoritmo di
   bufferizzazione non soltanto è inutile, ma peggiora le prestazioni
   introducendo un ritardo.  Impostando questa opzione si disabilita l'uso
-  \index{algoritmo~di~Nagle} dell'\textsl{algoritmo di Nagle} ed i dati
-  vengono inviati immediatamente in singoli segmenti, qualunque sia la loro
-  dimensione.  Ovviamente l'uso di questa opzione è dedicato a chi ha esigenze
-  particolari come quella illustrata, che possono essere stabilite solo per la
-  singola applicazione.
+  dell'\textsl{algoritmo di Nagle} ed i dati vengono inviati immediatamente in
+  singoli segmenti, qualunque sia la loro dimensione.  Ovviamente l'uso di
+  questa opzione è dedicato a chi ha esigenze particolari come quella
+  illustrata, che possono essere stabilite solo per la singola applicazione.
 
   Si tenga conto che questa opzione viene sovrascritta dall'eventuale
   impostazione dell'opzione \const{TCP\_CORK} (il cui scopo è sostanzialmente
@@ -3198,28 +3192,26 @@ quantità di dettagli è fornita nel seguente elenco:
     essere specificata insieme a \const{TCP\_NODELAY} soltanto a partire dal
     kernel 2.5.71.}
 
-\item[\const{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore
-  della \itindex{Maximum~Segment~Size~(MSS)} MSS
-  (\textit{Maximum~Segment~Size}, vedi sez.~\ref{sec:net_lim_dim} e
+\item[\constd{TCP\_MAXSEG}] con questa opzione si legge o si imposta il valore
+  della 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.
+  MSS annunciata all'altro capo della connessione. Se si specificano valori
+  maggiori della 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
+\item[\constd{TCP\_CORK}] questa opzione è il complemento naturale di
   \const{TCP\_NODELAY} e serve a gestire a livello applicativo la situazione
   opposta, cioè quella in cui si sa fin dal principio che si dovranno inviare
-  grosse quantità di dati. Anche in questo caso \index{algoritmo~di~Nagle}
-  l'\textsl{algoritmo di Nagle} tenderà a suddividerli in dimensioni da lui
-  ritenute opportune,\footnote{l'algoritmo cerca di tenere conto di queste
-    situazioni, ma essendo un algoritmo generico tenderà comunque ad
-    introdurre delle suddivisioni in segmenti diversi, anche quando potrebbero
-    non essere necessarie, con conseguente spreco di banda.}  ma sapendo fin
-  dall'inizio quale è la dimensione dei dati si potranno di nuovo ottenere
-  delle migliori prestazioni disabilitandolo, e gestendo direttamente l'invio
-  del nostro blocco di dati in soluzione unica.
+  grosse quantità di dati. Anche in questo caso l'\textsl{algoritmo di Nagle}
+  tenderà a suddividerli in dimensioni da lui ritenute
+  opportune,\footnote{l'algoritmo cerca di tenere conto di queste situazioni,
+    ma essendo un algoritmo generico tenderà comunque ad introdurre delle
+    suddivisioni in segmenti diversi, anche quando potrebbero non essere
+    necessarie, con conseguente spreco di banda.}  ma sapendo fin dall'inizio
+  quale è la dimensione dei dati si potranno di nuovo ottenere delle migliori
+  prestazioni disabilitandolo, e gestendo direttamente l'invio del nostro
+  blocco di dati in soluzione unica.
 
   Quando questa opzione viene abilitata non vengono inviati segmenti di dati
   fintanto che essa non venga disabilitata; a quel punto tutti i dati rimasti
@@ -3245,7 +3237,7 @@ quantità di dettagli è fornita nel seguente elenco:
     serie 2.4.x.} e non è disponibile su tutti i kernel unix-like, pertanto
   deve essere evitata se si vuole scrivere codice portabile.
 
-\item[\const{TCP\_KEEPIDLE}] con questa opzione si legge o si imposta
+\item[\constd{TCP\_KEEPIDLE}] con questa opzione si legge o si imposta
   l'intervallo di tempo, in secondi, che deve trascorrere senza traffico sul
   socket prima che vengano inviati, qualora si sia attivata su di esso
   l'opzione \const{SO\_KEEPALIVE}, i messaggi di \textit{keep-alive} (si veda
@@ -3254,31 +3246,30 @@ quantità di dettagli è fornita nel seguente elenco:
   su tutti i kernel unix-like e deve essere evitata se si vuole scrivere
   codice portabile.
 
-\item[\const{TCP\_KEEPINTVL}] con questa opzione si legge o si imposta
+\item[\constd{TCP\_KEEPINTVL}] con questa opzione si legge o si imposta
   l'intervallo di tempo, in secondi, fra due messaggi di \textit{keep-alive}
   successivi (si veda sempre quanto illustrato in
   sez.~\ref{sec:sock_options_main}). Come la precedente non è disponibile su
   tutti i kernel unix-like e deve essere evitata se si vuole scrivere codice
   portabile.
 
-\item[\const{TCP\_KEEPCNT}] con questa opzione si legge o si imposta il numero
+\item[\constd{TCP\_KEEPCNT}] con questa opzione si legge o si imposta il numero
   totale di messaggi di \textit{keep-alive} da inviare prima di concludere che
   la connessione è caduta per assenza di risposte ad un messaggio di
   \textit{keep-alive} (di nuovo vedi sez.~\ref{sec:sock_options_main}). Come
   la precedente non è disponibile su tutti i kernel unix-like e deve essere
   evitata se si vuole scrivere codice portabile.
 
-\item[\const{TCP\_SYNCNT}] con questa opzione si legge o si imposta il numero
-  di tentativi di ritrasmissione dei segmenti SYN usati nel
-  \itindex{three~way~handshake} \textit{three way handshake} prima che il
-  tentativo di connessione venga abortito (si ricordi quanto accennato in
-  sez.~\ref{sec:TCP_func_connect}). Sovrascrive per il singolo socket il valore
-  globale impostato con la \textit{sysctl} \texttt{tcp\_syn\_retries} (vedi
-  sez.~\ref{sec:sock_ipv4_sysctl}).  Non vengono accettati valori maggiori di
-  255; anche questa opzione non è standard e deve essere evitata se si vuole
-  scrivere codice portabile.
-
-\item[\const{TCP\_LINGER2}] con questa opzione si legge o si imposta, in
+\item[\constd{TCP\_SYNCNT}] con questa opzione si legge o si imposta il numero
+  di tentativi di ritrasmissione dei segmenti SYN usati nel \textit{three way
+    handshake} prima che il tentativo di connessione venga abortito (si
+  ricordi quanto accennato in sez.~\ref{sec:TCP_func_connect}). Sovrascrive
+  per il singolo socket il valore globale impostato con la \textit{sysctl}
+  \texttt{tcp\_syn\_retries} (vedi sez.~\ref{sec:sock_ipv4_sysctl}).  Non
+  vengono accettati valori maggiori di 255; anche questa opzione non è
+  standard e deve essere evitata se si vuole scrivere codice portabile.
+
+\item[\constd{TCP\_LINGER2}] con questa opzione si legge o si imposta, in
   numero di secondi, il tempo di sussistenza dei socket terminati nello stato
   \texttt{FIN\_WAIT2} (si ricordi quanto visto in
   sez.~\ref{sec:TCP_conn_term}).\footnote{si tenga ben presente che questa
@@ -3289,29 +3280,28 @@ quantità di dettagli è fornita nel seguente elenco:
   sez.~\ref{sec:sock_ipv4_sysctl}).  Anche questa opzione è da evitare se si
   ha a cuore la portabilità del codice.
 
-\item[\const{TCP\_DEFER\_ACCEPT}] questa opzione consente di modificare il
+\item[\constd{TCP\_DEFER\_ACCEPT}] questa opzione consente di modificare il
   comportamento standard del protocollo TCP nello stabilirsi di una
-  connessione; se ricordiamo il meccanismo del \itindex{three~way~handshake}
-  \textit{three way handshake} illustrato in fig.~\ref{fig:TCP_TWH} possiamo
-  vedere che in genere un client inizierà ad inviare i dati ad un server solo
-  dopo l'emissione dell'ultimo segmento di ACK.
+  connessione; se ricordiamo il meccanismo del \textit{three way handshake}
+  illustrato in fig.~\ref{fig:TCP_TWH} possiamo vedere che in genere un client
+  inizierà ad inviare i dati ad un server solo dopo l'emissione dell'ultimo
+  segmento di ACK.
 
   Di nuovo esistono situazioni (e la più tipica è quella di una richiesta
   HTTP) in cui sarebbe utile inviare immediatamente la richiesta all'interno
-  del segmento con l'ultimo ACK del \itindex{three~way~handshake}
-  \textit{three way handshake}; si potrebbe così risparmiare l'invio di un
-  segmento successivo per la richiesta e il ritardo sul server fra la
-  ricezione dell'ACK e quello della richiesta.
+  del segmento con l'ultimo ACK del \textit{three way handshake}; si potrebbe
+  così risparmiare l'invio di un segmento successivo per la richiesta e il
+  ritardo sul server fra la ricezione dell'ACK e quello della richiesta.
 
   Se si invoca \const{TCP\_DEFER\_ACCEPT} su un socket dal lato client (cioè
   dal lato da cui si invoca \func{connect}) si istruisce il kernel a non
-  inviare immediatamente l'ACK finale del \itindex{three~way~handshake}
-  \textit{three way handshake}, attendendo per un po' di tempo la prima
-  scrittura, in modo da inviare i dati di questa insieme col segmento ACK.
-  Chiaramente la correttezza di questo comportamento dipende in maniera
-  diretta dal tipo di applicazione che usa il socket; con HTTP, che invia una
-  breve richiesta, permette di risparmiare un segmento, con FTP, in cui invece
-  si attende la ricezione del prompt del server, introduce un inutile ritardo.
+  inviare immediatamente l'ACK finale del \textit{three way handshake},
+  attendendo per un po' di tempo la prima scrittura, in modo da inviare i dati
+  di questa insieme col segmento ACK.  Chiaramente la correttezza di questo
+  comportamento dipende in maniera diretta dal tipo di applicazione che usa il
+  socket; con HTTP, che invia una breve richiesta, permette di risparmiare un
+  segmento, con FTP, in cui invece si attende la ricezione del prompt del
+  server, introduce un inutile ritardo.
 
   Allo stesso tempo il protocollo TCP prevede che sul lato del server la
   funzione \func{accept} ritorni dopo la ricezione dell'ACK finale, in tal
@@ -3323,7 +3313,7 @@ quantità di dettagli è fornita nel seguente elenco:
   situazione; quando la si invoca sul lato server (vale a dire su un socket in
   ascolto) l'opzione fa sì che \func{accept} ritorni soltanto quando sono
   presenti dei dati sul socket, e non alla ricezione dell'ACK conclusivo del
-  \itindex{three~way~handshake} \textit{three way handshake}.
+  \textit{three way handshake}.
 
   L'opzione prende un valore intero che indica il numero massimo di secondi
   per cui mantenere il ritardo, sia per quanto riguarda il ritorno di
@@ -3334,7 +3324,7 @@ quantità di dettagli è fornita nel seguente elenco:
     comportamento di \const{TCP\_DEFER\_ACCEPT} per quanto riguarda il lato
     server.}
 
-\item[\const{TCP\_WINDOW\_CLAMP}] con questa opzione si legge o si imposta
+\item[\constd{TCP\_WINDOW\_CLAMP}] con questa opzione si legge o si imposta
   alla dimensione specificata, in byte, il valore dichiarato della
   \textit{advertised window} (vedi sez.~\ref{sec:tcp_protocol_xxx}). Il kernel
   impone comunque una dimensione minima pari a \texttt{SOCK\_MIN\_RCVBUF/2}.
@@ -3351,7 +3341,7 @@ quantità di dettagli è fornita nel seguente elenco:
   \label{fig:tcp_info_struct}
 \end{figure}
 
-\item[\const{TCP\_INFO}] questa opzione, specifica di Linux, ma introdotta
+\item[\constd{TCP\_INFO}] questa opzione, specifica di Linux, ma introdotta
   anche in altri kernel (ad esempio FreeBSD) permette di controllare lo stato
   interno di un socket TCP direttamente da un programma in user space.
   L'opzione restituisce in una speciale struttura \struct{tcp\_info}, la cui
@@ -3379,7 +3369,7 @@ quantità di dettagli è fornita nel seguente elenco:
 %Si noti come nell'esempio si sia (
 
 
-\item[\const{TCP\_QUICKACK}] con questa opzione è possibile eseguire una forma
+\item[\constd{TCP\_QUICKACK}] con questa opzione è possibile eseguire una forma
   di controllo sull'invio dei segmenti ACK all'interno di in flusso di dati su
   TCP. In genere questo invio viene gestito direttamente dal kernel, il
   comportamento standard, corrispondente la valore logico di vero (in genere
@@ -3404,7 +3394,7 @@ quantità di dettagli è fornita nel seguente elenco:
 
 % TODO trattare con gli esempi di apache
 
-\item[\const{TCP\_CONGESTION}] questa opzione permette di impostare quale
+\item[\constd{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{sec:tcp_protocol_xxx}) per evitare di trasmettere inutilmente
@@ -3486,7 +3476,7 @@ Il protocollo UDP, anche per la sua maggiore semplicità, supporta un numero
 ridotto di opzioni, riportate in tab.~\ref{tab:sock_opt_udplevel}; anche in
 questo caso per poterle utilizzare occorrerà impostare l'opportuno valore per
 l'argomento \param{level}, che è \const{SOL\_UDP} (o l'equivalente
-\const{IPPROTO\_UDP}).  Le costanti che identificano dette opzioni sono
+\constd{IPPROTO\_UDP}).  Le costanti che identificano dette opzioni sono
 definite in \headfiled{netinet/udp.h}, ed accessibili includendo detto
 file.\footnote{come per TCP, la definizione delle opzioni effettivamente
   supportate dal kernel si trova in realtà nel file
@@ -3502,9 +3492,9 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente
                     \textbf{Descrizione}\\
     \hline
     \hline
-    \const{UDP\_CORK}  &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? 
+    \constd{UDP\_CORK}  &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? 
       Accumula tutti i dati su un unico pacchetto.\\
-    \const{UDP\_ENCAP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? 
+    \constd{UDP\_ENCAP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %??? 
       Non documentata.\\
    \hline
   \end{tabular}
@@ -3520,14 +3510,14 @@ sono un semplice riferimento, una maggiore quantità di dettagli sulle
 caratteristiche delle opzioni citate è quello dell'elenco seguente:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
-\item[\const{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga
+\item[\constd{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga
   \const{TCP\_CORK} vista in precedenza per il protocollo TCP, e quando
   abilitata consente di accumulare i dati in uscita su un solo pacchetto che
   verrà inviato una volta che la si disabiliti. L'opzione è stata introdotta
   con il kernel 2.5.44, e non deve essere utilizzata in codice che vuole
   essere portabile.
 
-\item[\const{UDP\_ENCAP}] Questa opzione permette di gestire l'incapsulazione
+\item[\constd{UDP\_ENCAP}] Questa opzione permette di gestire l'incapsulazione
   dei dati nel protocollo UDP. L'opzione è stata introdotta con il kernel
   2.5.67, e non è documentata. Come la precedente è specifica di Linux e non
   deve essere utilizzata in codice portabile.
@@ -3570,24 +3560,24 @@ deve sempre essere passato come puntatore ad una variabile (o struttura)
 precedentemente allocata. Le costanti che identificano le operazioni sono le
 seguenti:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura
+\item[\constd{SIOCGSTAMP}] restituisce il contenuto di una struttura
   \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~(RTT)} \textit{Round Trip Time} cui abbiamo già
-    accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
+  misurazioni precise del tempo di andata e ritorno\footnote{il \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 \textit{process group} a cui
+\item[\constd{SIOCSPGRP}] imposta il processo o il \textit{process group} a cui
   inviare i segnali \signal{SIGIO} e \signal{SIGURG} quando viene completata
   una operazione di I/O asincrono o arrivano dei dati urgenti
-  \itindex{out-of-band} (\texttt{out-of-band}). Il terzo argomento deve essere
-  un puntatore ad una variabile di tipo \type{pid\_t}; un valore positivo
-  indica direttamente il \ids{PID} del processo, mentre un valore negativo
-  indica (col valore assoluto) il \textit{process group}. Senza privilegi di
-  amministratore o la capability \const{CAP\_KILL} si può impostare solo se
-  stessi o il proprio \textit{process group}.
-
-\item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
+  (\texttt{out-of-band}). Il terzo argomento deve essere un puntatore ad una
+  variabile di tipo \type{pid\_t}; un valore positivo indica direttamente il
+  \ids{PID} del processo, mentre un valore negativo indica (col valore
+  assoluto) il \textit{process group}. Senza privilegi di amministratore o la
+  capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio
+  \textit{process group}.
+
+\item[\constd{SIOCGPGRP}] legge le impostazioni presenti sul socket
   relativamente all'eventuale processo o \textit{process group} cui devono
   essere inviati i segnali \signal{SIGIO} e \signal{SIGURG}. Come per
   \const{SIOCSPGRP} l'argomento passato deve un puntatore ad una variabile di
@@ -3647,7 +3637,7 @@ richiedono i privilegi di amministratore o la \textit{capability}
 \const{CAP\_NET\_ADMIN}, altrimenti si otterrà un errore di \errval{EPERM}.
 Le costanti che identificano le operazioni disponibili sono le seguenti:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SIOCGIFNAME}] questa è l'unica operazione che usa il campo
+\item[\constd{SIOCGIFNAME}] questa è l'unica operazione che usa il campo
   \var{ifr\_name} per restituire un risultato, tutte le altre lo utilizzano
   per indicare l'interfaccia sulla quale operare. L'operazione richiede che si
   indichi nel campo \var{ifr\_ifindex} il valore numerico dell'\textsl{indice}
@@ -3663,11 +3653,11 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
   ordinato in base a tale valore (riportato come primo campo).
   
 
-\item[\const{SIOCGIFINDEX}] restituisce nel campo \var{ifr\_ifindex} il valore
+\item[\constd{SIOCGIFINDEX}] restituisce nel campo \var{ifr\_ifindex} il valore
   numerico dell'indice dell'interfaccia specificata con \var{ifr\_name}, è in
   sostanza l'operazione inversa di \const{SIOCGIFNAME}.
 
-\item[\const{SIOCGIFFLAGS}] permette di ottenere nel campo \var{ifr\_flags} il
+\item[\constd{SIOCGIFFLAGS}] permette di ottenere nel campo \var{ifr\_flags} il
   valore corrente dei flag dell'interfaccia specificata (con \var{ifr\_name}).
   Il valore restituito è una maschera binaria i cui bit sono identificabili
   attraverso le varie costanti di tab.~\ref{tab:netdevice_iface_flag}.
@@ -3680,35 +3670,36 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
     \textbf{Flag} & \textbf{Significato} \\
     \hline
     \hline
-    \const{IFF\_UP}        & L'interfaccia è attiva.\\
-    \const{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di
+    \constd{IFF\_UP}        & L'interfaccia è attiva.\\
+    \constd{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di
                              \textit{broadcast} valido.\\
-    \const{IFF\_DEBUG}     & È attivo il flag interno di debug.\\
-    \const{IFF\_LOOPBACK}  & L'interfaccia è una interfaccia di
+    \constd{IFF\_DEBUG}     & È attivo il flag interno di debug.\\
+    \constd{IFF\_LOOPBACK}  & L'interfaccia è una interfaccia di
                              \textit{loopback}.\\ 
-    \const{IFF\_POINTOPOINT}&L'interfaccia è associata ad un collegamento
+    \constd{IFF\_POINTOPOINT}&L'interfaccia è associata ad un collegamento
                              \textsl{punto-punto}.\\ 
-    \const{IFF\_RUNNING}   & L'interfaccia ha delle risorse allocate (non può
+    \constd{IFF\_RUNNING}   & L'interfaccia ha delle risorse allocate (non può
                              quindi essere disattivata).\\
-    \const{IFF\_NOARP}     & L'interfaccia ha il protocollo ARP disabilitato o
+    \constd{IFF\_NOARP}     & L'interfaccia ha il protocollo ARP disabilitato o
                              l'indirizzo del livello di rete non è impostato.\\
-    \const{IFF\_PROMISC}   & L'interfaccia è in \index{modo~promiscuo}
-                             \textsl{modo promiscuo} (riceve cioè tutti i
-                             pacchetti che vede passare, compresi quelli non
-                             direttamente indirizzati a lei).\\
-    \const{IFF\_NOTRAILERS}& Evita l'uso di \textit{trailer} nei pacchetti.\\
-    \const{IFF\_ALLMULTI}  & Riceve tutti i pacchetti di \textit{multicast}.\\
-    \const{IFF\_MASTER}    & L'interfaccia è il master di un bundle per il
+    \constd{IFF\_PROMISC}   & L'interfaccia è nel cosiddetto
+                             \index{modo~promiscuo} \textsl{modo promiscuo},
+                             riceve cioè tutti i pacchetti che vede passare,
+                             compresi quelli non direttamente indirizzati a
+                             lei.\\
+    \constd{IFF\_NOTRAILERS}& Evita l'uso di \textit{trailer} nei pacchetti.\\
+    \constd{IFF\_ALLMULTI}  & Riceve tutti i pacchetti di \textit{multicast}.\\
+    \constd{IFF\_MASTER}    & L'interfaccia è il master di un bundle per il
                              bilanciamento di carico.\\
-    \const{IFF\_SLAVE}     & L'interfaccia è uno slave di un bundle per il
+    \constd{IFF\_SLAVE}     & L'interfaccia è uno slave di un bundle per il
                              bilanciamento di carico.\\
-    \const{IFF\_MULTICAST} & L'interfaccia ha il supporto per il
+    \constd{IFF\_MULTICAST} & L'interfaccia ha il supporto per il
                              \textit{multicast} attivo.\\
-    \const{IFF\_PORTSEL}   & L'interfaccia può impostare i suoi parametri
+    \constd{IFF\_PORTSEL}   & L'interfaccia può impostare i suoi parametri
                              hardware (con l'uso di \struct{ifmap}).\\
-    \const{IFF\_AUTOMEDIA} & L'interfaccia è in grado di selezionare
+    \constd{IFF\_AUTOMEDIA} & L'interfaccia è in grado di selezionare
                              automaticamente il tipo di collegamento.\\
-    \const{IFF\_DYNAMIC}   & Gli indirizzi assegnati all'interfaccia vengono
+    \constd{IFF\_DYNAMIC}   & Gli indirizzi assegnati all'interfaccia vengono
                              persi quando questa viene disattivata.\\
 %    \const{IFF\_}      & .\\
     \hline
@@ -3719,50 +3710,48 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
 \end{table}
 
 
-\item[\const{SIOCSIFFLAGS}] permette di impostare il valore dei flag
+\item[\constd{SIOCSIFFLAGS}] permette di impostare il valore dei flag
   dell'interfaccia specificata (sempre con \var{ifr\_name}, non staremo a
   ripeterlo oltre) attraverso il valore della maschera binaria da passare nel
   campo \var{ifr\_flags}, che può essere ottenuta con l'OR aritmetico delle
   costanti di tab.~\ref{tab:netdevice_iface_flag}; questa operazione è
   privilegiata.
 
-\item[\const{SIOCGIFMETRIC}] permette di leggere il valore della metrica del
+\item[\constd{SIOCGIFMETRIC}] permette di leggere il valore della metrica del
   dispositivo associato all'interfaccia specificata nel campo
   \var{ifr\_metric}.  Attualmente non è implementato, e l'operazione
   restituisce sempre un valore nullo.
 
-\item[\const{SIOCSIFMETRIC}] permette di impostare il valore della metrica del
+\item[\constd{SIOCSIFMETRIC}] permette di impostare il valore della metrica del
   dispositivo al valore specificato nel campo \var{ifr\_metric}, attualmente
   non ancora implementato, restituisce un errore di \errval{EOPNOTSUPP}.
 
-\item[\const{SIOCGIFMTU}] permette di leggere il valore della
-  \itindex{Maximum~Transfer~Unit~(MTU)} \textit{Maximum Transfer Unit} del
-  dispositivo nel campo \var{ifr\_mtu}.
+\item[\constd{SIOCGIFMTU}] permette di leggere il valore della \textit{Maximum
+    Transfer Unit} del dispositivo nel campo \var{ifr\_mtu}.
 
-\item[\const{SIOCSIFMTU}] permette di impostare il valore della
-  \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.
+\item[\constd{SIOCSIFMTU}] permette di impostare il valore della
+  \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.
 
-\item[\const{SIOCGIFHWADDR}] permette di leggere il valore dell'indirizzo
+\item[\constd{SIOCGIFHWADDR}] permette di leggere il valore dell'indirizzo
   hardware del dispositivo associato all'interfaccia nel campo
   \var{ifr\_hwaddr}; questo viene restituito come struttura \struct{sockaddr}
   in cui il campo \var{sa\_family} contiene un valore \texttt{ARPHRD\_*}
   indicante il tipo di indirizzo ed il campo \var{sa\_data} il valore binario
   dell'indirizzo hardware a partire dal byte 0.
 
-\item[\const{SIOCSIFHWADDR}] permette di impostare il valore dell'indirizzo
+\item[\constd{SIOCSIFHWADDR}] permette di impostare il valore dell'indirizzo
   hardware del dispositivo associato all'interfaccia attraverso il valore
   della struttura \struct{sockaddr} (con lo stesso formato illustrato per
   \const{SIOCGIFHWADDR}) passata nel campo \var{ifr\_hwaddr}. L'operazione è
   privilegiata.
 
-\item[\const{SIOCSIFHWBROADCAST}] imposta l'indirizzo \textit{broadcast}
+\item[\constd{SIOCSIFHWBROADCAST}] imposta l'indirizzo \textit{broadcast}
   hardware dell'interfaccia al valore specificato dal campo
   \var{ifr\_hwaddr}. L'operazione è privilegiata.
 
-\item[\const{SIOCGIFMAP}] legge alcuni parametri hardware (memoria, interrupt,
+\item[\constd{SIOCGIFMAP}] legge alcuni parametri hardware (memoria, interrupt,
   canali di DMA) del driver dell'interfaccia specificata, restituendo i
   relativi valori nel campo \var{ifr\_map}; quest'ultimo contiene una
   struttura di tipo \struct{ifmap}, la cui definizione è illustrata in
@@ -3778,13 +3767,13 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
   \label{fig:netdevice_ifmap_struct}
 \end{figure}
 
-\item[\const{SIOCSIFMAP}] imposta i parametri hardware del driver
+\item[\constd{SIOCSIFMAP}] imposta i parametri hardware del driver
   dell'interfaccia specificata, restituendo i relativi valori nel campo
   \var{ifr\_map}. Come per \const{SIOCGIFMAP} questo deve essere passato come
   struttura \struct{ifmap}, secondo la definizione di
   fig.~\ref{fig:netdevice_ifmap_struct}.
 
-\item[\const{SIOCADDMULTI}] aggiunge un indirizzo di \textit{multicast} ai
+\item[\constd{SIOCADDMULTI}] aggiunge un indirizzo di \textit{multicast} ai
   filtri del livello di collegamento associati dell'interfaccia. Si deve usare
   un indirizzo hardware da specificare attraverso il campo \var{ifr\_hwaddr},
   che conterrà l'opportuna struttura \struct{sockaddr}; l'operazione è
@@ -3792,22 +3781,22 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
   si possono usare i \textit{packet socket}, vedi
   sez.~\ref{sec:packet_socket}.
 
-\item[\const{SIOCDELMULTI}] rimuove un indirizzo di \textit{multicast} ai
+\item[\constd{SIOCDELMULTI}] rimuove un indirizzo di \textit{multicast} ai
   filtri del livello di collegamento dell'interfaccia, vuole un indirizzo
   hardware specificato come per \const{SIOCADDMULTI}. Anche questa operazione
   è privilegiata e può essere eseguita in forma alternativa con i
   \textit{packet socket}.
 
-\item[\const{SIOCGIFTXQLEN}] permette di leggere la lunghezza della coda di
+\item[\constd{SIOCGIFTXQLEN}] permette di leggere la lunghezza della coda di
   trasmissione del dispositivo associato all'interfaccia specificata nel campo
   \var{ifr\_qlen}.
 
-\item[\const{SIOCSIFTXQLEN}] permette di impostare il valore della lunghezza
+\item[\constd{SIOCSIFTXQLEN}] permette di impostare il valore della lunghezza
   della coda di trasmissione del dispositivo associato all'interfaccia, questo
   deve essere specificato nel campo \var{ifr\_qlen}. L'operazione è
   privilegiata. 
 
-\item[\const{SIOCSIFNAME}] consente di cambiare il nome dell'interfaccia
+\item[\constd{SIOCSIFNAME}] consente di cambiare il nome dell'interfaccia
   indicata da \var{ifr\_name} utilizzando il nuovo nome specificato nel campo
   \var{ifr\_rename}.
 
@@ -3818,7 +3807,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
 % hardware senza modificarlo
 
 Una ulteriore operazione, che consente di ricavare le caratteristiche delle
-interfacce di rete, è \const{SIOCGIFCONF}; però per ragioni di compatibilità
+interfacce di rete, è \constd{SIOCGIFCONF}; però per ragioni di compatibilità
 questa operazione è disponibile soltanto per i socket della famiglia
 \const{AF\_INET} (vale ad dire per socket IPv4). In questo caso l'utente dovrà
 passare come argomento una struttura \struct{ifconf}, definita in
@@ -3927,16 +3916,15 @@ illustrate nell'elenco seguente; il terzo argomento della funzione, gestito
 come \textit{value result argument}, deve essere sempre il puntatore ad una
 variabile di tipo \ctyp{int}:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SIOCINQ}] restituisce la quantità di dati non ancora letti
+\item[\constd{SIOCINQ}] restituisce la quantità di dati non ancora letti
   presenti nel buffer di ricezione; il socket non deve essere in stato
   \texttt{LISTEN}, altrimenti si avrà un errore di \errval{EINVAL}.
-\item[\const{SIOCATMARK}] ritorna un intero non nullo, da intendere come
+\item[\constd{SIOCATMARK}] ritorna un intero non nullo, da intendere come
   valore logico, se il flusso di dati letti sul socket è arrivato sulla
-  posizione (detta anche \textit{urgent mark}) in cui sono stati ricevuti
-  \itindex{out-of-band} dati urgenti (vedi sez.~\ref{sec:TCP_urgent_data}).
-  Una operazione di lettura da un socket non attraversa mai questa posizione,
-  per cui è possibile controllare se la si è raggiunta o meno con questa
-  operazione.
+  posizione (detta anche \textit{urgent mark}) in cui sono stati ricevuti dati
+  urgenti (vedi sez.~\ref{sec:TCP_urgent_data}).  Una operazione di lettura da
+  un socket non attraversa mai questa posizione, per cui è possibile
+  controllare se la si è raggiunta o meno con questa operazione.
 
   Questo è utile quando si attiva l'opzione \const{SO\_OOBINLINE} (vedi
   sez.~\ref{sec:sock_generic_options}) per ricevere i dati urgenti all'interno
@@ -3948,7 +3936,7 @@ variabile di tipo \ctyp{int}:
   dati urgenti e non il normale traffico; torneremo su questo in maggior
   dettaglio in sez.~\ref{sec:TCP_urgent_data}.
 
-\item[\const{SIOCOUTQ}] restituisce la quantità di dati non ancora inviati
+\item[\constd{SIOCOUTQ}] restituisce la quantità di dati non ancora inviati
   presenti nel buffer di spedizione; come per \const{SIOCINQ} il socket non
   deve essere in stato \texttt{LISTEN}, altrimenti si avrà un errore di
   \errval{EINVAL}.
@@ -4043,19 +4031,22 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
   massima che si può assegnare al buffer di trasmissione dei socket attraverso
   l'uso dell'opzione \const{SO\_SNDBUF}.
 \item[\sysctlrelfiled{net/core}{message\_cost},
-  \sysctlrelfiled{net/core}{message\_burst}] contengono le impostazioni
-  del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione
-  di messaggi di avviso da parte del kernel per eventi relativi a problemi
-  sulla rete, imponendo un limite che consente di prevenire eventuali attacchi
-  di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service} usando i
-  log.\footnote{senza questo limite un attaccante potrebbe inviare ad arte un
-    traffico che generi intenzionalmente messaggi di errore, per saturare il
-    sistema dei log.}
-
-  Il \itindex{bucket~filter} \textit{bucket filter} è un algoritmo generico
-  che permette di impostare dei limiti di flusso su una quantità\footnote{uno
-    analogo viene usato nel \itindex{netfilter} \textit{netfilter} per imporre
-    dei limiti sul flusso dei pacchetti.}  senza dovere eseguire medie
+  \sysctlrelfiled{net/core}{message\_burst}] contengono le impostazioni del
+  \textit{bucket filter} che controlla l'emissione di
+  messaggi di avviso da parte del kernel per eventi relativi a problemi sulla
+  rete, imponendo un limite che consente di prevenire eventuali attacchi di
+  \textit{Denial of Service} usando i log.\footnote{senza questo limite un
+    attaccante potrebbe inviare ad arte un traffico che generi
+    intenzionalmente messaggi di errore, per saturare il sistema dei log.}
+
+  \itindbeg{bucket~filter} 
+
+  Il \textit{bucket filter} è un algoritmo generico che permette di impostare
+  dei limiti di flusso su una quantità\footnote{uno analogo viene usato per
+    imporre dei limiti sul flusso dei pacchetti nel \itindex{netfilter}
+    \textit{netfilter} di Linux (il \textit{netfilter} è l'infrastruttura
+    usata per il filtraggio dei pacchetti del kernel, per maggiori dettagli si
+    consulti il cap.~2 di \cite{FwGL}).}  senza dovere eseguire medie
   temporali, che verrebbero a dipendere in misura non controllabile dalla
   dimensione dell'intervallo su cui si media e dalla distribuzione degli
   eventi;\footnote{in caso di un picco di flusso (il cosiddetto
@@ -4067,6 +4058,8 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
   l'aver fissato un flusso di uscita garantisce che a regime questo sarà il
   valore medio del flusso ottenibile dal \textit{bucket}.
 
+  \itindend{bucket~filter} 
+
   I due valori indicano rispettivamente il flusso a regime (non sarà inviato
   più di un messaggio per il numero di secondi specificato da
   \texttt{message\_cost}) e la dimensione iniziale per in caso di picco di
@@ -4094,25 +4087,24 @@ questi però non è documentato:
   della coda di ricezione sotto la quale si considera di avere una bassa
   congestione.
 
-\item[\sysctlrelfiled{net/core}{mod\_cong}] valore per l'occupazione
-  della coda di ricezione sotto la quale si considera di avere una congestione
+\item[\sysctlrelfiled{net/core}{mod\_cong}] valore per l'occupazione della
+  coda di ricezione sotto la quale si considera di avere una congestione
   moderata.
 
-\item[\sysctlrelfiled{net/core}{no\_cong}] valore per l'occupazione
-  della coda di ricezione sotto la quale si considera di non avere
-  congestione.
+\item[\sysctlrelfiled{net/core}{no\_cong}] valore per l'occupazione della coda
+  di ricezione sotto la quale si considera di non avere congestione.
 
-\item[\sysctlrelfiled{net/core}{no\_cong\_thresh}] valore minimo
-  (\textit{low water mark}) per il riavvio dei dispositivi congestionati.
+\item[\sysctlrelfiled{net/core}{no\_cong\_thresh}] valore minimo (\textit{low
+    water mark}) per il riavvio dei dispositivi congestionati.
 
   % \item[\sysctlrelfiled{net/core}{netdev\_fastroute}] è presente
   %   soltanto quando si è compilato il kernel con l'apposita opzione di
   %   ottimizzazione per l'uso come router.
 
-\item[\sysctlrelfiled{net/core}{somaxconn}] imposta la dimensione
-  massima utilizzabile per il \textit{backlog} della funzione \func{listen}
-  (vedi sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della
-  costante \const{SOMAXCONN}; il suo valore di default è 128.
+\item[\sysctlrelfiled{net/core}{somaxconn}] imposta la dimensione massima
+  utilizzabile per il \textit{backlog} della funzione \func{listen} (vedi
+  sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della costante
+  \constd{SOMAXCONN}; il suo valore di default è 128.
 
 \end{basedescript}
 
@@ -4164,16 +4156,15 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
   accessibile solo in lettura, è inutilizzato nei kernel recenti ed eliminato
   a partire dal kernel 2.6.18.
 
-\item[\sysctlrelfiled{net/ipv4}{ip\_local\_port\_range}] imposta
-  l'intervallo dei valori usati per l'assegnazione delle porte effimere,
-  permette cioè di modificare i valori illustrati in
-  fig.~\ref{fig:TCP_port_alloc}; prende due valori interi separati da spazi,
-  che indicano gli estremi dell'intervallo. Si abbia cura di non definire un
-  intervallo che si sovrappone a quello delle porte usate per il
-  \itindex{masquerading} \textit{masquerading}, il kernel può gestire la
-  sovrapposizione, ma si avrà una perdita di prestazioni. Si imposti sempre un
-  valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare
-  conflitti con le porte usate dai servizi noti.
+\item[\sysctlrelfiled{net/ipv4}{ip\_local\_port\_range}] imposta l'intervallo
+  dei valori usati per l'assegnazione delle porte effimere, permette cioè di
+  modificare i valori illustrati in fig.~\ref{fig:TCP_port_alloc}; prende due
+  valori interi separati da spazi, che indicano gli estremi
+  dell'intervallo. Si abbia cura di non definire un intervallo che si
+  sovrappone a quello delle porte usate per il \textit{masquerading}, il
+  kernel può gestire la sovrapposizione, ma si avrà una perdita di
+  prestazioni. Si imposti sempre un valore iniziale maggiore di 1024 (o meglio
+  ancora di 4096) per evitare conflitti con le porte usate dai servizi noti.
 
 \item[\sysctlrelfiled{net/ipv4}{ip\_no\_pmtu\_disc}] permette di disabilitare
   per i socket \const{SOCK\_STREAM} la ricerca automatica della \textit{Path
@@ -4199,8 +4190,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
     \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.} Prende un valore logico e di default
   è disabilitato. Con i kernel dalla serie 2.4 in poi la deframmentazione
   viene attivata automaticamente quando si utilizza il sistema del
-  \itindex{netfilter} \textit{netfilter}, e questo parametro non è più
-  presente.
+  \textit{netfilter}, e questo parametro non è più presente.
 
 \item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il limite
   massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
@@ -4258,8 +4248,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 \item[\sysctlrelfiled{net/ipv4}{tcp\_app\_win}] indica la frazione della
   finestra TCP che viene riservata per gestire l'overhaed dovuto alla
   bufferizzazione. Prende un valore valore intero che consente di calcolare la
-  dimensione in byte come il massimo fra la
-  \itindex{Maximum~Segment~Size~(MSS)} MSS e
+  dimensione in byte come il massimo fra la MSS e
   $\texttt{window}/2^\texttt{tcp\_app\_win}$. Un valore nullo significa che
   non viene riservato nessuno spazio; il valore di default è 31.
 
@@ -4309,15 +4298,14 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 % TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement o
 % mettere riferimento nelle appendici
 
-\item[\sysctlrelfiled{net/ipv4}{tcp\_fin\_timeout}] specifica il numero
-  di secondi da passare in stato \texttt{FIN\_WAIT2} nell'attesa delle
-  ricezione del pacchetto FIN conclusivo, passati quali il socket viene
-  comunque chiuso forzatamente.  Prende un valore intero che indica i secondi
-  e di default è 60.\footnote{nei kernel della serie 2.2.x era il valore
-    utilizzato era invece di 120 secondi.} L'uso di questa opzione realizza
-  quella che in sostanza è una violazione delle specifiche del protocollo TCP,
-  ma è utile per fronteggiare alcuni attacchi di
-  \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}.
+\item[\sysctlrelfiled{net/ipv4}{tcp\_fin\_timeout}] specifica il numero di
+  secondi da passare in stato \texttt{FIN\_WAIT2} nell'attesa delle ricezione
+  del pacchetto FIN conclusivo, passati quali il socket viene comunque chiuso
+  forzatamente.  Prende un valore intero che indica i secondi e di default è
+  60.\footnote{nei kernel della serie 2.2.x era il valore utilizzato era
+    invece di 120 secondi.} L'uso di questa opzione realizza quella che in
+  sostanza è una violazione delle specifiche del protocollo TCP, ma è utile
+  per fronteggiare alcuni attacchi di \textit{Denial of Service}.
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_frto}] abilita il supporto per
   l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timeout del
@@ -4370,11 +4358,11 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
 
 % TODO verificare la spiegazione di connessione orfana.
 
-\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_syn\_backlog}] indica la
-  lunghezza della coda delle connessioni incomplete, cioè delle connessioni
-  per le quali si è ricevuto un SYN di richiesta ma non l'ACK finale del
-  \itindex{three~way~handshake} \textit{three way handshake} (si riveda quanto
-  illustrato in sez.~\ref{sec:TCP_func_listen}).
+\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_syn\_backlog}] indica la lunghezza
+  della coda delle connessioni incomplete, cioè delle connessioni per le quali
+  si è ricevuto un SYN di richiesta ma non l'ACK finale del \textit{three way
+    handshake} (si riveda quanto illustrato in
+  sez.~\ref{sec:TCP_func_listen}).
 
   Quando questo valore è superato il kernel scarterà immediatamente ogni
   ulteriore richiesta di connessione. Prende un valore intero; il default, che
@@ -4481,13 +4469,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   \item il secondo valore, denominato \textit{default} nelle pagine di
     manuale, indica la dimensione di default, in byte, del buffer di ricezione
     di un socket TCP.  Questo valore sovrascrive il default iniziale impostato
-    per tutti i socket con \sysctlfile{net/core/mem\_default} che vale
-    per qualunque protocollo. Il default è 87380 byte, ridotto a 43689 per
-    sistemi con poca memoria. Se si desiderano dimensioni più ampie per tutti
-    i socket si può aumentare questo valore, ma se si vuole che in
-    corrispondenza aumentino anche le dimensioni usate per la finestra TCP si
-    deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling}
-    (di default è abilitato, vedi più avanti
+    per tutti i socket con \sysctlfile{net/core/mem\_default} che vale per
+    qualunque protocollo. Il default è 87380 byte, ridotto a 43689 per sistemi
+    con poca memoria. Se si desiderano dimensioni più ampie per tutti i socket
+    si può aumentare questo valore, ma se si vuole che in corrispondenza
+    aumentino anche le dimensioni usate per la finestra TCP si deve abilitare
+    il \textit{TCP window scaling} (di default è abilitato, vedi più avanti
     \sysctlrelfile{net/ipv4}{tcp\_window\_scaling}).
 
   \item il terzo valore, denominato \textit{max} nelle pagine di manuale,
@@ -4529,26 +4516,25 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   funzionalità come le estensioni e può causare problemi per i client ed il
   reinoltro dei pacchetti.
 
-\item[\sysctlrelfiled{net/ipv4}{tcp\_syn\_retries}] imposta il numero
-  di tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del
-  \itindex{three~way~handshake} \textit{three way handshake} (si ricordi
-  quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Prende un valore
-  intero che di default è 5; non si deve superare il valore massimo di 255.
+\item[\sysctlrelfiled{net/ipv4}{tcp\_syn\_retries}] imposta il numero di
+  tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del
+  \textit{three way handshake} (si ricordi quanto illustrato in
+  sez.~\ref{sec:TCP_func_connect}). Prende un valore intero che di default è
+  5; non si deve superare il valore massimo di 255.
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_timestamps}] abilita l'uso dei
   \textit{TCP timestamps}, come definiti
   nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore
   logico e di default è abilitato.
 
-\item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_recycle}] abilita il
-  riutilizzo rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore
-  logico e di default è disabilitato. Non è opportuno abilitare questa opzione
-  che può causare problemi con il NAT.\footnote{il \textit{Network Address
-      Translation} è una tecnica, impiegata nei firewall e nei router, che
-    consente di modificare al volo gli indirizzi dei pacchetti che transitano
-    per una macchina, Linux la supporta con il \itindex{netfilter}
-    \textit{netfilter}, per maggiori dettagli si consulti il cap.~2 di
-    \cite{FwGL}.}
+\item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_recycle}] abilita il riutilizzo
+  rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore logico e di
+  default è disabilitato. Non è opportuno abilitare questa opzione che può
+  causare problemi con il NAT.\footnote{il
+    \itindex{Network~Address~Translation} \textit{Network Address Translation}
+    è una tecnica, impiegata nei firewall e nei router, che consente di
+    modificare al volo gli indirizzi dei pacchetti che transitano per una
+    macchina, Linux la supporta con il \textit{netfilter}.}
 
 \item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo
   dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista
@@ -4591,14 +4577,14 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   \item il secondo valore, denominato \textit{default}, indica la dimensione
     di default in byte del buffer di spedizione di un socket TCP.  Questo
     valore sovrascrive il default iniziale impostato per tutti i tipi di
-    socket con \sysctlfile{net/core/wmem\_default}. Il default è 87380
-    byte, ridotto a 43689 per sistemi con poca memoria. Si può aumentare
-    questo valore quando si desiderano dimensioni più ampie del buffer di
+    socket con \sysctlfile{net/core/wmem\_default}. Il default è 87380 byte,
+    ridotto a 43689 per sistemi con poca memoria. Si può aumentare questo
+    valore quando si desiderano dimensioni più ampie del buffer di
     trasmissione per i socket TCP, ma come per il precedente
-    \sysctlrelfile{net/ipv4}{tcp\_rmem}) se si vuole che in
-    corrispondenza aumentino anche le dimensioni usate per la finestra TCP si
-    deve abilitare il \itindex{TCP~window~scaling} \textit{TCP window scaling}
-    con \sysctlrelfile{net/ipv4}{tcp\_window\_scaling}.
+    \sysctlrelfile{net/ipv4}{tcp\_rmem}) se si vuole che in corrispondenza
+    aumentino anche le dimensioni usate per la finestra TCP si deve abilitare
+    il \textit{TCP window scaling} con
+    \sysctlrelfile{net/ipv4}{tcp\_window\_scaling}.
 
   \item il terzo valore, denominato \textit{max}, indica la dimensione massima
     in byte del buffer di spedizione di un socket TCP; il default è 128Kb, che
index 2287b17..52d4809 100644 (file)
@@ -199,36 +199,36 @@ comunicazione.
        \textbf{Nome}&\textbf{Valore}&\textbf{Utilizzo}&\textbf{Man page} \\
        \hline
        \hline
-       \const{PF\_UNSPEC}   & 0& Non specificato               &            \\
-       \const{PF\_LOCAL}    & 1& Local communication           & unix(7)    \\
-       \const{PF\_UNIX}, \const{PF\_FILE}&1&Sinonimi di \const{PF\_LOCAL}& \\
-       \const{PF\_INET}     & 2& IPv4 Internet protocols       & ip(7)      \\
-       \const{PF\_AX25}     & 3& Amateur radio AX.25 protocol  &            \\
-       \const{PF\_IPX}      & 4& IPX - Novell protocols        &            \\
-       \const{PF\_APPLETALK}& 5& Appletalk                     & ddp(7)     \\
-       \const{PF\_NETROM}   & 6& Amateur radio NetROM          &            \\
-       \const{PF\_BRIDGE}   & 7& Multiprotocol bridge          &            \\
-       \const{PF\_ATMPVC}   & 8& Access to raw ATM PVCs        &            \\
-       \const{PF\_X25}      & 9& ITU-T X.25 / ISO-8208 protocol& x25(7)     \\
-       \const{PF\_INET6}    &10& IPv6 Internet protocols       & ipv6(7)    \\
-       \const{PF\_ROSE}     &11& Amateur Radio X.25 PLP        &            \\
-       \const{PF\_DECnet}   &12& Reserved for DECnet project   &            \\
-       \const{PF\_NETBEUI}  &13& Reserved for 802.2LLC project &            \\
-       \const{PF\_SECURITY} &14& Security callback pseudo AF   &            \\
-       \const{PF\_KEY}      &15& PF\_KEY key management API    &            \\
-       \const{PF\_NETLINK}  &16& Kernel user interface device  & netlink(7) \\
-       \const{PF\_ROUTE}    &16& Sinonimo di \const{PF\_NETLINK} emula BSD.&\\
-       \const{PF\_PACKET}   &17& Low level packet interface    & packet(7)  \\
-       \const{PF\_ASH}      &18& Ash                           &    \\
-       \const{PF\_ECONET}   &19& Acorn Econet                  &    \\
-       \const{PF\_ATMSVC}   &20& ATM SVCs                      &    \\
-       \const{PF\_SNA}      &22& Linux SNA Project             &    \\
-       \const{PF\_IRDA}     &23& IRDA socket (infrarossi)      &    \\
-       \const{PF\_PPPOX}    &24& PPPoX socket                  &    \\
-       \const{PF\_WANPIPE}  &25& Wanpipe API socket            &    \\
-       \const{PF\_LLC}      &26& Linux LLC                     &    \\
-       \const{PF\_CAN}      &29& Controller Are network        &    \\
-       \const{PF\_BLUETOOTH}&31& Bluetooth socket              &    \\
+       \constd{PF\_UNSPEC}   & 0& Non specificato               &            \\
+       \constd{PF\_LOCAL}    & 1& Local communication           & unix(7)    \\
+       \constd{PF\_UNIX}, \constd{PF\_FILE}&1&Sinonimi di \const{PF\_LOCAL}& \\
+       \constd{PF\_INET}     & 2& IPv4 Internet protocols       & ip(7)      \\
+       \constd{PF\_AX25}     & 3& Amateur radio AX.25 protocol  &            \\
+       \constd{PF\_IPX}      & 4& IPX - Novell protocols        &            \\
+       \constd{PF\_APPLETALK}& 5& Appletalk                     & ddp(7)     \\
+       \constd{PF\_NETROM}   & 6& Amateur radio NetROM          &            \\
+       \constd{PF\_BRIDGE}   & 7& Multiprotocol bridge          &            \\
+       \constd{PF\_ATMPVC}   & 8& Access to raw ATM PVCs        &            \\
+       \constd{PF\_X25}      & 9& ITU-T X.25 / ISO-8208 protocol& x25(7)     \\
+       \constd{PF\_INET6}    &10& IPv6 Internet protocols       & ipv6(7)    \\
+       \constd{PF\_ROSE}     &11& Amateur Radio X.25 PLP        &            \\
+       \constd{PF\_DECnet}   &12& Reserved for DECnet project   &            \\
+       \constd{PF\_NETBEUI}  &13& Reserved for 802.2LLC project &            \\
+       \constd{PF\_SECURITY} &14& Security callback pseudo AF   &            \\
+       \constd{PF\_KEY}      &15& PF\_KEY key management API    &            \\
+       \constd{PF\_NETLINK}  &16& Kernel user interface device  & netlink(7) \\
+       \constd{PF\_ROUTE}    &16& Sinonimo di \const{PF\_NETLINK} emula BSD.&\\
+       \constd{PF\_PACKET}   &17& Low level packet interface    & packet(7)  \\
+       \constd{PF\_ASH}      &18& Ash                           &    \\
+       \constd{PF\_ECONET}   &19& Acorn Econet                  &    \\
+       \constd{PF\_ATMSVC}   &20& ATM SVCs                      &    \\
+       \constd{PF\_SNA}      &22& Linux SNA Project             &    \\
+       \constd{PF\_IRDA}     &23& IRDA socket (infrarossi)      &    \\
+       \constd{PF\_PPPOX}    &24& PPPoX socket                  &    \\
+       \constd{PF\_WANPIPE}  &25& Wanpipe API socket            &    \\
+       \constd{PF\_LLC}      &26& Linux LLC                     &    \\
+       \constd{PF\_CAN}      &29& Controller Are network        &    \\
+       \constd{PF\_BLUETOOTH}&31& Bluetooth socket              &    \\
        \hline
   \end{tabular}
   \caption{Famiglie di protocolli definiti in Linux.} 
@@ -256,8 +256,8 @@ elenco delle famiglie di protocolli disponibili in Linux è riportato in
 tab.~\ref{tab:net_pf_names}. L'elenco indica tutti i protocolli definiti; fra
 questi però saranno utilizzabili solo quelli per i quali si è compilato il
 supporto nel kernel (o si sono caricati gli opportuni moduli), viene definita
-anche una costante \const{PF\_MAX} che indica il valore massimo associabile ad
-un dominio. 
+anche una costante \constd{PF\_MAX} che indica il valore massimo associabile
+ad un dominio.
 
 Si tenga presente che non tutte le famiglie di protocolli sono utilizzabili
 dall'utente generico, ad esempio in generale tutti i socket di tipo
@@ -281,28 +281,27 @@ seguenti costanti:\footnote{le pagine di manuale POSIX riportano solo i primi
   \texttt{include/linux/net.h} dei sorgenti del kernel.}
 
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SOCK\_STREAM}] Provvede un canale di trasmissione dati
+\item[\constd{SOCK\_STREAM}] Provvede un canale di trasmissione dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati vengono ricevuti e trasmessi come un flusso continuo di
   byte (da cui il nome \textit{stream}) e possono essere letti in blocchi di
   dimensioni qualunque. Può supportare la trasmissione dei cosiddetti dati
-  urgenti (o \itindex{out-of-band} \textit{out-of-band}, vedi
-  sez.~\ref{sec:TCP_urgent_data}).
-\item[\const{SOCK\_DGRAM}] Viene usato per trasmettere pacchetti di dati
+  urgenti (o \textit{out-of-band}, vedi sez.~\ref{sec:TCP_urgent_data}).
+\item[\constd{SOCK\_DGRAM}] Viene usato per trasmettere pacchetti di dati
   (\textit{datagram}) di lunghezza massima prefissata, indirizzati
   singolarmente. Non esiste una connessione e la trasmissione è effettuata in
   maniera non affidabile.
-\item[\const{SOCK\_SEQPACKET}] Provvede un canale di trasmissione di dati
+\item[\constd{SOCK\_SEQPACKET}] Provvede un canale di trasmissione di dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati possono vengono trasmessi per pacchetti di dimensione
   massima fissata, e devono essere letti integralmente da ciascuna chiamata a
   \func{read}.
-\item[\const{SOCK\_RAW}] Provvede l'accesso a basso livello ai protocolli di
+\item[\constd{SOCK\_RAW}] Provvede l'accesso a basso livello ai protocolli di
   rete e alle varie interfacce. I normali programmi di comunicazione non
   devono usarlo, è riservato all'uso di sistema.
-\item[\const{SOCK\_RDM}] Provvede un canale di trasmissione di dati
+\item[\constd{SOCK\_RDM}] Provvede un canale di trasmissione di dati
   affidabile, ma in cui non è garantito l'ordine di arrivo dei pacchetti.
-\item[\const{SOCK\_PACKET}] Obsoleto, non deve essere più usato (e pertanto
+\item[\constd{SOCK\_PACKET}] Obsoleto, non deve essere più usato (e pertanto
   non ne parleremo ulteriormente).
 \end{basedescript}
 
@@ -313,12 +312,12 @@ non strettamente attinenti all'indicazione del tipo secondo i valori appena
 illustrati. Essi infatti possono essere combinati con un OR aritmetico delle
 ulteriori costanti:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SOCK\_CLOEXEC}] imposta il flag di \textit{close-on-exec} sul
+\item[\constd{SOCK\_CLOEXEC}] imposta il flag di \textit{close-on-exec} sul
   file descriptor del socket, ottenendo lo stesso effetto del flag
   \const{O\_CLOEXEC} di \func{open} (vedi tab.~\ref{tab:open_operation_flag}),
   di cui costituisce l'analogo.
 
-\item[\const{SOCK\_NONBLOCK}] crea il socket in modalità non-bloccante, con
+\item[\constd{SOCK\_NONBLOCK}] crea il socket in modalità non-bloccante, con
   effetti identici ad una successiva chiamata a \func{fcntl} per impostare il
   flag di \const{O\_NONBLOCK} sul file descriptor (si faccia di nuovo
   riferimenti al significato di quest'ultimo come spiegato in
@@ -503,7 +502,7 @@ protocolli di livello superiore come TCP e UDP. Questa struttura però viene
 usata anche per i socket RAW che accedono direttamente al livello di IP, nel
 qual caso il numero della porta viene impostato al numero di protocollo.
 
-Il membro \var{sin\_family} deve essere sempre impostato a \const{AF\_INET},
+Il membro \var{sin\_family} deve essere sempre impostato a \constd{AF\_INET},
 altrimenti si avrà un errore di \errcode{EINVAL}; il membro \var{sin\_port}
 specifica il \textsl{numero di porta}. I numeri di porta sotto il 1024 sono
 chiamati \textsl{riservati} in quanto utilizzati da servizi standard e
@@ -547,7 +546,7 @@ riportata in fig.~\ref{fig:sock_sa_ipv6_struct}.
   \label{fig:sock_sa_ipv6_struct}
 \end{figure}
 
-Il campo \var{sin6\_family} deve essere sempre impostato ad \const{AF\_INET6},
+Il campo \var{sin6\_family} deve essere sempre impostato ad \constd{AF\_INET6},
 il campo \var{sin6\_port} è analogo a quello di IPv4 e segue le stesse regole;
 il campo \var{sin6\_flowinfo} è a sua volta diviso in tre parti di cui i 24
 bit inferiori indicano l'etichetta di flusso, i successivi 4 bit la priorità e
@@ -589,7 +588,7 @@ fig.~\ref{fig:sock_sa_local_struct}.
   \label{fig:sock_sa_local_struct}
 \end{figure}
 
-In questo caso il campo \var{sun\_family} deve essere \const{AF\_UNIX}, mentre
+In questo caso il campo \var{sun\_family} deve essere \constd{AF\_UNIX}, mentre
 il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme;
 può essere un file (di tipo socket) nel filesystem o una stringa univoca
 (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene
@@ -615,7 +614,7 @@ I socket AppleTalk permettono di usare il protocollo DDP, che è un protocollo
 a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
 \func{socket} deve essere nullo. È altresì possibile usare i socket raw
 specificando un tipo \const{SOCK\_RAW}, nel qual caso l'unico valore valido
-per \param{protocol} è \const{ATPROTO\_DDP}.
+per \param{protocol} è \constd{ATPROTO\_DDP}.
 
 Gli indirizzi AppleTalk devono essere specificati tramite una struttura
 \struct{sockaddr\_atalk}, la cui definizione è riportata in
@@ -632,18 +631,18 @@ il file \headfiled{netatalk/at.h}.
   \label{fig:sock_sa_atalk_struct}
 \end{figure}
 
-Il campo \var{sat\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
-campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
-inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
-usati solo da processi con i privilegi di amministratore o con la
-\textit{capability} \const{CAP\_NET\_BIND\_SERVICE}.  L'indirizzo remoto è
+Il campo \var{sat\_family} deve essere sempre \constd{AF\_APPLETALK}, mentre
+il campo \var{sat\_port} specifica la porta che identifica i vari
+servizi. Valori inferiori a 129 sono usati per le \textsl{porte riservate}, e
+possono essere usati solo da processi con i privilegi di amministratore o con
+la \textit{capability} \const{CAP\_NET\_BIND\_SERVICE}.  L'indirizzo remoto è
 specificato nella struttura \var{sat\_addr}, e deve essere in \textit{network
-  order} (vedi sez.~\ref{sec:endianness}); esso è composto da un parte di
-rete data dal campo \var{s\_net}, che può assumere il valore
-\const{AT\_ANYNET}, che indica una rete generica e vale anche per indicare la
-rete su cui si è, il singolo nodo è indicato da \var{s\_node}, e può prendere
-il valore generico \const{AT\_ANYNODE} che indica anche il nodo corrente, ed
-il valore \const{ATADDR\_BCAST} che indica tutti i nodi della rete.
+  order} (vedi sez.~\ref{sec:endianness}); esso è composto da un parte di rete
+data dal campo \var{s\_net}, che può assumere il valore \constd{AT\_ANYNET},
+che indica una rete generica e vale anche per indicare la rete su cui si è, il
+singolo nodo è indicato da \var{s\_node}, e può prendere il valore generico
+\constd{AT\_ANYNODE} che indica anche il nodo corrente, ed il valore
+\constd{ATADDR\_BCAST} che indica tutti i nodi della rete.
 
 
 \subsection{La struttura degli indirizzi dei \textit{packet socket}}
@@ -684,7 +683,7 @@ Nella creazione di un \textit{packet socket} il valore dell'argomento
 utilizzare. I valori possibili sono definiti secondo lo standard IEEE 802.3, e
 quelli disponibili in Linux sono accessibili attraverso opportune costanti
 simboliche definite nel file \file{linux/if\_ether.h}. Se si usa il valore
-speciale \const{ETH\_P\_ALL} passeranno sul \textit{packet socket} tutti i
+speciale \constd{ETH\_P\_ALL} passeranno sul \textit{packet socket} tutti i
 pacchetti, qualunque sia il loro protocollo di collegamento. Ovviamente l'uso
 di questi socket è una operazione privilegiata e può essere effettuati solo da
 un processo con i privilegi di amministratore (\ids{UID} effettivo nullo) o
@@ -718,7 +717,7 @@ entrambi i tipi di socket), per la ricezione dei i dati relativi a ciascun
 pacchetto.
 
 Al solito il campo \var{sll\_family} deve essere sempre impostato al valore
-\const{AF\_PACKET}. Il campo \var{sll\_protocol} indica il protocollo scelto,
+\constd{AF\_PACKET}. Il campo \var{sll\_protocol} indica il protocollo scelto,
 e deve essere indicato in \textit{network order}, facendo uso delle costanti
 simboliche definite in \file{linux/if\_ether.h}. Il campo \var{sll\_ifindex} è
 l'indice dell'interfaccia, che, in caso di presenza di più interfacce dello
@@ -740,13 +739,13 @@ Il campo \var{sll\_hatype} indica il tipo ARP, come definito in
 \file{linux/if\_arp.h}, mentre il campo \var{sll\_pkttype} indica il tipo di
 pacchetto; entrambi vengono impostati alla ricezione di un pacchetto ed han
 senso solo in questo caso. In particolare \var{sll\_pkttype} può assumere i
-seguenti valori: \const{PACKET\_HOST} per un pacchetto indirizzato alla
-macchina ricevente, \const{PACKET\_BROADCAST} per un pacchetto di
-\textit{broadcast}, \const{PACKET\_MULTICAST} per un pacchetto inviato ad un
-indirizzo fisico di \textit{multicast}, \const{PACKET\_OTHERHOST} per un
-pacchetto inviato ad un'altra stazione (e ricevuto su un'interfaccia in
-\index{modo~promiscuo} modo promiscuo), \const{PACKET\_OUTGOING} per un
-pacchetto originato dalla propria macchina che torna indietro sul socket.
+seguenti valori: \constd{PACKET\_HOST} per un pacchetto indirizzato alla
+macchina ricevente, \constd{PACKET\_BROADCAST} per un pacchetto di
+\textit{broadcast}, \constd{PACKET\_MULTICAST} per un pacchetto inviato ad un
+indirizzo fisico di \textit{multicast}, \constd{PACKET\_OTHERHOST} per un
+pacchetto inviato ad un'altra stazione (e ricevuto su un'interfaccia in modo
+promiscuo), \constd{PACKET\_OUTGOING} per un pacchetto originato dalla propria
+macchina che torna indietro sul socket.
 
 
 Si tenga presente infine che in fase di ricezione, anche se si richiede il
@@ -936,8 +935,8 @@ indirizzo in una stringa; il suo prototipo è:
 La funzione converte la struttura dell'indirizzo puntata da \param{addr\_ptr}
 in una stringa che viene copiata nel buffer puntato dall'indirizzo
 \param{dest}; questo deve essere preallocato dall'utente e la lunghezza deve
-essere almeno \const{INET\_ADDRSTRLEN} in caso di indirizzi IPv4 e
-\const{INET6\_ADDRSTRLEN} per indirizzi IPv6; la lunghezza del buffer deve
+essere almeno \constd{INET\_ADDRSTRLEN} in caso di indirizzi IPv4 e
+\constd{INET6\_ADDRSTRLEN} per indirizzi IPv6; la lunghezza del buffer deve
 comunque venire specificata attraverso il parametro \param{len}.
 
 Gli indirizzi vengono convertiti da/alle rispettive strutture di indirizzo
@@ -955,7 +954,6 @@ sez.~\ref{sec:IP_ipv6_notation} per IPv6.
 
 
 
-
 % LocalWords:  socket sez cap BSD SVr XTI Transport Interface TCP stream UDP PF
 % LocalWords:  datagram broadcast descriptor sys int domain type protocol errno
 % LocalWords:  EPROTONOSUPPORT ENFILE kernel EMFILE EACCES EINVAL ENOBUFS raw
index ef24ac5..198832d 100644 (file)
@@ -192,30 +192,30 @@ file, riportate in tab.~\ref{tab:sys_file_macro}.
     \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\
     \hline
     \hline
-    \constd{\_POSIX\_ARG\_MAX}   & 4096& Dimensione massima degli argomenti
+    \macrod{\_POSIX\_ARG\_MAX}   & 4096& Dimensione massima degli argomenti
                                          passati ad una funzione della famiglia
                                          \func{exec}.\\ 
-    \constd{\_POSIX\_CHILD\_MAX} &    6& Numero massimo di processi
+    \macrod{\_POSIX\_CHILD\_MAX} &    6& Numero massimo di processi
                                          contemporanei che un utente può 
                                          eseguire.\\
-    \constd{\_POSIX\_OPEN\_MAX}  &   16& Numero massimo di file che un processo
+    \macrod{\_POSIX\_OPEN\_MAX}  &   16& Numero massimo di file che un processo
                                          può mantenere aperti in 
                                          contemporanea.\\
-    \constd{\_POSIX\_STREAM\_MAX}&    8& Massimo numero di stream aperti per
+    \macrod{\_POSIX\_STREAM\_MAX}&    8& Massimo numero di stream aperti per
                                          processo in contemporanea.\\
-    \constd{\_POSIX\_TZNAME\_MAX}&    6& Dimensione massima del nome di una
+    \macrod{\_POSIX\_TZNAME\_MAX}&    6& Dimensione massima del nome di una
                                          \textit{timezone}
                                          (vedi sez.~\ref{sec:sys_date}). \\ 
-    \constd{\_POSIX\_RTSIG\_MAX} &    8& Numero massimo di segnali
+    \macrod{\_POSIX\_RTSIG\_MAX} &    8& Numero massimo di segnali
                                          \textit{real-time} (vedi
                                          sez.~\ref{sec:sig_real_time}).\\
-    \constd{\_POSIX\_NGROUPS\_MAX}&   0& Numero di gruppi supplementari per
+    \macrod{\_POSIX\_NGROUPS\_MAX}&   0& Numero di gruppi supplementari per
                                          processo (vedi 
                                          sez.~\ref{sec:proc_access_id}).\\
-    \constd{\_POSIX\_SSIZE\_MAX} &32767& Valore massimo del tipo 
+    \macrod{\_POSIX\_SSIZE\_MAX} &32767& Valore massimo del tipo 
                                          \type{ssize\_t}.\\
-    % \const{\_POSIX\_AIO\_LISTIO\_MAX}&2& \\
-    % \const{\_POSIX\_AIO\_MAX}    &    1& \\
+    % \macrod{\_POSIX\_AIO\_LISTIO\_MAX}&2& \\
+    % \macrod{\_POSIX\_AIO\_MAX}    &    1& \\
     \hline                
   \end{tabular}
   \caption{Macro dei valori minimi di alcune caratteristiche generali del
index 9f80a46..71463a1 100644 (file)
@@ -40,8 +40,9 @@ significato di alcuni dei vari \textsl{stati} ad essa associati.
 \label{sec:TCP_conn_cre}
 
 \itindbeg{three~way~handshake} 
-Il processo che porta a creare una connessione TCP è chiamato \textit{three
-  way handshake}; la successione tipica degli eventi (e dei
+
+Il processo che porta a creare una connessione TCP viene chiamato
+\textit{three way handshake}; la successione tipica degli eventi (e dei
 \textsl{segmenti}\footnote{si ricordi che il segmento è l'unità elementare di
   dati trasmessa dal protocollo TCP al livello successivo; tutti i segmenti
   hanno un header che contiene le informazioni che servono allo \textit{stack
@@ -135,11 +136,10 @@ comunicare all'altro capo una serie di parametri utili a regolare la
 connessione.  Normalmente vengono usate le seguenti opzioni:
 
 \begin{itemize}
-\item \textit{MSS option}, dove MMS sta per
-  \itindex{Maximum~Segment~Size~(MSS)} \textit{Maximum Segment Size}, con
-  questa opzione ciascun capo della connessione annuncia all'altro il massimo
-  ammontare di dati che vorrebbe accettare per ciascun segmento nella
-  connessione corrente. È possibile leggere e scrivere questo valore
+\item \textit{MSS option}, con questa opzione ciascun capo della connessione
+  annuncia all'altro il massimo ammontare di dati (MMS sta appunto per
+  \textit{Maximum Segment Size}) che vorrebbe accettare per ciascun segmento
+  nella connessione corrente. È possibile leggere e scrivere questo valore
   attraverso l'opzione del socket \const{TCP\_MAXSEG} (vedi
   sez.~\ref{sec:sock_tcp_udp_options}).
   
@@ -163,8 +163,7 @@ connessione.  Normalmente vengono usate le seguenti opzioni:
   (espresso come numero di bit cui spostare a sinistra il valore della
   finestra annunciata inserito nel pacchetto). Con Linux è possibile indicare
   al kernel di far negoziare il fattore di scala in fase di creazione di una
-  connessione tramite la \textit{sysctl} \itindex{TCP~window~scaling}
-  \texttt{tcp\_window\_scaling} (vedi
+  connessione tramite la \textit{sysctl} \texttt{tcp\_window\_scaling} (vedi
   sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa
     funzionalità è comunque necessario ampliare le dimensioni dei buffer di
     ricezione e spedizione, cosa che può essere fatta sia a livello di sistema
@@ -179,8 +178,8 @@ connessione.  Normalmente vengono usate le seguenti opzioni:
 
 \end{itemize}
 
-La MSS \itindex{Maximum~Segment~Size~(MSS)} è generalmente supportata da quasi
-tutte le implementazioni del protocollo, le ultime due opzioni (trattate
+La MSS è generalmente supportata da quasi tutte le implementazioni del
+protocollo, le ultime due opzioni (trattate
 nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}) sono meno comuni;
 vengono anche dette \textit{long fat pipe options} dato che questo è il nome
 che viene dato alle connessioni caratterizzate da alta velocità o da ritardi
@@ -239,9 +238,9 @@ deve ancora eseguire la chiusura passiva a quello che sta eseguendo la
 chiusura attiva.  Nella sequenza indicata i dati verrebbero persi, dato che si
 è chiuso il socket dal lato che esegue la chiusura attiva; esistono tuttavia
 situazioni in cui si vuole poter sfruttare questa possibilità, usando una
-procedura che è chiamata \itindex{half-close} \textit{half-close}; torneremo
-su questo aspetto e su come utilizzarlo in sez.~\ref{sec:TCP_shutdown}, quando
-parleremo della funzione \func{shutdown}.
+procedura che è chiamata \textit{half-close}; torneremo su questo aspetto e su
+come utilizzarlo in sez.~\ref{sec:TCP_shutdown}, quando parleremo della
+funzione \func{shutdown}.
 
 La emissione del FIN avviene quando il socket viene chiuso, questo però non
 avviene solo per la chiamata esplicita della funzione \func{close}, ma anche
@@ -303,10 +302,9 @@ che il protocollo viene ad assumere per i due lati, server e client.
   \label{fig:TCP_conn_example}
 \end{figure}
 
-La connessione viene iniziata dal client che annuncia una
-\itindex{Maximum~Segment~Size~(MSS)} MSS di 1460, un valore tipico con Linux
-per IPv4 su Ethernet, il server risponde con lo stesso valore (ma potrebbe
-essere anche un valore diverso).
+La connessione viene iniziata dal client che annuncia una MSS di 1460, un
+valore tipico con Linux per IPv4 su Ethernet, il server risponde con lo stesso
+valore (ma potrebbe essere anche un valore diverso).
 
 Una volta che la connessione è stabilita il client scrive al server una
 richiesta (che assumiamo stare in un singolo segmento, cioè essere minore dei
@@ -519,11 +517,11 @@ che solo l'amministratore possa allocare queste porte per far partire i
 relativi servizi.
 
 Le \textsl{glibc} definiscono in \headfile{netinet/in.h}
-\const{IPPORT\_RESERVED} e \const{IPPORT\_USERRESERVED}, in cui la prima (che
-vale 1024) indica il limite superiore delle porte riservate, e la seconda (che
-vale 5000) il limite inferiore delle porte a disposizione degli utenti.  La
-convenzione vorrebbe che le porte \textsl{effimere} siano allocate fra questi
-due valori. Nel caso di Linux questo è vero solo in uno dei due casi di
+\constd{IPPORT\_RESERVED} e \constd{IPPORT\_USERRESERVED}, in cui la prima
+(che vale 1024) indica il limite superiore delle porte riservate, e la seconda
+(che vale 5000) il limite inferiore delle porte a disposizione degli utenti.
+La convenzione vorrebbe che le porte \textsl{effimere} siano allocate fra
+questi due valori. Nel caso di Linux questo è vero solo in uno dei due casi di
 fig.~\ref{fig:TCP_port_alloc}, e la scelta fra i due possibili intervalli
 viene fatta dinamicamente dal kernel a seconda della memoria disponibile per
 la gestione delle relative tabelle.
@@ -742,11 +740,11 @@ sempre la funzione \func{htonl}.
     \textbf{Costante} & \textbf{Significato} \\
     \hline
     \hline
-    \const{INADDR\_ANY}      & Indirizzo generico (\texttt{0.0.0.0})\\
-    \const{INADDR\_BROADCAST}& Indirizzo di \textit{broadcast}.\\ 
-    \const{INADDR\_LOOPBACK} & Indirizzo di \textit{loopback}
-                               (\texttt{127.0.0.1}).\\ 
-    \const{INADDR\_NONE}     & Indirizzo errato.\\
+    \constd{INADDR\_ANY}      & Indirizzo generico (\texttt{0.0.0.0})\\
+    \constd{INADDR\_BROADCAST}& Indirizzo di \textit{broadcast}.\\ 
+    \constd{INADDR\_LOOPBACK} & Indirizzo di \textit{loopback}
+                                (\texttt{127.0.0.1}).\\ 
+    \constd{INADDR\_NONE}     & Indirizzo errato.\\
     \hline    
   \end{tabular}
   \caption{Costanti di definizione di alcuni indirizzi generici per IPv4.}
@@ -760,12 +758,12 @@ con una struttura, perché il linguaggio C non consente l'uso di una struttura
 costante come operando a destra in una assegnazione.
 
 Per questo motivo nell'header \headfile{netinet/in.h} è definita una variabile
-\macro{in6addr\_any} (dichiarata come \dirct{extern}, ed inizializzata dal
-sistema al valore \const{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
+\var{in6addr\_any} (dichiarata come \dirct{extern}, ed inizializzata dal
+sistema al valore \constd{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
 assegnazione del tipo: \includecodesnip{listati/serv_addr_sin6_addr.c} in
-maniera analoga si può utilizzare la variabile \macro{in6addr\_loopback} per
+maniera analoga si può utilizzare la variabile \var{in6addr\_loopback} per
 indicare l'indirizzo di \textit{loopback}, che a sua volta viene inizializzata
-staticamente a \const{IN6ADRR\_LOOPBACK\_INIT}.
+staticamente a \constd{IN6ADRR\_LOOPBACK\_INIT}.
 
 
 \subsection{La funzione \func{connect}}
@@ -778,8 +776,8 @@ connessione con un server TCP,\footnote{di nuovo la funzione è generica e
   limiterà ad impostare l'indirizzo dal quale e verso il quale saranno inviati
   e ricevuti i pacchetti, mentre per socket di tipo \const{SOCK\_STREAM} o
   \const{SOCK\_SEQPACKET}, essa attiverà la procedura di avvio (nel caso del
-  TCP il \itindex{three~way~handshake} \textit{three way handshake}) della
-  connessione.}  il prototipo della funzione è il seguente:
+  TCP il \textit{three way handshake}) della connessione.}  il prototipo della
+funzione è il seguente:
 \begin{prototype}{sys/socket.h}
   {int connect(int sockfd, const struct sockaddr *servaddr, socklen\_t
     addrlen)}
@@ -821,12 +819,12 @@ numero di porta del server a cui ci si vuole connettere, come mostrato
 nell'esempio sez.~\ref{sec:TCP_daytime_client}, usando le funzioni illustrate
 in sez.~\ref{sec:sock_addr_func}.
 
-Nel caso di socket TCP la funzione \func{connect} avvia il
-\itindex{three~way~handshake} \textit{three way handshake}, e ritorna solo
-quando la connessione è stabilita o si è verificato un errore. Le possibili
-cause di errore sono molteplici (ed i relativi codici riportati sopra), quelle
-che però dipendono dalla situazione della rete e non da errori o problemi
-nella chiamata della funzione sono le seguenti:
+Nel caso di socket TCP la funzione \func{connect} avvia il \textit{three way
+  handshake}, e ritorna solo quando la connessione è stabilita o si è
+verificato un errore. Le possibili cause di errore sono molteplici (ed i
+relativi codici riportati sopra), quelle che però dipendono dalla situazione
+della rete e non da errori o problemi nella chiamata della funzione sono le
+seguenti:
 \begin{enumerate}
 \item Il client non riceve risposta al SYN: l'errore restituito è
   \errcode{ETIMEDOUT}. Stevens riporta che BSD invia un primo SYN alla
@@ -921,27 +919,24 @@ infatti vengono mantenute due code:
 \begin{enumerate}
 \item La coda delle connessioni incomplete (\textit{incomplete connection
     queue}) che contiene un riferimento per ciascun socket per il quale è
-  arrivato un SYN ma il \itindex{three~way~handshake} \textit{three way
-    handshake} non si è ancora concluso.  Questi socket sono tutti nello stato
-  \texttt{SYN\_RECV}.
+  arrivato un SYN ma il \textit{three way handshake} non si è ancora concluso.
+  Questi socket sono tutti nello stato \texttt{SYN\_RECV}.
 \item La coda delle connessioni complete (\textit{complete connection queue})
-  che contiene un ingresso per ciascun socket per il quale il
-  \itindex{three~way~handshake} \textit{three way handshake} è stato
-  completato ma ancora \func{accept} non è ritornata.  Questi socket sono
-  tutti nello stato \texttt{ESTABLISHED}.
+  che contiene un ingresso per ciascun socket per il quale il \textit{three
+    way handshake} è stato completato ma ancora \func{accept} non è ritornata.
+  Questi socket sono tutti nello stato \texttt{ESTABLISHED}.
 \end{enumerate}
 
 Lo schema di funzionamento è descritto in fig.~\ref{fig:TCP_listen_backlog}:
 quando arriva un SYN da un client il server crea una nuova voce nella coda
 delle connessioni incomplete, e poi risponde con il SYN$+$ACK. La voce resterà
 nella coda delle connessioni incomplete fino al ricevimento dell'ACK dal
-client o fino ad un timeout. Nel caso di completamento del
-\itindex{three~way~handshake} \textit{three way handshake} la voce viene
-spostata nella coda delle connessioni complete.  Quando il processo chiama la
-funzione \func{accept} (vedi sez.~\ref{sec:TCP_func_accept}) la prima voce
-nella coda delle connessioni complete è passata al programma, o, se la coda è
-vuota, il processo viene posto in attesa e risvegliato all'arrivo della prima
-connessione completa.
+client o fino ad un timeout. Nel caso di completamento del \textit{three way
+  handshake} la voce viene spostata nella coda delle connessioni complete.
+Quando il processo chiama la funzione \func{accept} (vedi
+sez.~\ref{sec:TCP_func_accept}) la prima voce nella coda delle connessioni
+complete è passata al programma, o, se la coda è vuota, il processo viene
+posto in attesa e risvegliato all'arrivo della prima connessione completa.
 
 \begin{figure}[!htb]
   \centering \includegraphics[width=11cm]{img/tcp_listen_backlog}  
@@ -968,15 +963,16 @@ saturata, impedendo di fatto ulteriori connessioni.
 Per ovviare a questo il significato del \param{backlog} è stato cambiato a
 indicare la lunghezza della coda delle connessioni complete. La lunghezza
 della coda delle connessioni incomplete può essere ancora controllata usando
-la funzione \func{sysctl} con il parametro \const{NET\_TCP\_MAX\_SYN\_BACKLOG}
-o scrivendola direttamente in \sysctlfile{net/ipv4/tcp\_max\_syn\_backlog}.
-Quando si attiva la protezione dei syncookies però (con l'opzione da compilare
-nel kernel e da attivare usando \sysctlfile{net/ipv4/tcp\_syncookies}) questo
-valore viene ignorato e non esiste più un valore massimo.  In ogni caso in
-Linux il valore di \param{backlog} viene troncato ad un massimo di
-\const{SOMAXCONN} se è superiore a detta costante (che di default vale
-128).\footnote{il valore di questa costante può essere controllato con un
-  altro parametro di \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.}
+la funzione \func{sysctl} con il parametro
+\constd{NET\_TCP\_MAX\_SYN\_BACKLOG} o scrivendola direttamente in
+\sysctlfile{net/ipv4/tcp\_max\_syn\_backlog}.  Quando si attiva la protezione
+dei syncookies però (con l'opzione da compilare nel kernel e da attivare
+usando \sysctlfile{net/ipv4/tcp\_syncookies}) questo valore viene ignorato e
+non esiste più un valore massimo.  In ogni caso in Linux il valore
+di \param{backlog} viene troncato ad un massimo di \const{SOMAXCONN} se è
+superiore a detta costante (che di default vale 128).\footnote{il valore di
+  questa costante può essere controllato con un altro parametro di
+  \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.}
 
 La scelta storica per il valore di questo parametro era di 5, e alcuni vecchi
 kernel non supportavano neanche valori superiori, ma la situazione corrente è
@@ -993,7 +989,7 @@ che il compito principale della coda sia quello di gestire il caso in cui il
 server è occupato fra chiamate successive alla \func{accept} (per cui la coda
 più occupata sarebbe quella delle connessioni completate), ma piuttosto quello
 di gestire la presenza di un gran numero di SYN in attesa di concludere il
-\itindex{three~way~handshake} \textit{three way handshake}.
+\textit{three way handshake}.
 
 Infine va messo in evidenza che, nel caso di socket TCP, quando un SYN arriva
 con tutte le code piene, il pacchetto deve essere ignorato. Questo perché la
@@ -1011,10 +1007,10 @@ trasparente dal protocollo TCP.
 \label{sec:TCP_func_accept}
 
 La funzione \funcd{accept} è chiamata da un server per gestire la connessione
-una volta che sia stato completato il \itindex{three~way~handshake}
-\textit{three way handshake},\footnote{la funzione è comunque generica ed è
-  utilizzabile su socket di tipo \const{SOCK\_STREAM}, \const{SOCK\_SEQPACKET}
-  \const{SOCK\_RDM}.} la funzione restituisce un nuovo socket descriptor su
+una volta che sia stato completato il \textit{three way
+  handshake},\footnote{la funzione è comunque generica ed è utilizzabile su
+  socket di tipo \const{SOCK\_STREAM}, \const{SOCK\_SEQPACKET} e
+  \const{SOCK\_RDM}.} la funzione restituisce un nuovo socket descriptor su
 cui si potrà operare per effettuare la comunicazione. Se non ci sono
 connessioni completate il processo viene messo in attesa. Il prototipo della
 funzione è il seguente:
@@ -1928,13 +1924,12 @@ connessioni da qualunque indirizzo e da qualunque porta e su qualunque
 interfaccia locale.
 
 A questo punto si può lanciare il client, esso chiamerà \func{socket} e
-\func{connect}; una volta completato il \itindex{three~way~handshake}
-\textit{three way handshake} la connessione è stabilita; la \func{connect}
-ritornerà nel client\footnote{si noti che è sempre la \func{connect} del
-  client a ritornare per prima, in quanto questo avviene alla ricezione del
-  secondo segmento (l'ACK del server) del \itindex{three~way~handshake}
-  \textit{three way handshake}, la \func{accept} del server ritorna solo dopo
-  un altro mezzo RTT quando il terzo segmento (l'ACK del client) viene
+\func{connect}; una volta completato il \textit{three way handshake} la
+connessione è stabilita; la \func{connect} ritornerà nel client\footnote{si
+  noti che è sempre la \func{connect} del client a ritornare per prima, in
+  quanto questo avviene alla ricezione del secondo segmento (l'ACK del server)
+  del \textit{three way handshake}, la \func{accept} del server ritorna solo
+  dopo un altro mezzo RTT quando il terzo segmento (l'ACK del client) viene
   ricevuto.}  e la \func{accept} nel server, ed usando di nuovo \cmd{netstat}
 otterremmo che:
 \begin{verbatim}
@@ -2183,10 +2178,10 @@ perché nel server l'unica chiamata ad una \textit{system call} lenta, che può
 essere interrotta dall'arrivo di \signal{SIGCHLD}, è quella ad \func{accept},
 che è l'unica funzione che può mettere il processo padre in stato di sleep nel
 periodo in cui un figlio può terminare; si noti infatti come le altre
-\index{system~call~lente} \textit{system call} lente (si ricordi la
-distinzione fatta in sez.~\ref{sec:sig_gen_beha}) o sono chiamate prima di
-entrare nel ciclo principale, quando ancora non esistono processi figli, o
-sono chiamate dai figli stessi e non risentono di \signal{SIGCHLD}.
+\textit{system call} lente (si ricordi la distinzione fatta in
+sez.~\ref{sec:sig_gen_beha}) o sono chiamate prima di entrare nel ciclo
+principale, quando ancora non esistono processi figli, o sono chiamate dai
+figli stessi e non risentono di \signal{SIGCHLD}.
 
 Per questo l'unica modifica sostanziale nel ciclo principale (\texttt{\small
   23--42}), rispetto precedente versione di fig.~\ref{fig:TCP_ServEcho_first},
@@ -2279,13 +2274,12 @@ Benché questo non sia un fatto comune, un evento simile può essere osservato
 con dei server molto occupati. In tal caso, con una struttura del server
 simile a quella del nostro esempio, in cui la gestione delle singole
 connessioni è demandata a processi figli, può accadere che il \textit{three
-  way handshake} \itindex{three~way~handshake} venga completato e la relativa
-connessione abortita subito dopo, prima che il padre, per via del carico della
-macchina, abbia fatto in tempo ad eseguire la chiamata ad \func{accept}. Di
-nuovo si ha una situazione analoga a quella illustrata in
-fig.~\ref{fig:TCP_early_abort}, in cui la connessione viene stabilita, ma
-subito dopo si ha una condizione di errore che la chiude prima che essa sia
-stata accettata dal programma.
+  way handshake} venga completato e la relativa connessione abortita subito
+dopo, prima che il padre, per via del carico della macchina, abbia fatto in
+tempo ad eseguire la chiamata ad \func{accept}. Di nuovo si ha una situazione
+analoga a quella illustrata in fig.~\ref{fig:TCP_early_abort}, in cui la
+connessione viene stabilita, ma subito dopo si ha una condizione di errore che
+la chiude prima che essa sia stata accettata dal programma.
 
 Questo significa che, oltre alla interruzione da parte di un segnale, che
 abbiamo trattato in sez.~\ref{sec:TCP_child_hand} nel caso particolare di
@@ -2389,33 +2383,32 @@ anarres.echo > gont.34559: R 511689732:511689732(0) win 0
 \end{verbatim}
 
 Le prime tre righe vengono prodotte al momento in cui lanciamo il nostro
-client, e corrispondono ai tre pacchetti del \itindex{three~way~handshake}
-\textit{three way handshake}.  L'output del comando riporta anche i numeri di
-sequenza iniziali, mentre la lettera \texttt{S} indica che per quel pacchetto
-si aveva il SYN flag attivo.  Si noti come a partire dal secondo pacchetto sia
-sempre attivo il campo \texttt{ack}, seguito dal numero di sequenza per il
-quale si da il ricevuto; quest'ultimo, a partire dal terzo pacchetto, viene
-espresso in forma relativa per maggiore compattezza.  Il campo \texttt{win} in
-ogni riga indica la \textit{advertised window} di cui parlavamo in
-sez.~\ref{sec:TCP_TCP_opt}.  Allora si può verificare dall'output del comando
-come venga appunto realizzata la sequenza di pacchetti descritta in
-sez.~\ref{sec:TCP_conn_cre}: prima viene inviato dal client un primo pacchetto
-con il SYN che inizia la connessione, a cui il server risponde dando il
-ricevuto con un secondo pacchetto, che a sua volta porta un SYN, cui il client
-risponde con un il terzo pacchetto di ricevuto.
+client, e corrispondono ai tre pacchetti del \textit{three way handshake}.
+L'output del comando riporta anche i numeri di sequenza iniziali, mentre la
+lettera \texttt{S} indica che per quel pacchetto si aveva il SYN flag attivo.
+Si noti come a partire dal secondo pacchetto sia sempre attivo il campo
+\texttt{ack}, seguito dal numero di sequenza per il quale si da il ricevuto;
+quest'ultimo, a partire dal terzo pacchetto, viene espresso in forma relativa
+per maggiore compattezza.  Il campo \texttt{win} in ogni riga indica la
+\textit{advertised window} di cui parlavamo in sez.~\ref{sec:TCP_TCP_opt}.
+Allora si può verificare dall'output del comando come venga appunto realizzata
+la sequenza di pacchetti descritta in sez.~\ref{sec:TCP_conn_cre}: prima viene
+inviato dal client un primo pacchetto con il SYN che inizia la connessione, a
+cui il server risponde dando il ricevuto con un secondo pacchetto, che a sua
+volta porta un SYN, cui il client risponde con un il terzo pacchetto di
+ricevuto.
 
 Ritorniamo allora alla nostra sessione con il servizio echo: dopo le tre righe
-del \itindex{three~way~handshake} \textit{three way handshake} non avremo
-nulla fin tanto che non scriveremo una prima riga sul client; al momento in
-cui facciamo questo si genera una sequenza di altri quattro pacchetti. Il
-primo, dal client al server, contraddistinto da una lettera \texttt{P} che
-significa che il flag PSH è impostato, contiene la nostra riga (che è appunto
-di 11 caratteri), e ad esso il server risponde immediatamente con un pacchetto
-vuoto di ricevuto. Poi tocca al server riscrivere indietro quanto gli è stato
-inviato, per cui sarà lui a mandare indietro un terzo pacchetto con lo stesso
-contenuto appena ricevuto, e a sua volta riceverà dal client un ACK nel quarto
-pacchetto.  Questo causerà la ricezione dell'eco nel client che lo stamperà a
-video.
+del \textit{three way handshake} non avremo nulla fin tanto che non scriveremo
+una prima riga sul client; al momento in cui facciamo questo si genera una
+sequenza di altri quattro pacchetti. Il primo, dal client al server,
+contraddistinto da una lettera \texttt{P} che significa che il flag PSH è
+impostato, contiene la nostra riga (che è appunto di 11 caratteri), e ad esso
+il server risponde immediatamente con un pacchetto vuoto di ricevuto. Poi
+tocca al server riscrivere indietro quanto gli è stato inviato, per cui sarà
+lui a mandare indietro un terzo pacchetto con lo stesso contenuto appena
+ricevuto, e a sua volta riceverà dal client un ACK nel quarto pacchetto.
+Questo causerà la ricezione dell'eco nel client che lo stamperà a video.
 
 A questo punto noi procediamo ad interrompere l'esecuzione del server con un
 \texttt{C-c} (cioè con l'invio di \signal{SIGTERM}): nel momento in cui
@@ -2835,9 +2828,8 @@ pronto per la scrittura sono le seguenti:
 Infine c'è una sola condizione che fa si che \func{select} ritorni segnalando
 che un socket (che sarà riportato nel terzo insieme di file descriptor) ha una
 condizione di eccezione pendente, e cioè la ricezione sul socket di
-\textsl{dati urgenti} (o \itindex{out-of-band} \textit{out-of-band}), una
-caratteristica specifica dei socket TCP su cui torneremo in
-sez.~\ref{sec:TCP_urgent_data}.
+\textsl{dati urgenti} (o \textit{out-of-band}), una caratteristica specifica
+dei socket TCP su cui torneremo in sez.~\ref{sec:TCP_urgent_data}.
 
 Si noti come nel caso della lettura \func{select} si applichi anche ad
 operazioni che non hanno nulla a che fare con l'I/O di dati come il
@@ -3037,13 +3029,15 @@ capi chiuda la connessione, quando l'altro capo la lascia
 aperta.\footnote{abbiamo incontrato questa situazione nei vari scenari critici
   di sez.~\ref{sec:TCP_echo_critical}.}
 
+\itindbeg{half-close}
+
 È pertanto possibile avere una situazione in cui un capo della connessione non
 avendo più nulla da scrivere, possa chiudere il socket, segnalando così
 l'avvenuta terminazione della trasmissione (l'altro capo riceverà infatti un
-end-of-file in lettura) mentre dall'altra parte si potrà proseguire la
-trasmissione dei dati scrivendo sul socket che da quel lato è ancora aperto.
-Questa è quella situazione in cui si dice che il socket è \textit{half
-  closed}.
+\textit{end-of-file} in lettura) mentre dall'altra parte si potrà proseguire
+la trasmissione dei dati scrivendo sul socket che da quel lato è ancora
+aperto.  Questa è quella situazione in cui si dice che il socket è
+``\textit{half closed}''.
 
 Il problema che si pone è che se la chiusura del socket è effettuata con la
 funzione \func{close}, come spiegato in sez.~\ref{sec:TCP_func_close}, si perde
@@ -3071,24 +3065,26 @@ vuole operare e come secondo argomento un valore intero \param{how} che indica
 la modalità di chiusura del socket, quest'ultima può prendere soltanto tre
 valori: 
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SHUT\_RD}] chiude il lato in lettura del socket, non sarà più
+\item[\constd{SHUT\_RD}] chiude il lato in lettura del socket, non sarà più
   possibile leggere dati da esso, tutti gli eventuali dati trasmessi
   dall'altro capo del socket saranno automaticamente scartati dal kernel, che,
   in caso di socket TCP, provvederà comunque ad inviare i relativi segmenti di
   ACK.
-\item[\const{SHUT\_WR}] chiude il lato in scrittura del socket, non sarà più
+\item[\constd{SHUT\_WR}] chiude il lato in scrittura del socket, non sarà più
   possibile scrivere dati su di esso. Nel caso di socket TCP la chiamata causa
   l'emissione di un segmento FIN, secondo la procedura chiamata
-  \itindex{half-close} \textit{half-close}. Tutti i dati presenti nel buffer
-  di scrittura prima della chiamata saranno inviati, seguiti dalla sequenza di
-  chiusura illustrata in sez.~\ref{sec:TCP_conn_term}.
-\item[\const{SHUT\_RDWR}] chiude sia il lato in lettura che quello in
+  \textit{half-close}. Tutti i dati presenti nel buffer di scrittura prima
+  della chiamata saranno inviati, seguiti dalla sequenza di chiusura
+  illustrata in sez.~\ref{sec:TCP_conn_term}.
+\item[\constd{SHUT\_RDWR}] chiude sia il lato in lettura che quello in
   scrittura del socket. È equivalente alla chiamata in sequenza con
   \const{SHUT\_RD} e \const{SHUT\_WR}.
 \end{basedescript}
 
+\itindend{half-close}
+
 Ci si può chiedere quale sia l'utilità di avere introdotto \const{SHUT\_RDWR}
-quando questa sembra rendere \funcd{shutdown} del tutto equivalente ad una
+quando questa sembra rendere \func{shutdown} del tutto equivalente ad una
 \func{close}. In realtà non è così, esiste infatti un'altra differenza con
 \func{close}, più sottile. Finora infatti non ci siamo presi la briga di
 sottolineare in maniera esplicita che, come per i file e le fifo, anche per i
@@ -3399,18 +3395,17 @@ successiva \func{select} ritornerà immediatamente segnalando l'ulteriore
 disponibilità.
 
 Il nostro server comunque soffre di una vulnerabilità per un attacco di tipo
-\itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}. Il problema è
-che in caso di blocco di una qualunque delle funzioni di I/O, non avendo usato
-processi separati, tutto il server si ferma e non risponde più a nessuna
-richiesta. Abbiamo scongiurato questa evenienza per l'I/O in ingresso con
-l'uso di \func{select}, ma non vale altrettanto per l'I/O in uscita. Il
-problema pertanto può sorgere qualora una delle chiamate a \func{write}
-effettuate da \func{FullWrite} si blocchi. Con il funzionamento normale questo
-non accade in quanto il server si limita a scrivere quanto riceve in ingresso,
-ma qualora venga utilizzato un client malevolo che esegua solo scritture e non
-legga mai indietro l'\textsl{eco} del server, si potrebbe giungere alla
-saturazione del buffer di scrittura, ed al conseguente blocco del server su di
-una \func{write}.
+\textit{Denial of Service}. Il problema è che in caso di blocco di una
+qualunque delle funzioni di I/O, non avendo usato processi separati, tutto il
+server si ferma e non risponde più a nessuna richiesta. Abbiamo scongiurato
+questa evenienza per l'I/O in ingresso con l'uso di \func{select}, ma non vale
+altrettanto per l'I/O in uscita. Il problema pertanto può sorgere qualora una
+delle chiamate a \func{write} effettuate da \func{FullWrite} si blocchi. Con
+il funzionamento normale questo non accade in quanto il server si limita a
+scrivere quanto riceve in ingresso, ma qualora venga utilizzato un client
+malevolo che esegua solo scritture e non legga mai indietro l'\textsl{eco} del
+server, si potrebbe giungere alla saturazione del buffer di scrittura, ed al
+conseguente blocco del server su di una \func{write}.
 
 Le possibili soluzioni in questo caso sono quelle di ritornare ad eseguire il
 ciclo di risposta alle richieste all'interno di processi separati, utilizzare
@@ -3442,7 +3437,7 @@ pertanto:
 \item i dati inviati su un socket vengono considerati traffico normale,
   pertanto vengono rilevati alla loro ricezione sull'altro capo da una
   selezione effettuata con \const{POLLIN} o \const{POLLRDNORM};
-\item i dati urgenti \itindex{out-of-band} \textit{out-of-band} (vedi
+\item i dati urgenti \textit{out-of-band} (vedi
   sez.~\ref{sec:TCP_urgent_data}) su un socket TCP vengono considerati
   traffico prioritario e vengono rilevati da una condizione \const{POLLIN},
   \const{POLLPRI} o \const{POLLRDBAND}.
index a3fe9a3..d48daeb 100644 (file)
@@ -65,6 +65,9 @@ comando \cmd{netstat} nel campo \textit{State}.
 % TODO trattare la advertised window
 \itindend{advertised~window}
 
+\index{algoritmo~di~Nagle|(}
+% TODO trattare l'algoritmo di Nagle
+\index{algoritmo~di~Nagle|)}
 
 
 \section{Il protocollo UDP}