Risistemazione della sezione sulle opzioni dei socket IP. Corretta la
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 26 Mar 2006 13:56:09 +0000 (13:56 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 26 Mar 2006 13:56:09 +0000 (13:56 +0000)
tabella, documentata la prte sul Path MTP discovery, aggiunti vari indici.

ipc.tex
netlayer.tex
network.tex
othersock.tex
prochand.tex
sockadv.tex
sockctrl.tex
socket.tex
tcpsock.tex

diff --git a/ipc.tex b/ipc.tex
index 91df500a656fde5184ff36cb256ae8e40a2b6e32..3baa2b83eae6a31528f59df05163fead6ff22d18 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -774,7 +774,7 @@ socket\index{socket} locali in generale) permette di trasmettere attraverso le
 linea non solo dei dati, ma anche dei file descriptor: si può cioè passare da
 un processo ad un altro un file descriptor, con una sorta di duplicazione
 dello stesso non all'interno di uno stesso processo, ma fra processi distinti
-(torneremo su questa funzionalità in sez.~\ref{sec:xxx_fd_passing}).
+(torneremo su questa funzionalità in sez.~\ref{sec:sock_fd_passing}).
 
 
 \section{Il sistema di comunicazione fra processi di System V}
index 2b264d1debbab14e6095c992c89530cd388e94d8..597738b0a4d22948af385696615f7f4b2e8eb966 100644 (file)
@@ -150,8 +150,8 @@ di reti di dimensioni diverse.
 
 Le classi usate per il dispiegamento delle reti su quella che comunemente
 viene chiamata \textit{Internet} sono le prime tre; la classe D è destinata al
-(non molto usato) \textit{multicast} mentre la classe E è riservata per usi
-sperimentali e non viene impiegata.
+(non molto usato) \itindex{multicast} \textit{multicast} mentre la classe E è
+riservata per usi sperimentali e non viene impiegata.
 
 Come si può notare però la suddivisione riportata in
 tab.~\ref{tab:IP_ipv4class} è largamente inefficiente in quanto se ad un
@@ -319,7 +319,8 @@ grandi linee nei seguenti punti:
   supportare una gerarchia con più livelli di indirizzamento, un numero di
   nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi
 \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che
-  si aggiungono agli usuali \textit{unycast} e \textit{multicast}
+  si aggiungono agli usuali \textit{unicast} e \itindex{multicast}
+  \textit{multicast}
 \item la semplificazione del formato dell'intestazione, eliminando o rendendo
   opzionali alcuni dei campi di IPv4, per eliminare la necessità di
   riprocessamento della stessa da parte dei router e contenere l'aumento di
@@ -525,8 +526,9 @@ ulteriori caratteristiche che diversificano il comportamento di IPv4 da
 quello di IPv6 sono le seguenti:
 
 \begin{itemize}
