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
 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}
 
 
 \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
 
 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
 
 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
   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
 \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}
 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
   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
     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ù 
     \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
 \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ò
 
 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
 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
 
 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
 
 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
 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
 
 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}
 
 \subsection{Multicasting}
 \label{sec:IP_ipv6_multicast}
 
+\itindbeg{multicast}
+
 Gli indirizzi \textit{multicast} sono usati per inviare un pacchetto a un
 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
 
 \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}
     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}
 
 \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 
 
 \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}
                       \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
 \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}
 
 \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
 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} 
 
 \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
 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
 
 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.
 
 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
   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
 \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
   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
 \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
 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}
 
 \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
 \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:
 
 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}.
   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}
 
 \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
 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}
     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}
 
   \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}.
 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
 
 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
 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.
 
 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.
 
 
 dei socket.
 
 
+
+\subsection{Il passaggio di file descriptor}
+\label{sec:sock_fd_passing}
+
+
+
+
 \section{I socket \textit{raw}}
 \label{sec:socket_raw}
 
 \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
                               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
 %
 %
 % 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
                               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
     \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
                               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.
 
 
 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}
 \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}& 
     \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}& 
     \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
   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
 
 \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
   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
 
 \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.
 
   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
 
 \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.
 
 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
 \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
 
 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
                     \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.\\
       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.\\
       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.\\
       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.\\
       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.\\
       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.\\
       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}& 
     \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}.} 
    \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,
   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
 
 
 \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
   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}). 
 
 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
 
 \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
 
 \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
 
 \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
   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}.
 
   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
 \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
   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}.
 
   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\_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
 \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
 
 \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
 
 \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.
 
   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
 \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
 
   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.
 
   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
 
   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}
   \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}
 
   \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}
 
 
 
 \end{basedescript}
 
 
 
-
-
 \section{Altre funzioni di controllo}
 \label{sec:sock_ctrl_func}
 
 \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
 \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
 \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
 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
 
 É 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
 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}
 
 
 \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
 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
 
 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}
 
 
 %% \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})\\
     \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.\\
     \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
   \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}.}
   \end{errlist}
   altri errori possibili sono: \errval{EFAULT}, \errval{EBADF},
   \errval{ENOTSOCK}, \errval{EISCONN} e \errval{EADDRINUSE}.}