Risistemazione della sezione sulle opzioni dei socket IP. Corretta la
[gapil.git] / socket.tex
index 61815e0c4aa6367c8032a2bd91d1e519c7683bc4..a0eb579548d11bbc0002261d4fa82fb675eccfb4 100644 (file)
@@ -1,6 +1,6 @@
 %% socket.tex
 %%
 %% socket.tex
 %%
-%% Copyright (C) 2000-2004 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -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
@@ -240,7 +240,7 @@ Si tenga presente che non tutte le famiglie di protocolli sono utilizzabili
 dall'utente generico, ad esempio in generale tutti i socket di tipo
 \const{SOCK\_RAW} possono essere creati solo da processi che hanno i privilegi
 di amministratore (cioè con user-ID effettivo uguale a zero) o dotati della
 dall'utente generico, ad esempio in generale tutti i socket di tipo
 \const{SOCK\_RAW} possono essere creati solo da processi che hanno i privilegi
 di amministratore (cioè con user-ID effettivo uguale a zero) o dotati della
-capability \texttt{CAP\_NET\_RAW}.
+\itindex{capabilities}\textit{capability} \const{CAP\_NET\_RAW}.
 
 
 \subsection{Il tipo, o stile}
 
 
 \subsection{Il tipo, o stile}
@@ -439,8 +439,8 @@ fig.~\ref{fig:sock_sa_ipv4_struct}, conforme allo standard POSIX.1g.
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_in.h}
   \end{minipage} 
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_in.h}
   \end{minipage} 
-  \caption{La struttura degli indirizzi dei socket internet (IPv4)
-    \structd{sockaddr\_in}.}
+  \caption{La struttura \structd{sockaddr\_in} degli indirizzi dei socket
+    internet (IPv4) e la struttura \structd{in\_addr} degli indirizzi IPv4.}
   \label{fig:sock_sa_ipv4_struct}
 \end{figure}
 
   \label{fig:sock_sa_ipv4_struct}
 \end{figure}
 
@@ -457,9 +457,9 @@ altrimenti si avr
 specifica il \textsl{numero di porta}. I numeri di porta sotto il 1024 sono
 chiamati \textsl{riservati} in quanto utilizzati da servizi standard e
 soltanto processi con i privilegi di amministratore (con user-ID effettivo
 specifica il \textsl{numero di porta}. I numeri di porta sotto il 1024 sono
 chiamati \textsl{riservati} in quanto utilizzati da servizi standard e
 soltanto processi con i privilegi di amministratore (con user-ID effettivo
-uguale a zero) o con la capability \texttt{CAP\_NET\_BIND\_SERVICE} possono
-usare la funzione \func{bind} (che vedremo in sez.~\ref{sec:TCP_func_bind}) su
-queste porte.
+uguale a zero) o con la \itindex{capabilities}\textit{capability}
+\const{CAP\_NET\_BIND\_SERVICE} possono usare la funzione \func{bind} (che
+vedremo in sez.~\ref{sec:TCP_func_bind}) su queste porte.
 
 Il membro \var{sin\_addr} contiene un indirizzo internet, e viene acceduto sia
 come struttura (un resto di una implementazione precedente in cui questa era
 
 Il membro \var{sin\_addr} contiene un indirizzo internet, e viene acceduto sia
 come struttura (un resto di una implementazione precedente in cui questa era
@@ -490,8 +490,8 @@ in fig.~\ref{fig:sock_sa_ipv6_struct}.
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_in6.h}
   \end{minipage} 
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_in6.h}
   \end{minipage} 
-  \caption{La struttura degli indirizzi dei socket IPv6 
-    \structd{sockaddr\_in6}.}
+  \caption{La struttura \structd{sockaddr\_in6} degli indirizzi dei socket
+    IPv6 e la struttura \structd{in6\_addr} degli indirizzi IPv6.}
   \label{fig:sock_sa_ipv6_struct}
 \end{figure}
 
   \label{fig:sock_sa_ipv6_struct}
 \end{figure}
 
@@ -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}
@@ -531,8 +531,8 @@ fig.~\ref{fig:sock_sa_local_struct}.
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_un.h}
   \end{minipage} 
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_un.h}
   \end{minipage} 