-\item il broadcasting non è previsto in IPv6, le applicazioni che lo usano
-  dovono essere reimplementate usando il multicasting (vedi
+\item il \itindex{broadcast} \textit{broadcasting} non è previsto in IPv6, le
+  applicazioni che lo usano dovono essere reimplementate usando il
+  \itindex{multicast} \textit{multicasting} (vedi
   sez.~\ref{sec:IP_ipv6_multicast}), che da opzionale diventa obbligatorio.
 \item è stato introdotto un nuovo tipo di indirizzi, gli \textit{anycast}.
 \item i router non possono più frammentare i pacchetti lungo il cammino, la
@@ -615,7 +617,7 @@ pu
     unicast site-local & \texttt{1111 1110 11} & 1/1024 \\
     \hline
     \hline
-    multicast & \texttt{1111 1111} & 1/256 \\
+    \textit{multicast} & \texttt{1111 1111} & 1/256 \\
     \hline
   \end{tabular}
   \caption{Classificazione degli indirizzi IPv6 a seconda dei bit più 
@@ -628,8 +630,8 @@ pu
 \label{sec:IP_ipv6_addr_arch}
 
 Come per IPv4 gli indirizzi sono identificatori per una singola (indirizzi
-\textit{unicast}) o per un insieme (indirizzi \textit{multicast} e
-\textit{anycast}) di interfacce di rete.  
+\textit{unicast}) o per un insieme (indirizzi \itindex{multicast}
+\textit{multicast} e \textit{anycast}) di interfacce di rete.
 
 Gli indirizzi sono sempre assegnati all'interfaccia, non al nodo che la
 ospita; dato che ogni interfaccia appartiene ad un nodo quest'ultimo può
@@ -637,19 +639,21 @@ essere identificato attraverso uno qualunque degli indirizzi unicast delle sue
 interfacce. A una interfaccia possono essere associati anche più indirizzi.
 
 IPv6 presenta tre tipi diversi di indirizzi: due di questi, gli indirizzi
-\textit{unicast} e \textit{multicast} hanno le stesse caratteristiche che in
-IPv4, un terzo tipo, gli indirizzi \textit{anycast} è completamente nuovo.
-In IPv6 non esistono più gli indirizzi \textit{broadcast}, la funzione di
-questi ultimi deve essere reimplementata con gli indirizzi \textit{multicast}.
+\textit{unicast} e \itindex{multicast} \textit{multicast} hanno le stesse
+caratteristiche che in IPv4, un terzo tipo, gli indirizzi \textit{anycast} è
+completamente nuovo.  In IPv6 non esistono più gli indirizzi
+\itindex{broadcast} \textit{broadcast}, la funzione di questi ultimi deve
+essere reimplementata con gli indirizzi \itindex{multicast}
+\textit{multicast}.
 
 Gli indirizzi \textit{unicast} identificano una singola interfaccia: i
 pacchetti mandati ad un tale indirizzo verranno inviati a quella interfaccia,
 gli indirizzi \textit{anycast} identificano un gruppo di interfacce tale che
 un pacchetto mandato a uno di questi indirizzi viene inviato alla più vicina
 (nel senso di distanza di routing) delle interfacce del gruppo, gli indirizzi
-\textit{multicast} identificano un gruppo di interfacce tale che un pacchetto
-mandato a uno di questi indirizzi viene inviato a tutte le interfacce del
-gruppo.
+\itindex{multicast} \textit{multicast} identificano un gruppo di interfacce
+tale che un pacchetto mandato a uno di questi indirizzi viene inviato a tutte
+le interfacce del gruppo.
 
 In IPv6 non ci sono più le classi ma i bit più significativi indicano il tipo
 di indirizzo; in tab.~\ref{tab:IP_ipv6addr} sono riportati i valori di detti
@@ -657,9 +661,10 @@ bit e il tipo di indirizzo che loro corrispondente.  I bit pi
 costituiscono quello che viene chiamato il \textit{format prefix} ed è sulla
 base di questo che i vari tipi di indirizzi vengono identificati.  Come si
 vede questa architettura di allocazione supporta l'allocazione di indirizzi
-per i provider, per uso locale e per il multicast; inoltre è stato riservato
-lo spazio per indirizzi NSAP, IPX e per le connessioni; gran parte dello
-spazio (più del 70\%) è riservato per usi futuri.
+per i provider, per uso locale e per il \itindex{multicast}
+\textit{multicast}; inoltre è stato riservato lo spazio per indirizzi NSAP,
+IPX e per le connessioni; gran parte dello spazio (più del 70\%) è riservato
+per usi futuri.
 
 Si noti infine che gli indirizzi \textit{anycast} non sono riportati in
 tab.~\ref{tab:IP_ipv6addr} in quanto allocati al di fuori dello spazio di
@@ -949,12 +954,14 @@ l'accettazione di una connessione da qualunque host.
 \subsection{Multicasting}
 \label{sec:IP_ipv6_multicast}
 
+\itindbeg{multicast}
+
 Gli indirizzi \textit{multicast} sono usati per inviare un pacchetto a un
-gruppo di interfacce; l'indirizzo identifica uno specifico gruppo di multicast
-e il pacchetto viene inviato a tutte le interfacce di detto gruppo.
-Un'interfaccia può appartenere ad un numero qualunque numero di gruppi di
-multicast. Il formato degli indirizzi \textit{multicast} è riportato in
-tab.~\ref{tab:IP_ipv6_multicast}:
+gruppo di interfacce; l'indirizzo identifica uno specifico gruppo di
+\textit{multicast} e il pacchetto viene inviato a tutte le interfacce di detto
+gruppo.  Un'interfaccia può appartenere ad un numero qualunque numero di
+gruppi di \textit{multicast}. Il formato degli indirizzi \textit{multicast} è
+riportato in tab.~\ref{tab:IP_ipv6_multicast}:
 
 \begin{table}[htb]
   \centering
@@ -1009,14 +1016,15 @@ Il prefisso di formato per tutti gli indirizzi \textit{multicast} 
     7 & non assegnato & F & riservato \\
     \hline
   \end{tabular}
-\caption{Possibili valori del campo \textsl{scop} di un indirizzo multicast.}
+\caption{Possibili valori del campo \textsl{scop} di un indirizzo
+  \textit{multicast}.} 
 \label{tab:IP_ipv6_multiscope}
 \end{table}
 
-Infine l'ultimo campo identifica il gruppo di multicast, sia permanente che
-transitorio, all'interno del raggio di validità del medesimo. Alcuni
-indirizzi multicast, riportati in tab.~\ref{tab:multiadd} sono già riservati
-per il funzionamento della rete.
+Infine l'ultimo campo identifica il gruppo di \textit{multicast}, sia
+permanente che transitorio, all'interno del raggio di validità del medesimo.
+Alcuni indirizzi \textit{multicast}, riportati in tab.~\ref{tab:multiadd} sono
+già riservati per il funzionamento della rete.
 
 \begin{table}[!htb]
   \centering 
@@ -1042,15 +1050,16 @@ per il funzionamento della rete.
                       \href{http://www.ietf.org/rfc/rfc1970.txt}{RFC~1970} \\
     \hline
   \end{tabular}
-\caption{Gruppi multicast predefiniti.}
+\caption{Gruppi di \textit{multicast} predefiniti.}
 \label{tab:multiadd}
 \end{table}
 
 L'utilizzo del campo di \textit{scope} e di questi indirizzi predefiniti serve
-a recuperare le funzionalità del broadcasting (ad esempio inviando un
-pacchetto all'indirizzo \texttt{FF02:0:0:0:0:0:0:1} si raggiungono tutti i
-nodi locali).
+a recuperare le funzionalità del \itindex{broadcast} \textit{broadcasting} (ad
+esempio inviando un pacchetto all'indirizzo \texttt{FF02:0:0:0:0:0:0:1} si
+raggiungono tutti i nodi locali).
 
+\itindend{multicast}
 
 \subsection{Indirizzi \textit{anycast}}
 \label{sec:IP_anycast}
@@ -1302,7 +1311,7 @@ il nome di associazione di sicurezza.
 I pacchetti autenticati e crittografati portano un indice dei parametri di
 sicurezza (SPI, \textit{Security Parameter Index}) che viene negoziato prima
 di ogni comunicazione ed è definito dalla stazione sorgente. Nel caso di
-multicast dovrà essere lo stesso per tutte le stazioni del gruppo.
+\textit{multicast} dovrà essere lo stesso per tutte le stazioni del gruppo.
 
 \subsection{Autenticazione}
 \label{sec:auth} 
@@ -1439,12 +1448,13 @@ semplicemente il prefisso a quello assegnato dal provider per ottenere un
 indirizzo globale.
 
 La procedura di configurazione è la seguente: all'avvio tutti i nodi IPv6
-iniziano si devono aggregare al gruppo multicast \textit{all-nodes}
-programmando la propria interfaccia per ricevere i messaggi dall'indirizzo
-multicast \texttt{FF02::1} (vedi sez.~\ref{sec:IP_ipv6_multicast}); a questo
-punto devono inviare un messaggio ICMP \textit{Router solicitation} a tutti i
-router locali usando l'indirizzo multicast \texttt{FF02::2} usando come
-sorgente il proprio indirizzo link-local.
+iniziano si devono aggregare al gruppo di \itindex{multicast}
+\textit{multicast} \textit{all-nodes} programmando la propria interfaccia per
+ricevere i messaggi dall'indirizzo \textit{multicast} \texttt{FF02::1} (vedi
+sez.~\ref{sec:IP_ipv6_multicast}); a questo punto devono inviare un messaggio
+ICMP \textit{Router solicitation} a tutti i router locali usando l'indirizzo
+\itindex{multicast} \textit{multicast} \texttt{FF02::2} usando come sorgente
+il proprio indirizzo link-local.
 
 Il router risponderà con un messaggio ICMP \textit{Router Advertisement} che
 fornisce il prefisso e la validità nel tempo del medesimo, questo tipo di
@@ -1465,11 +1475,11 @@ della singola stazione; il secondo problema 
 introdurre in una rete una stazione autoconfigurante per ottenere un accesso
 legale.
 
-Per questi motivi è previsto anche un protocollo stateful basato su un
-server che offra una versione IPv6 del DHCP; un apposito gruppo di multicast
-\texttt{FF02::1:0} è stato riservato per questi server; in questo caso il
-nodo interrogherà il server su questo indirizzo di multicast con l'indirizzo
-link-local e riceverà un indirizzo unicast globale.
+Per questi motivi è previsto anche un protocollo stateful basato su un server
+che offra una versione IPv6 del DHCP; un apposito gruppo di \textit{multicast}
+\texttt{FF02::1:0} è stato riservato per questi server; in questo caso il nodo
+interrogherà il server su questo indirizzo di \textit{multicast} con
+l'indirizzo link-local e riceverà un indirizzo unicast globale.
 
 
 
index ceb7f55fb33feeca46d038684372bb18e1c9f288..495e02f69f8da6991840f1eca27114e26b0ae366 100644 (file)
@@ -463,9 +463,9 @@ seguenti:
   implementato direttamente sopra IP.
 \item[\textsl{ARP}] \textit{Address Resolution Protocol}. È il protocollo che
   mappa un indirizzo IP in un indirizzo hardware sulla rete locale. È usato in
-  reti di tipo broadcast come Ethernet, Token Ring o FDDI che hanno associato
-  un indirizzo fisico (il \textit{MAC address}) alla interfaccia, ma non serve
-  in connessioni punto-punto.
+  reti di tipo \itindex{broadcast} \textit{broadcast} come Ethernet, Token
+  Ring o FDDI che hanno associato un indirizzo fisico (il \textit{MAC
+    address}) alla interfaccia, ma non serve in connessioni punto-punto.
 \item[\textsl{RARP}] \textit{Reverse Address Resolution Protocol}. È il
   protocollo che esegue l'operazione inversa rispetto ad ARP (da cui il nome)
   mappando un indirizzo hardware in un indirizzo IP. Viene usato a volte per
@@ -552,7 +552,8 @@ grandi linee nei seguenti punti:
   supportare una gerarchia con più livelli di indirizzamento, un numero di
   nodi indirizzabili molto maggiore e una autoconfigurazione degli indirizzi.
 \item l'introduzione un nuovo tipo di indirizzamento, l'\textit{anycast} che
-  si aggiunge agli usuali \textit{unycast} e \textit{multicast}.
+  si aggiunge agli usuali \textit{unicast} e \itindex{multicast}
+  \textit{multicast}.
 \item la semplificazione del formato dell'intestazione (\textit{header}) dei
   pacchetti, eliminando o rendendo opzionali alcuni dei campi di IPv4, per
   eliminare la necessità di riprocessamento della stessa da parte dei router e
@@ -617,7 +618,7 @@ grande pregio della velocit
 presta bene per le applicazioni in cui la connessione non è necessaria, e
 costituirebbe solo un peso in termini di prestazioni, mentre una perdita di
 pacchetti può essere tollerata, ad esempio le applicazioni di streaming e
-quelle che usano il \texttt{multicast}.\itindex{multicast}
+quelle che usano il \textit{multicast}. \itindex{multicast}
 
 \subsection{Transport Control Protocol (TCP)}
 \label{sec:net_tcp}
@@ -689,10 +690,11 @@ effettuato per entrambe le direzioni di comunicazione.
 \label{sec:net_lim_dim}
 
 Un aspetto di cui bisogna tenere conto nella programmazione di rete, e che
-ritornerà anche più avanti, è che ci sono una serie di limiti a cui la
-trasmissione dei dati attraverso i vari livelli del protocollo deve
-sottostare, limiti che è opportuno tenere presente perché in certi casi si
-possono avere delle conseguenze sul comportamento delle applicazioni.
+ritornerà in seguito, quando tratteremo gli aspetti più avanzti, è che ci sono
+una serie di limiti a cui la trasmissione dei dati attraverso i vari livelli
+del protocollo deve sottostare; limiti che è opportuno tenere presente perché
+in certi casi si possono avere delle conseguenze sul comportamento delle
+applicazioni.
 
 Un elenco di questi limiti, insieme ad un breve accenno alle loro origini ed
 alle eventuali implicazioni che possono avere, è il seguente:
@@ -706,12 +708,14 @@ alle eventuali implicazioni che possono avere, 
   dell'header è fissa e di 40 byte e non è compresa nel valore indicato dal
   suddetto campo. Inoltre IPv6 ha la possibilità di estendere la dimensione di
   un pacchetto usando la \textit{jumbo payload option}.
-\item Molte reti fisiche hanno un MTU (\textit{maximum transfer unit}) che
-  dipende dal protocollo specifico usato al livello di connessione fisica. Il
-  più comune è quello di ethernet che è pari a 1500 byte, una serie di altri
-  valori possibili sono riportati in tab.~\ref{tab:net_mtu_values}.
+\item Molte reti fisiche hanno una MTU \itindex{Maximum~Transfer~Unit}
+  (\textit{Maximum Transfer Unit}) che dipende dal protocollo specifico usato
+  al livello di connessione fisica. Il più comune è quello di ethernet che è
+  pari a 1500 byte, una serie di altri valori possibili sono riportati in
+  tab.~\ref{tab:net_mtu_values}.
 \end{itemize}
 
+\itindbeg{Maximum~Transfer~Unit}
 Quando un pacchetto IP viene inviato su una interfaccia di rete e le sue
 dimensioni eccedono la MTU viene eseguita la cosiddetta
 \textit{frammentazione}, i pacchetti cioè vengono suddivisi\footnote{questo
@@ -735,8 +739,8 @@ piccoli che possono essere trasmessi attraverso l'interfaccia.
     X.25 & 576 \\
     \hline
   \end{tabular}
-  \caption{Valori della MTU (\textit{maximum transfer unit}) per una serie di
-    reti diverse.}
+  \caption{Valori della MTU (\textit{Maximum Transfer Unit}) per una serie di
+    diverse tecnologie di rete.} 
   \label{tab:net_mtu_values}
 \end{table}
 
@@ -777,6 +781,9 @@ Il TCP usa sempre questo meccanismo, che per le implementazioni di IPv4 
 opzionale, mentre diventa obbligatorio per IPv6.  Per IPv6 infatti, non
 potendo i router frammentare i pacchetti, è necessario, per poter comunicare,
 conoscere da subito il \textit{path MTU}.
+\itindend{Maximum~Transfer~Unit}
+
+
 
 Infine TCP definisce una MSS \textit{Maximum Segment Size} che annuncia
 all'altro capo della connessione la dimensione massima dimensione del segmento
index 3aa2bb905ba5448ba0fe30965e0d242d369f1382..f905efbb9c237637d28c2ed94e48606edb2208ba 100644 (file)
@@ -212,7 +212,7 @@ come maschera binaria che permette di impostare una serie di modalit
 funzionamento della comunicazione attraverso il socket (come
 \const{MSG\_NOSIGNAL} che impedisce l'invio del segnale \const{SIGPIPE} quando
 si è già chiuso il capo locale della connessione). Torneremo con maggiori
-dettagli sul significato di questo argomento in sez.~\ref{sec:xxx_sendmsg},
+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.
 
@@ -748,6 +748,13 @@ l'interfaccia di programmazione che serve ad utilizzarli resta sempre quella
 dei socket.
 
 
+
+\subsection{Il passaggio di file descriptor}
+\label{sec:sock_fd_passing}
+
+
+
+
 \section{I socket \textit{raw}}
 \label{sec:socket_raw}
 
index 099b1ffac1c7fa077f58696a7e8edf27a674d912..6a4b923ebf120cf15b895953c58d83fd439fa912 100644 (file)
@@ -1983,7 +1983,7 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e
                               trasmettere un valore arbitrario
                               dell'\textsl{uid} nel passaggio delle
                               credenziali coi socket unix domain (vedi
-                              sez.~\ref{sec:unix_socket_xxx}).\\ 
+                              sez.~\ref{sec:unix_socket}).\\ 
 %
 % Linux specific capabilities
 %
@@ -2000,11 +2000,13 @@ implementata.\footnote{per attualmente si intende fino al kernel 2.6.13, e
                               su porte riservate (vedi
                               sez.~\ref{sec:TCP_func_bind}).\\ 
     \const{CAP\_NET\_BROADCAST}& la capacità di consentire l'uso di socket in
-                              broadcast e multicast.\\
+                              \itindex{broadcast} \textit{broadcast} e
+                              \itindex{multicast} \textit{multicast}.\\ 
     \const{CAP\_NET\_ADMIN} & la capacità di eseguire alcune operazioni
                               privilegiate sulla rete (impostare le opzioni
                               privilegiate dei socket, abilitare il
-                              multicasting, impostare interfacce di rete e
+                              \itindex{multicast} \textit{multicasting},
+                              impostare interfacce di rete e 
                               tabella di instradamento).\\
     \const{CAP\_NET\_RAW}   & la capacità di usare socket \texttt{RAW} e
                               \texttt{PACKET} (quelli che permettono di creare
index b6ee0ca013f455e4679e63fc28c4926e64936323..c955454637428e0e2577a1962c149d2497db0ecc 100644 (file)
@@ -26,8 +26,19 @@ controllare le funzionalit
 disponibili con i vari tipi di socket.
 
 
+
+
+\subsection{La fuzioni \func{sendmsg} e \func{recvmsg}}
+\label{sec:net_sendmsg}
+
+
+Finora abbiamo trattato delle funzioni che permettono di inviare dati sul
+socket in forma semplificata. Se infatti si devono semplicemente ...
+
+
+
 \subsection{I messaggi ancillari}
-\label{sec:TCP_ancillary_data}
+\label{sec:net_ancillary_data}
 
 
 
@@ -54,6 +65,18 @@ fig.~\ref{fig:sock_extended_err_struct}.
 
 
 
+\subsection{La gestione delle opzioni IP}
+\label{sec:sock_IP_options}
+
+
+Abbiamo visto in sez.~\ref{sec:sock_ipv4_options} come di possa usare
+\func{setsockopt} con l'opzione \const{IP\_OPTIONS} per impostare le opzioni
+IP associate per i pacchetti associati ad un socket. 
+
+
+
+
+
 
 
 
index 5c2e1858034d57a0c3b5d8da1a347cf6082be537..65c05355544fb761816100717818302a5d33651b 100644 (file)
@@ -2041,7 +2041,8 @@ tab.~\ref{tab:sock_opt_socklevel}.
     \const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           non invia attraverso un gateway.\\
     \const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          attiva o disattiva il \textit{broadcast}.\\
+                          attiva o disattiva il \itindex{broadcast}
+                          \textit{broadcast}.\\ 
     \const{SO\_SNDBUF}   &$\bullet$&$\bullet$&         &\texttt{int}& 
                           imposta dimensione del buffer di trasmissione.\\
     \const{SO\_RCVBUF}   &$\bullet$&$\bullet$&         &\texttt{int}& 
@@ -2167,7 +2168,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   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_xxx}). 
+  sez.~\ref{sec:unix_socket}). 
 
 \item[\const{SO\_BINDTODEVICE}] questa opzione permette di \textsl{legare} il
   socket ad una particolare interfaccia, in modo che esso possa ricevere ed
