+ socket} (vedi sez.~\ref{cha:advanced_socket_xxx}).
+
+
+\item[\const{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 \texttt{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
+ \texttt{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
+ sulla rete su un buffer circolare che viene letto da un apposito
+ programma, \cmd{trpt}.}
+
+\item[\const{SO\_REUSEADDR}] questa opzione permette di eseguire la funzione
+ \func{bind} su indirizzi locali che siano già in uso; l'opzione utilizza per
+ \param{optval} un intero usato come valore logico. Questa opzione modifica
+ il comportamento normale dell'interfaccia dei socket che fa fallire
+ l'esecuzione della funzione \func{bind} con un errore di
+ \errcode{EADDRINUSE} quando l'indirizzo locale\footnote{più propriamente il
+ controllo viene eseguito sulla porta.} è già in uso da parte di un altro
+ socket.
+
+ Come Stevens sottolinea in \cite{UNP1} si distinguono quattro casi per
+ l'utilizzo di questa opzione; il primo è quello in cui un server è terminato
+ ma esistono ancora dei processi figli che mantengono attiva almeno una
+ connessione remota che utilizza l'indirizzo locale; quando si riavvia il
+ server questo viene bloccato sulla chiamata a \func{bind} dato che la porta
+ è ancora utilizzata in una connessione esistente.
+
+ Il punto più critico è che con il protocollo TCP questo può avvenire anche
+ dopo che l'ultimo processo figlio è terminato, in quanto la connessione può
+ restare attiva anche dopo la chiusura del socket mantenendosi nello stato
+ \texttt{TIME\_WAIT}. Usando \const{SO\_REUSEADDR} fra la chiamata a
+ \func{socket} e quella a \func{bind} si consente a quest'ultima di avere
+ successo anche in questo caso. È bene però ricordare che (si riveda quanto
+ detto in sez.~\ref{sec:TCP_time_wait}) la presenza dello stato
+ \texttt{TIME\_WAIT} ha una ragione, e che se si usa questa opzione esiste
+ sempre una probabilità, anche se estremamente remota,\footnote{perché ciò
+ avvenga infatti non solo devono coincidere gli indirizzi IP e le porte
+ degli estremi della nuova connessione, ma anche i numeri di sequenza dei
+ pacchetti, e questo è estremamente improbabile.} che eventuali pacchetti
+ rimasti intrappolati in una precedente connessione possano finire fra quelli
+ di una nuova.
+
+