-  \caption{La struttura degli indirizzi dei socket locali (detti anche
-    \textit{unix domain}) \structd{sockaddr\_un} definita in \file{sys/un.h}.}
+  \caption{La struttura \structd{sockaddr\_un} degli indirizzi dei socket
+    locali (detti anche \textit{unix domain}) definita in \file{sys/un.h}.}
   \label{fig:sock_sa_local_struct}
 \end{figure}
 
   \label{fig:sock_sa_local_struct}
 \end{figure}
 
@@ -541,8 +541,9 @@ il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme;
 può essere un file (di tipo socket) nel filesystem o una stringa univoca
 (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene
 specificato come una stringa (terminata da uno zero) corrispondente al
 può essere un file (di tipo socket) nel filesystem o una stringa univoca
 (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene
 specificato come una stringa (terminata da uno zero) corrispondente al
-pathname del file; nel secondo invece \var{sun\_path} inizia con uno zero e
-vengono usati come nome i restanti byte come stringa, senza terminazione.
+\itindex{pathname}\textit{pathname} del file; nel secondo invece
+\var{sun\_path} inizia con uno zero e vengono usati come nome i restanti byte
+come stringa, senza terminazione.
 
 
 \subsection{La struttura degli indirizzi AppleTalk}
 
 
 \subsection{La struttura degli indirizzi AppleTalk}
@@ -561,7 +562,7 @@ I socket AppleTalk permettono di usare il protocollo DDP, che 
 a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
 \func{socket} deve essere nullo. È altresì possibile usare i socket raw
 specificando un tipo \const{SOCK\_RAW}, nel qual caso l'unico valore valido
 a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
 \func{socket} deve essere nullo. È altresì possibile usare i socket raw
 specificando un tipo \const{SOCK\_RAW}, nel qual caso l'unico valore valido
-per \param{protocol} è \func{ATPROTO\_DDP}.
+per \param{protocol} è \const{ATPROTO\_DDP}.
 
 Gli indirizzi AppleTalk devono essere specificati tramite una struttura
 \struct{sockaddr\_atalk}, la cui definizione è riportata in
 
 Gli indirizzi AppleTalk devono essere specificati tramite una struttura
 \struct{sockaddr\_atalk}, la cui definizione è riportata in
@@ -573,23 +574,24 @@ il file \file{netatalk/at.h}.
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_atalk.h}
   \end{minipage} 
   \begin{minipage}[c]{15cm}
     \includestruct{listati/sockaddr_atalk.h}
   \end{minipage} 
-  \caption{La struttura degli indirizzi dei socket AppleTalk 
-    \structd{sockaddr\_atalk}.}
+  \caption{La struttura \structd{sockaddr\_atalk} degli indirizzi dei socket
+    AppleTalk, e la struttura \structd{at\_addr} degli indirizzi AppleTalk.}
   \label{fig:sock_sa_atalk_struct}
 \end{figure}
 
 Il campo \var{sat\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
 campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
 inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
   \label{fig:sock_sa_atalk_struct}
 \end{figure}
 
 Il campo \var{sat\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
 campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
 inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
-usati solo da processi con i privilegi di amministratore o con la capability
-\const{CAP\_NET\_BIND\_SERVICE}. L'indirizzo remoto è specificato nella
-struttura \var{sat\_addr}, e deve essere in \textit{network order} (vedi
-sez.~\ref{sec:sock_endianess}); esso è composto da un parte di rete data dal
-campo \var{s\_net}, che può assumere il valore \const{AT\_ANYNET}, che indica
-una rete generica e vale anche per indicare la rete su cui si è, il singolo
-nodo è indicato da \var{s\_node}, e può prendere il valore generico
-\const{AT\_ANYNODE} che indica anche il nodo corrente, ed il valore
-\const{ATADDR\_BCAST} che indica tutti i nodi della rete.
+usati solo da processi con i privilegi di amministratore o con la
+\itindex{capabilities}\textit{capability} \const{CAP\_NET\_BIND\_SERVICE}.
+L'indirizzo remoto è specificato nella struttura \var{sat\_addr}, e deve
+essere in \textit{network order} (vedi sez.~\ref{sec:sock_endianess}); esso è
+composto da un parte di rete data dal campo \var{s\_net}, che può assumere il
+valore \const{AT\_ANYNET}, che indica una rete generica e vale anche per
+indicare la rete su cui si è, il singolo nodo è indicato da \var{s\_node}, e
+può prendere il valore generico \const{AT\_ANYNODE} che indica anche il nodo
+corrente, ed il valore \const{ATADDR\_BCAST} che indica tutti i nodi della
+rete.
 
 
 \subsection{La struttura degli indirizzi dei \textit{packet socket}}
 
 
 \subsection{La struttura degli indirizzi dei \textit{packet socket}}
@@ -597,7 +599,7 @@ nodo 
 
 I \textit{packet socket}, identificati dal dominio \const{PF\_PACKET}, sono
 un'interfaccia specifica di Linux per inviare e ricevere pacchetti
 
 I \textit{packet socket}, identificati dal dominio \const{PF\_PACKET}, sono
 un'interfaccia specifica di Linux per inviare e ricevere pacchetti
-direttamente su un'interfaccia di rete, senza passare per le routine di
+direttamente su un'interfaccia di rete, senza passare per le funzioni di
 gestione dei protocolli di livello superiore. In questo modo è possibile
 implementare dei protocolli in user space, agendo direttamente sul livello
 fisico. In genere comunque si preferisce usare la libreria \file{pcap}, che
 gestione dei protocolli di livello superiore. In questo modo è possibile
 implementare dei protocolli in user space, agendo direttamente sul livello
 fisico. In genere comunque si preferisce usare la libreria \file{pcap}, che
@@ -632,7 +634,7 @@ speciale \const{ETH\_P\_ALL} passeranno sul \textit{packet socket} tutti i
 pacchetti, qualunque sia il loro protocollo di collegamento. Ovviamente l'uso
 di questi socket è una operazione privilegiata e può essere effettuati solo da
 un processo con i privilegi di amministratore (user-ID effettivo nullo) o con
 pacchetti, qualunque sia il loro protocollo di collegamento. Ovviamente l'uso
 di questi socket è una operazione privilegiata e può essere effettuati solo da
 un processo con i privilegi di amministratore (user-ID effettivo nullo) o con
-la capability \const{CAP\_NET\_RAW}.
+la \itindex{capabilities}\textit{capability} \const{CAP\_NET\_RAW}.
 
 Una volta aperto un \textit{packet socket}, tutti i pacchetti del protocollo
 specificato passeranno attraverso di esso, qualunque sia l'interfaccia da cui
 
 Una volta aperto un \textit{packet socket}, tutti i pacchetti del protocollo
 specificato passeranno attraverso di esso, qualunque sia l'interfaccia da cui
@@ -685,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}
@@ -718,13 +720,13 @@ cos
 % passaggio dipende dalla direzione del medesimo, dal processo al kernel o
 % viceversa.
 
 % passaggio dipende dalla direzione del medesimo, dal processo al kernel o
 % viceversa.
 
-% In particolare le tre funzioni \texttt{bind}, \texttt{connect} e
-% \texttt{sendto} passano la struttura al kernel, in questo caso è passata
+% In particolare le tre funzioni \func{bind}, \func{connect} e
+% \func{sendto} passano la struttura al kernel, in questo caso è passata
 % \textsl{per valore} anche la dimensione della medesima
 
 
 % \textsl{per valore} anche la dimensione della medesima
 
 
-% Le funzioni \texttt{accept}, \texttt{recvfrom}, \texttt{getsockname} e
-% \texttt{getpeername} invece ricevono i valori del kernel 
+% Le funzioni \func{accept}, \func{recvfrom}, \func{getsockname} e
+% \func{getpeername} invece ricevono i valori del kernel 
 
 
 
 
 
 
@@ -739,15 +741,24 @@ ci
 seguito.
 
 
 seguito.
 
 
-\subsection{La \textit{endianess}\index{endianess}}
+\subsection{La \textit{endianess}}
 \label{sec:sock_endianess}
 
 \label{sec:sock_endianess}
 
+\itindbeg{endianess}
 La rappresentazione di un numero binario in un computer può essere fatta in
 due modi, chiamati rispettivamente \textit{big endian} e \textit{little
   endian} a seconda di come i singoli bit vengono aggregati per formare le
 variabili intere (ed in genere in diretta corrispondenza a come sono poi in
 realtà cablati sui bus interni del computer).
 
 La rappresentazione di un numero binario in un computer può essere fatta in
 due modi, chiamati rispettivamente \textit{big endian} e \textit{little
   endian} a seconda di come i singoli bit vengono aggregati per formare le
 variabili intere (ed in genere in diretta corrispondenza a come sono poi in
 realtà cablati sui bus interni del computer).
 
+\begin{figure}[htb]
+  \centering
+  \includegraphics[height=3cm]{img/endianess}
+  \caption{Schema della disposizione dei dati in memoria a seconda della
+    \textit{endianess}.}
+  \label{fig:sock_endianess}
+\end{figure}
+
 Per capire meglio il problema si consideri un intero a 32 bit scritto in una
 locazione di memoria posta ad un certo indirizzo. Come illustrato in
 fig.~\ref{fig:sock_endianess} i singoli bit possono essere disposti un memoria
 Per capire meglio il problema si consideri un intero a 32 bit scritto in una
 locazione di memoria posta ad un certo indirizzo. Come illustrato in
 fig.~\ref{fig:sock_endianess} i singoli bit possono essere disposti un memoria
@@ -759,19 +770,11 @@ dato che si trova per prima la parte pi
 parte dal bit meno significativo è detto per lo stesso motivo \textit{little
   endian}.
 
 parte dal bit meno significativo è detto per lo stesso motivo \textit{little
   endian}.
 
-\begin{figure}[htb]
-  \centering
-  \includegraphics[height=3cm]{img/endianess}
-  \caption{Schema della disposizione dei dati in memoria a seconda della
-    \textit{endianess}\index{endianess}.}
-  \label{fig:sock_endianess}
-\end{figure}
-
-Si può allora verificare quale tipo di endianess usa il proprio computer con
-un programma elementare che si limita ad assegnare un valore ad una variabile
-per poi ristamparne il contenuto leggendolo un byte alla volta. Il codice di
-detto programma, \file{endtest.c}, è nei sorgenti allegati, allora se lo
-eseguiamo su un PC otterremo:
+Si può allora verificare quale tipo di \textit{endianess} usa il proprio
+computer con un programma elementare che si limita ad assegnare un valore ad
+una variabile per poi ristamparne il contenuto leggendolo un byte alla volta.
+Il codice di detto programma, \file{endtest.c}, è nei sorgenti allegati,
+allora se lo eseguiamo su un PC otterremo:
 \begin{verbatim}
 [piccardi@gont sources]$ ./endtest
 Using value ABCDEF01
 \begin{verbatim}
 [piccardi@gont sources]$ ./endtest
 Using value ABCDEF01
@@ -791,13 +794,13 @@ val[3]= 1
 \end{verbatim}%$
 
 
 \end{verbatim}%$
 
 
-La \textit{endianess}\index{endianess} di un computer dipende essenzialmente
-dalla architettura hardware usata; Intel e Digital usano il \textit{little
-  endian}, Motorola, IBM, Sun (sostanzialmente tutti gli altri) usano il
-\textit{big endian}. Il formato dei dati contenuti nelle intestazioni dei
-protocolli di rete è anch'esso \textit{big endian}; altri esempi di uso di
-questi due diversi formati sono quello del bus PCI, che è \textit{little
-  endian}, o quello del bus VME che è \textit{big endian}.
+La \textit{endianess} di un computer dipende essenzialmente dalla architettura
+hardware usata; Intel e Digital usano il \textit{little endian}, Motorola,
+IBM, Sun (sostanzialmente tutti gli altri) usano il \textit{big endian}. Il
+formato dei dati contenuti nelle intestazioni dei protocolli di rete è
+anch'esso \textit{big endian}; altri esempi di uso di questi due diversi
+formati sono quello del bus PCI, che è \textit{little endian}, o quello del
+bus VME che è \textit{big endian}.
 
 Esistono poi anche dei processori che possono scegliere il tipo di formato
 all'avvio e alcuni che, come il PowerPC o l'Intel i860, possono pure passare
 
 Esistono poi anche dei processori che possono scegliere il tipo di formato
 all'avvio e alcuni che, come il PowerPC o l'Intel i860, possono pure passare
@@ -806,12 +809,6 @@ in Linux l'ordinamento 
 resta sempre lo stesso, anche quando il processore permetterebbe di eseguire
 questi cambiamenti.
 
 resta sempre lo stesso, anche quando il processore permetterebbe di eseguire
 questi cambiamenti.
 
-Per controllare quale tipo di ordinamento si ha sul proprio computer si è
-scritta una piccola funzione di controllo, il cui codice è riportato
-fig.~\ref{fig:sock_endian_code}, che restituisce un valore nullo (falso) se
-l'architettura è \textit{big endian} ed uno non nullo (vero) se l'architettura
-è \textit{little endian}.
-
 \begin{figure}[htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
 \begin{figure}[htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
@@ -823,6 +820,12 @@ l'architettura 
   \label{fig:sock_endian_code}
 \end{figure}
 
   \label{fig:sock_endian_code}
 \end{figure}
 
+Per controllare quale tipo di ordinamento si ha sul proprio computer si è
+scritta una piccola funzione di controllo, il cui codice è riportato
+fig.~\ref{fig:sock_endian_code}, che restituisce un valore nullo (falso) se
+l'architettura è \textit{big endian} ed uno non nullo (vero) se l'architettura
+è \textit{little endian}.
+
 Come si vede la funzione è molto semplice, e si limita, una volta assegnato
 (\texttt{\small 9}) un valore di test pari a \texttt{0xABCD} ad una variabile
 di tipo \ctyp{short} (cioè a 16 bit), a ricostruirne una copia byte a byte.
 Come si vede la funzione è molto semplice, e si limita, una volta assegnato
 (\texttt{\small 9}) un valore di test pari a \texttt{0xABCD} ad una variabile
 di tipo \ctyp{short} (cioè a 16 bit), a ricostruirne una copia byte a byte.
@@ -832,14 +835,14 @@ accedere al contenuto della prima variabile, ed infine calcola (\texttt{\small
 significativo (cioè, per quanto visto in fig.~\ref{fig:sock_endianess}, che sia
 \textit{little endian}). Infine la funzione restituisce (\texttt{\small 12})
 il valore del confonto delle due variabili. 
 significativo (cioè, per quanto visto in fig.~\ref{fig:sock_endianess}, che sia
 \textit{little endian}). Infine la funzione restituisce (\texttt{\small 12})
 il valore del confonto delle due variabili. 
-
+\itindend{endianess}
 
 
 
 \subsection{Le funzioni per il riordinamento}
 \label{sec:sock_func_ord}
 
 
 
 
 \subsection{Le funzioni per il riordinamento}
 \label{sec:sock_func_ord}
 
-Il problema connesso all'endianess\index{endianess} è che quando si passano
+Il problema connesso all'endianess\itindex{endianess} è che quando si passano
 dei dati da un tipo di architettura all'altra i dati vengono interpretati in
 maniera diversa, e ad esempio nel caso dell'intero a 16 bit ci si ritroverà
 con i due byte in cui è suddiviso scambiati di posto.  Per questo motivo si
 dei dati da un tipo di architettura all'altra i dati vengono interpretati in
 maniera diversa, e ad esempio nel caso dell'intero a 16 bit ci si ritroverà
 con i due byte in cui è suddiviso scambiati di posto.  Per questo motivo si
@@ -948,15 +951,6 @@ questo caso le lettere \texttt{n} e \texttt{p} sono degli mnemonici per
 ricordare il tipo di conversione effettuata e stanno per \textit{presentation}
 e \textit{numeric}.
 
 ricordare il tipo di conversione effettuata e stanno per \textit{presentation}
 e \textit{numeric}.
 
-% \begin{figure}[htb]
-%   \centering  
-
-%   \caption{Schema della rappresentazioni utilizzate dalle funzioni di 
-%     conversione \texttt{inet\_pton} e \texttt{inet\_ntop} }
-%   \label{fig:sock_inet_conv_func}
-
-% \end{figure}
-
 Entrambe le funzioni accettano l'argomento \param{af} che indica il tipo di
 indirizzo, e che può essere soltanto \const{AF\_INET} o \const{AF\_INET6}. La
 prima funzione, \funcd{inet\_pton}, serve a convertire una stringa in un
 Entrambe le funzioni accettano l'argomento \param{af} che indica il tipo di
 indirizzo, e che può essere soltanto \const{AF\_INET} o \const{AF\_INET6}. La
 prima funzione, \funcd{inet\_pton}, serve a convertire una stringa in un