@@ -2180,7 +2181,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   da uno zero e di lunghezza massima pari a \const{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{cha:advanced_socket_xxx}). 
+    socket} (vedi sez.~\ref{sec:socket_raw}). 
 
 \item[\const{SO\_DEBUG}] questa opzione abilita il debugging delle operazioni
   dei socket; l'opzione utilizza per \param{optval} un intero usato come
@@ -2227,11 +2228,12 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   di routing del kernel. Prende per \param{optval} un intero usato come valore
   logico.
 
-\item[\const{SO\_BROADCAST}] questa opzione abilita il \textit{broadcast};
-  quanto abilitata i socket di tipo \const{SOCK\_DGRAM} riceveranno i
-  pacchetti inviati all'indirizzo di 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\_BROADCAST}] questa opzione abilita il \itindex{broadcast}
+  \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 dimenzione del buffer di
   uscita del socket. Prende per \param{optval} un intero indicante il numero
@@ -2520,37 +2522,35 @@ si pu
 fare questa operazione per un socket TCP dato che su di essi si può sempre
 invocare \func{getsockname} una volta che si è completata la connessione.
 
-Infine il quarto caso è quello in cui si vuole effettivamente ottenere
-un \textit{completely duplicate binding}, quando cioè si vuole
-eseguire \func{bind} su un indirizzo ed una porta che sono già
-\textsl{legati} ad un altro socket.  Questo ovviamente non ha senso
-per il normale traffico di rete, in cui i pacchetti vengono scambiati
-direttamente fra due applicazioni; ma quando un sistema supporta il
-traffico in \itindex{multicast}\textit{multicast}, in cui una
-applicazione invia i pacchetti a molte altre (vedi
-sez.~\ref{sec:multicast_xxx}), allora ha senso che su una macchina i
-pacchetti provenienti dal traffico in multicast possano essere
-ricevuti da più applicazioni\footnote{l'esempio classico di traffico
-  in multicast è quello di uno streaming di dati (audio, video, ecc.),
-  l'uso del multicast consente in tal caso di trasmettere un solo
-  pacchetto, che potrà essere ricevuto da tutti i possibili
-  destinatari (invece di inviarne un duplicato a ciascuno); in questo
-  caso è perfettamente logico aspettarsi che sulla stessa macchina più
-  utenti possano lanciare un programma che permetta loro di ricevere
-  gli stessi dati.} o da diverse istanze della stessa applicazione.
+Infine il quarto caso è quello in cui si vuole effettivamente ottenere un
+\textit{completely duplicate binding}, quando cioè si vuole eseguire
+\func{bind} su un indirizzo ed una porta che sono già \textsl{legati} ad un
+altro socket.  Questo ovviamente non ha senso per il normale traffico di rete,
+in cui i pacchetti vengono scambiati direttamente fra due applicazioni; ma
+quando un sistema supporta il traffico in \itindex{multicast}
+\textit{multicast}, in cui una applicazione invia i pacchetti a molte altre
+(vedi sez.~\ref{sec:multicast_xxx}), allora ha senso che su una macchina i
+pacchetti provenienti dal traffico in \itindex{multicast} \textit{multicast}
+possano essere ricevuti da più applicazioni\footnote{l'esempio classico di
+  traffico in \textit{multicast} è quello di uno streaming di dati (audio,
+  video, ecc.), l'uso del \textit{multicast} consente in tal caso di
+  trasmettere un solo pacchetto, che potrà essere ricevuto da tutti i
+  possibili destinatari (invece di inviarne un duplicato a ciascuno); in
+  questo caso è perfettamente logico aspettarsi che sulla stessa macchina più
+  utenti possano lanciare un programma che permetta loro di ricevere gli
+  stessi dati.} o da diverse istanze della stessa applicazione.
 \itindex{multicast}
 
 In questo caso utilizzando \const{SO\_REUSEADDR} si consente ad una
-applicazione eseguire \func{bind} sulla stessa porta ed indirizzo
-usata da un'altra, così che anche essa possa ricevere gli stessi
-pacchetti (chiaramente la cosa non ha alcun senso per i socket TCP, ed
-infatti in questo tipo di applicazione è normale l'uso del protovollo
-UDP). La regola è che quando si hanno più applicazioni che hanno
-eseguito \func{bind} sulla stessa porta, di tutti pacchetti destinati
-ad un indirizzo di broadcast o di \itindex{multicast}
-\texttt{multicast} viene inviata una copia a ciascuna applicazione.
-Non è definito invece cosa accade qualora il pacchetto sia destinato
-ad un indirizzo normale (unicast).
+applicazione eseguire \func{bind} sulla stessa porta ed indirizzo usata da
+un'altra, così che anche essa possa ricevere gli stessi pacchetti (chiaramente
+la cosa non ha alcun senso per i socket TCP, ed infatti in questo tipo di
+applicazione è normale l'uso del protovollo UDP). La regola è che quando si
+hanno più applicazioni che hanno eseguito \func{bind} sulla stessa porta, di
+tutti pacchetti destinati ad un indirizzo di \itindex{broadcast}
+\textit{broadcast} o di \itindex{multicast} \textit{multicast} viene inviata
+una copia a ciascuna applicazione.  Non è definito invece cosa accade qualora
+il pacchetto sia destinato ad un indirizzo normale (unicast).
 
 Essendo questo un caso particolare in alcuni sistemi (come BSD) è stata
 introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta
@@ -2684,7 +2684,7 @@ tutte le altre costanti ad esse collegate sono definite in
                     \textbf{Descrizione}\\
     \hline
     \hline
-    \const{IP\_OPTIONS}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+    \const{IP\_OPTIONS}         &$\bullet$&$\bullet$&&\texttt{void *}& %??? 
       Imposta o riceve le opzioni di IP.\\
     \const{IP\_PKTINFO}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Passa un messaggio di informazione.\\
@@ -2696,30 +2696,32 @@ tutte le altre costanti ad esse collegate sono definite in
       Passa un messaggio con le opzioni IP.\\
     \const{IP\_RETOPTS}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Passa un messaggio con le opzioni IP non trattate.\\
-    \const{IP\_TOS}             &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+    \const{IP\_TOS}             &$\bullet$&$\bullet$&         &\texttt{int}& 
       Imposta il valore del campo TOS.\\
-    \const{IP\_TTL}             &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+    \const{IP\_TTL}             &$\bullet$&$\bullet$&         &\texttt{int}& 
       Imposta il valore del campo TTL.\\
     \const{IP\_HDRINCL}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Passa l'intestazione di IP nei dati.\\
     \const{IP\_RECVERR}         &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
       Abilita la gestione degli errori.\\
-    \const{IP\_MTU\_DISCOVER}   &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
+    \const{IP\_MTU\_DISCOVER}   &$\bullet$&$\bullet$&         &\texttt{int}& 
       Imposta il Path MTU Discovery.\\
-    \const{IP\_MTU}             &$\bullet$&       &$\bullet$&\texttt{int}& 
+    \const{IP\_MTU}             &$\bullet$&         &         &\texttt{int}& 
       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$&$\bullet$&\texttt{int}& 
-      Imposta il TTL per i pacchetti multicast.\\
+    \const{IP\_MULTICAST\_TTL}  &$\bullet$&$\bullet$&         &\texttt{int}& 
+      Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\
     \const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      Controlla il reinvio a se stessi dei dati di multicast.\\ 
-    \const{IP\_ADD\_MEMBERSHIP} &         &$\bullet$&$\bullet$&\texttt{int}& 
-      Si unisce a un gruppo di multicast.\\
-    \const{IP\_DROP\_MEMBERSHIP}&        &$\bullet$&$\bullet$&\texttt{int}& 
-      Si sgancia da un gruppo di multicast.\\
-    \const{IP\_MULTICAST\_IF}   &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-      Imposta l'interfaccia locale di un socket multicast.\\ 
+      Controlla il reinvio a se stessi dei dati di \itindex{multicast} 
+      \textit{multicast}.\\ 
+    \const{IP\_ADD\_MEMBERSHIP} &         &$\bullet$&   &\struct{ip\_mreqn}& 
+      Si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\
+    \const{IP\_DROP\_MEMBERSHIP}&         &$\bullet$&   &\struct{ip\_mreqn}& 
+      Si sgancia da un gruppo di \textit{multicast}.\\
+    \const{IP\_MULTICAST\_IF}   &         &$\bullet$&   &\struct{ip\_mreqn}& 
+      Imposta l'interfaccia locale di un socket \itindex{multicast} 
+      \textit{multicast}.\\ 
    \hline
   \end{tabular}
   \caption{Le opzioni disponibili al livello \const{SOL\_IP}.} 
@@ -2740,12 +2742,12 @@ elenco:
   opzioni IP utilizzate per la spedizione, quando la si usa con
   \func{setsockopt} vengono impostate le opzioni specificate. L'uso di questa
   opzione richiede una profonda conoscenza del funzionamento del protocollo,
-  torneremo in parte sull'argomento in sez.~\ref{sec:sock_advanced_xxx}.
+  torneremo in parte sull'argomento in sez.~\ref{sec:sock_IP_options}.
 
 
 \item[\const{IP\_PKTINFO}] Quando abilitata l'opzione permette di ricevere
   insieme ai pacchetti un messaggio ancillare (vedi
-  sez.~\ref{sec:TCP_ancillary_data}) di tipo \const{IP\_PKTINFO} contenente
+  sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_PKTINFO} contenente
   una struttura \struct{pktinfo} (vedi fig.~\ref{fig:sock_pktinfo_struct}) che
   mantiene una serie di informazioni riguardo i pacchetti in arrivo. In
   particolare è possibile conoscere l'interfaccia su cui è stato ricevuto un
@@ -2773,23 +2775,33 @@ e \const{IP\_RECVIF} presenti in altri Unix (la relativa informazione 
 ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di
 \struct{pktinfo}). 
 
+L'opzione prende per \param{optval} un intero usato come valore logico, che
+specifica soltanto se insieme al pacchetto deve anche essere inviato o
+ricevuto il messaggio \const{IP\_PKTINFO} (vedi
+sez.~\ref{sec:net_ancillary_data}); il messaggio stesso dovrà poi essere
+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
-  insieme ai pacchetti un messaggio ancillare 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. 
+  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
-  insieme ai pacchetti un messaggio ancillare di tipo \const{IP\_RECVTTL},
-  contenente un byte con il valore del campo \textit{Time to Live}
-  dell'intestazione IP (vedi sez.~\ref{sec:IP_header}).  L'opzione richiede
-  per \param{optval} un intero usato come valore logico. L'opzione non è
-  supportata per socket di tipo \const{SOCK\_STREAM}.
+  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
+  (vedi sez.~\ref{sec:IP_header}).  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\_RECVOPTS}] Quando abilitata l'opzione permette di ricevere
-  insieme ai pacchetti un messaggio ancillare di tipo \const{IP\_OPTIONS},
-  contenente le opzioni IP del protocollo (vedi sez.~\ref{sec:IP_options}). Le
+  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
   intestazioni di instradamento e le altre opzioni sono già riempite con i
   dati locali. L'opzione richiede per \param{optval} un intero usato come
   valore logico.  L'opzione non è supportata per socket di tipo
@@ -2801,12 +2813,16 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di
   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
   \textit{Type of Service} dell'intestazione IP (vedi
   sez.~\ref{sec:IP_header}) che permette di indicare le priorità dei
-  pacchetti.  Il campo TOS è di 8 bit e l'opzione richiede per \param{optval}
-  un intero che ne contiene il valore. Sono definite anche alcune costanti che
+  pacchetti. Se impostato il valore verrà mantenuto per tutti i pacchetti del
+  socket; alcuni valori (quelli che aumentano la priorità) richiedono i
+  privilegi di amministrazione con la \itindex{capabilities} capability
+  \const{CAP\_NET\_ADMIN}.
+
+  Il campo TOS è di 8 bit e l'opzione richiede per \param{optval} un intero
+  che ne contenga il valore. Sono definite anche alcune costanti che
   definiscono alcuni valori standardizzati per il \textit{Type of Service},
   riportate in tab.~\ref{tab:IP_TOS_values}, il valore di default usato da
   Linux è \const{IPTOS\_LOWDELAY}, ma esso può essere modificato con le
@@ -2815,67 +2831,117 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di
   dal protocollo utilizzando l'opzione \const{SO\_PRIORITY} illustrata in
   sez.~\ref{sec:sock_generic_options}.
 
-
 \item[\const{IP\_TTL}] L'opzione consente di leggere o impostare il campo
   \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header})
   per tutti i pacchetti associati al socket.  Il campo TTL è di 8 bit e
   l'opzione richiede che \param{optval} sia un intero, che ne conterrà il
   valore.
 
-
 \item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso
   l'intestazione IP in cima ai propri dati. L'opzione è valida soltanto per
   socket di tipo \const{SOCK\_RAW}, e quando utilizzata eventuali valori
   impostati con \const{IP\_OPTIONS}, \const{IP\_TOS} o \const{IP\_TTL} sono
   ignorati. In ogni caso prima della spedizione alcuni campi
   dell'instestazione vengono comunque modificati dal kernel, torneremo
-  sull'argomento in sez.~\ref{sec:socket_raw_xxx}
-
+  sull'argomento in sez.~\ref{sec:socket_raw}
 
 \item[\const{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
   vengono memorizzati su una coda, dalla quale poi possono essere letti con
-  \func{recvmsg} (torneremo su questo in sez.~\ref{sec:TCP_ancillary_data}).
-  L'opzione richiede per \param{optval} un intero usato come valore logico;
-  l'opzione non è applicabile a socket di tipo \const{SOCK\_STREAM}.
-
-\item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i
-  kernel della serie 2.2.x, ed è specifica di Linux.  L'opzione
-  permette di scrivere o leggere le impostazioni usate nella
-  determinazione della \textit{Maximum Tranfer Unit} (vedi
-  sez.~\ref{sec:net_lim_dim}) per il socket. Il valore di default è
-  determinato dal parametro \texttt{ip\_no\_pmtu\_disc} di
-  \func{sysctl} per i socket di tipo \const{SOCK\_STREAM}, mentre è
-  diabilitato per tutti gli altri.
-
-\item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Maximum
-    Tranfer Unit} di percorso del socket.  L'opzione richiede per
-  \param{optval} un intero che conterrà il valore della MTU in byte.  Questa è
-  una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di
-  Linux.
+  \func{recvmsg} (vedi sez.~\ref{sec:net_sendmsg}) come messaggi ancillari
+  (torneremo su questo in sez.~\ref{sec:net_ancillary_data}) di tipo
+  \const{IP\_RECVERR}.  L'opzione richiede per \param{optval} un intero usato
+  come valore logico e non è applicabile a socket di tipo
+  \const{SOCK\_STREAM}.
+
+\itindbeg{Maximum~Transfer~Unit}
+\item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel
+  della serie 2.2.x, ed è specifica di Linux.  L'opzione permette di scrivere
+  o leggere le impostazioni della modalità usata per la determinazione della
+  \textit{Path Maximum Transfer Unit} (vedi sez.~\ref{sec:net_lim_dim}) del
+  socket. L'opzione prende per \param{optval} un valore intero che indica la
+  modalità usata, da specificare con una delle costanti riportate in
+  tab.~\ref{tab:sock_ip_mtu_discover}.
+
+  \begin{table}[!htb]
+    \centering
+    \footnotesize
+    \begin{tabular}[c]{|l|r|p{7cm}|}
+      \hline
+      \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}.\\ 
+      \hline
+    \end{tabular}
+    \caption{Valori possibili per l'argomento \param{optval} di
+      \const{IP\_MTU\_DISCOVER}.} 
+    \label{tab:sock_ip_mtu_discover}
+  \end{table}
+
+  Il valore di default applicato ai socket di tipo \const{SOCK\_STREAM} è
+  determinato dal parametro \texttt{ip\_no\_pmtu\_disc} (vedi
+  sez.~\ref{sec:sock_sysctl}), mentre per tutti gli altri socket di default la
+  ricerca è disabilitata ed è responsabilità del programma creare pacchetti di
+  dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se
+  l'opzione viene abilitata, il kernel si incaricherà di tenere traccia
+  automaticamente della \textit{Path MTU} verso ciascuna destinazione, e
+  rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori
+  della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la
+    trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento
+    successivo della trasmissione, o la frammentazione dello stesso.} 
+
+\item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
+  di percorso del socket.  L'opzione richiede per \param{optval} un intero che
+  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.
+
+  È tramite questa opzione che un programma può leggere, quando si è avuto un
+  errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si
+  tenga presente che per poter usare questa opzione, oltre ad avere abilitato
+  la scoperta della \textit{Path MTU}, occorre che il socket sia stato
+  esplicitamente connesso con \func{connect}. 
+
+  Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
+  \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
+  e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
+  esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
+  dimensioni (che verrà scartato) e ripetendo l'invio coi dati aggiornati. Si
+  tenga infine conto che durante il procedimento i pacchetti iniziali possono
+  essere perduti, ed è compito dell'applicazione gestirne una eventuale
+  ritrasmissione. 
+
+\itindend{Maximum~Transfer~Unit}
 
 \item[\const{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
+  sez.~\ref{sec:IP_options}) che devono essere inoltrati al socket
   corrente. Può essere usata soltanto per socket di tipo raw.
 
+\itindbeg{multicast}
 \item[\const{IP\_MULTICAST\_TTL}] L'opzione permette di impostare o leggere il
-  valore del campo TTL per i pacchetti 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 locale. Questa
-  opzione consente ai programmi che lo richiedono di superare 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 che si inviano su un socket usato con il \itindex{multicast}
-  \texttt{multicast} vengano ricevuti anche sulla stessa macchina da
-  cui li si stanno inviando.  Prende per \param{optval} un intero
-  usato come valore logico.
+  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
+  locale. Questa opzione consente ai programmi che lo richiedono di superare
+  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
+  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.
 
   In generale se si vuole che eventuali client possano ricevere i dati che si
   inviano occorre che questa funzionalità sia abilitata (come avviene di
@@ -2883,17 +2949,16 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di
   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 \itindex{multicast} \texttt{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 permette di
-  indicare, con il campo \var{imr\_multiaddr} l'indirizzo del gruppo
-  di multicast a cui ci si vuole unire, con il campo
-  \var{imr\_address} l'indirizzo dell'interfaccia locale con cui
-  unirsi al gruppo di multicast e con \var{imr\_ifindex} l'indice
-  dell'interfaccia da utilizzare (un valore nullo indica una
-  interfaccia qualunque).
+\item[\const{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
+  permette di indicare, con il campo \var{imr\_multiaddr} l'indirizzo del
+  gruppo di \textit{multicast} a cui ci si vuole unire, con il campo
+  \var{imr\_address} l'indirizzo dell'interfaccia locale con cui unirsi al
+  gruppo di \textit{multicast} e con \var{imr\_ifindex} l'indice
+  dell'interfaccia da utilizzare (un valore nullo indica una interfaccia
+  qualunque).
 
   Per compatibilità è possibile utilizzare anche un argomento di tipo
   \struct{ip\_mreq}, una precedente versione di \struct{ip\_mreqn}, che
@@ -2904,29 +2969,25 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di
   \begin{minipage}[c]{15cm}
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
-  \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei socket
-    per le operazioni concernenti l'appartenenza ai gruppi di multicast.}
+  \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
+    socket per le operazioni concernenti l'appartenenza ai gruppi di
+    \textit{multicast}.}
   \label{fig:ip_mreqn_struct}
 \end{figure}
 
+\item[\const{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\_DROP\_MEMBERSHIP}] Lascia un gruppo di
-  \itindex{multicast} \texttt{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
-  i'utilizzo del multicast, ed utilizza come \param{optval} le stesse
-  strutture \struct{ip\_mreqn} o \struct{ip\_mreq} delle due
-  precedenti opzioni.
-
+\item[\const{IP\_MULTICAST\_IF}] Imposta l'interfaccia locale per i'utilizzo
+  del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture
+  \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni.
 
+\itindend{multicast}
 \end{basedescript}
 
 
 
-
-
 \section{Altre funzioni di controllo}
 \label{sec:sock_ctrl_func}
 
@@ -3043,7 +3104,7 @@ I principali sono:
 \item[\texttt{netdev\_max\_backlog}] numero massimo di pacchetti che possono
   essere contenuti nella coda di ingresso generale.
 \item[\texttt{optmem\_max}] lunghezza massima dei dati ancillari e di
-  controllo (vedi sez.~\ref{sec:TCP_ancillary_data}).
+  controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
 Nella directory \texttt{/proc/sys/net/ipv4} sono disponibili i parametri per i
index d7c461c0057166e31dc1e44eb35ff43a3c90f8fd..a0eb579548d11bbc0002261d4fa82fb675eccfb4 100644 (file)
@@ -91,9 +91,9 @@ Un terzo esempio di stile di comunicazione concerne le modalit
 avviene, in certi casi essa può essere condotta con una connessione diretta
 con un solo corrispondente, come per una telefonata; altri casi possono
 prevedere una comunicazione come per lettera, in cui si scrive l'indirizzo su
-ogni pacchetto, altri ancora una comunicazione \textit{broadcast} come per la
-radio, in cui i pacchetti vengono emessi su appositi ``\textsl{canali}'' dove
-chiunque si collega possa riceverli.
+ogni pacchetto, altri ancora una comunicazione \itindex{broadcast}
+\textit{broadcast} come per la radio, in cui i pacchetti vengono emessi su
+appositi ``\textsl{canali}'' dove chiunque si collega possa riceverli.
 
 É chiaro che ciascuno di questi stili comporta una modalità diversa di gestire
 la comunicazione, ad esempio se è inaffidabile occorrerà essere in grado di
@@ -506,11 +506,11 @@ il loro uso 
 Il campo \var{sin6\_addr} contiene l'indirizzo a 128 bit usato da IPv6,
 espresso da un vettore di 16 byte. Infine il campo \var{sin6\_scope\_id} è un
 campo introdotto in Linux con il kernel 2.4, per gestire alcune operazioni
-riguardanti il multicasting.  Si noti infine che \struct{sockaddr\_in6} ha una
-dimensione maggiore della struttura \struct{sockaddr} generica di
-fig.~\ref{fig:sock_sa_gen_struct}, quindi occorre stare attenti a non avere
-fatto assunzioni riguardo alla possibilità di contenere i dati nelle
-dimensioni di quest'ultima.
+riguardanti il \itindex{multicast} \textit{multicasting}.  Si noti infine che
+\struct{sockaddr\_in6} ha una dimensione maggiore della struttura
+\struct{sockaddr} generica di fig.~\ref{fig:sock_sa_gen_struct}, quindi
+occorre stare attenti a non avere fatto assunzioni riguardo alla possibilità
+di contenere i dati nelle dimensioni di quest'ultima.
 
 
 \subsection{La struttura degli indirizzi locali}
@@ -687,17 +687,17 @@ Il campo \var{sll\_hatype} indica il tipo ARP, come definito in
 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: \var{PACKET\_HOST} per un pacchetto indirizzato alla macchina
-ricevente, \var{PACKET\_BROADCAST} per un pacchetto di broadcast,
-\var{PACKET\_MULTICAST} per un pacchetto inviato ad un indirizzo fisico di
-multicast, \var{PACKET\_OTHERHOST} per un pacchetto inviato ad un'altra
-stazione (e ricevuto su un'interfaccia in modo promiscuo),
-\var{PACKET\_OUTGOING} per un pacchetto originato dalla propria macchina che
-torna indietro sul socket.
+ricevente, \var{PACKET\_BROADCAST} per un pacchetto di \itindex{broadcast}
+\textit{broadcast}, \var{PACKET\_MULTICAST} per un pacchetto inviato ad un
+indirizzo fisico di \itindex{multicast} \textit{multicast},
+\var{PACKET\_OTHERHOST} per un pacchetto inviato ad un'altra stazione (e
+ricevuto su un'interfaccia in modo promiscuo), \var{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
-troncamento del pacchetto, le funzioni \func{recvmsg}, \func{recv} e
-\func{recvfrom} restituiranno comunque la lunghezza effettiva del pacchetto
-così come arrivato sulla linea.
+troncamento del pacchetto, le funzioni \func{recv}, \func{recvfrom} e
+\func{recvmsg} (vedi sez.~\ref{sec:net_sendmsg}) restituiranno comunque la
+lunghezza effettiva del pacchetto così come arrivato sulla linea.
 
 
 %% \subsection{La struttura degli indirizzi DECnet}
index 66d677fcfd8e7beb449ebe5816e7c0a8927b941e..4898087646e57f583b76a82d8e95c7a6bbcf74e3 100644 (file)
@@ -731,7 +731,8 @@ buona norma usare sempre la funzione \func{htonl}.
     \hline
     \hline
     \const{INADDR\_ANY}      & Indirizzo generico (\texttt{0.0.0.0})\\
-    \const{INADDR\_BROADCAST}& Indirizzo di \textit{broadcast}.\\
+    \const{INADDR\_BROADCAST}& Indirizzo di \itindex{broadcast}
+                               \textit{broadcast}.\\ 
     \const{INADDR\_LOOPBACK} & Indirizzo di \textit{loopback}
                                (\texttt{127.0.0.1}).\\ 
     \const{INADDR\_NONE}     & Indirizzo errato.\\
@@ -793,8 +794,9 @@ connessione con un server TCP,\footnote{di nuovo la funzione 
   \item[\errcode{EAFNOSUPPORT}] l'indirizzo non ha una famiglia di indirizzi
     corretta nel relativo campo.
   \item[\errcode{EACCES}, \errcode{EPERM}] si è tentato di eseguire una
-    connessione ad un indirizzo broadcast senza che il socket fosse stato
-    abilitato per il broadcast.
+    connessione ad un indirizzo \itindex{broadcast} \textit{broadcast} senza
+    che il socket fosse stato abilitato per il \itindex{broadcast}
+    \textit{broadcast}.
   \end{errlist}
   altri errori possibili sono: \errval{EFAULT}, \errval{EBADF},
   \errval{ENOTSOCK}, \errval{EISCONN} e \errval{EADDRINUSE}.}