Correzioni agli errori, indicizzazioni e riorganizzata la sezione sul
[gapil.git] / socket.tex
index 972c42d9760f9752554d647b089e25474eeb14ed..052e8c5a796f779a91e8dfd4d92bb0fb85d6c673 100644 (file)
@@ -27,8 +27,8 @@ teorica concluderemo il capitolo con un primo esempio di applicazione.
 Iniziamo con una descrizione essenziale di cosa sono i \textit{socket} e di
 quali sono i concetti fondamentali da tenere presente quando si ha a che fare
 con essi.
-\index{socket|(}
 
+\index{socket!definizione|(}
 
 \subsection{I \textit{socket}}
 \label{sec:sock_socket_def}
@@ -101,7 +101,7 @@ gestire la perdita o il rimescolamento dei dati, se 
 dovranno essere opportunamente trattati, ecc.
 
 
-\section{La creazione di un \textit{socket}}
+\section{La creazione di un socket}
 \label{sec:sock_creation}
 
 Come accennato l'interfaccia dei socket è estremamente flessibile e permette
@@ -149,11 +149,12 @@ implicitamente dal tipo di socket, per cui di norma questo valore viene messo
 a zero (con l'eccezione dei \textit{raw socket}).
 
 Si noti che la creazione del socket si limita ad allocare le opportune
-strutture nel kernel (sostanzialmente una voce nella \textit{file table}) e
-non comporta nulla riguardo all'indicazione degli indirizzi remoti o locali
-attraverso i quali si vuole effettuare la comunicazione.
+strutture nel kernel (sostanzialmente una voce nella \itindex{file~table}
+\textit{file table}) e non comporta nulla riguardo all'indicazione degli
+indirizzi remoti o locali attraverso i quali si vuole effettuare la
+comunicazione.
 
-\subsection{Il dominio, o \textit{protocol family}}
+\subsection{Il dominio dei socket}
 \label{sec:sock_domain}
 
 Dati i tanti e diversi protocolli di comunicazione disponibili, esistono vari
@@ -161,9 +162,9 @@ tipi di socket, che vengono classificati raggruppandoli in quelli che si
 chiamano \textsl{domini}.  La scelta di un dominio equivale in sostanza alla
 scelta di una famiglia di protocolli, e viene effettuata attraverso
 l'argomento \param{domain} della funzione \func{socket}. Ciascun dominio ha un
-suo nome simbolico che convenzionalmente inizia con una costante che inizia
-per \texttt{PF\_}, iniziali di \textit{protocol family}, un altro nome con cui
-si indicano i domini.
+suo nome simbolico che convenzionalmente è indicato da una costante che inizia
+per \texttt{PF\_}, sigla che sta per \textit{protocol family}, altro nome con
+cui si indicano i domini.
 
 A ciascun tipo di dominio corrisponde un analogo nome simbolico, anch'esso
 associato ad una costante, che inizia invece per \texttt{AF\_} (da
@@ -184,7 +185,7 @@ i capi della comunicazione.
        \hline
        \const{PF\_UNSPEC}   & 0& Non specificato               &            \\
        \const{PF\_LOCAL}    & 1& Local communication           & unix(7)    \\
-       \const{PF\_UNIX}, \const{PF\_FILE}&1&                   &            \\
+       \const{PF\_UNIX}, \const{PF\_FILE}&1&Sinonimi di \const{PF\_LOCAL}& \\
        \const{PF\_INET}     & 2& IPv4 Internet protocols       & ip(7)      \\
        \const{PF\_AX25}     & 3& Amateur radio AX.25 protocol  &            \\
        \const{PF\_IPX}      & 4& IPX - Novell protocols        &            \\
@@ -200,6 +201,7 @@ i capi della comunicazione.
        \const{PF\_SECURITY} &14& Security callback pseudo AF   &            \\
        \const{PF\_KEY}      &15& PF\_KEY key management API    &            \\
        \const{PF\_NETLINK}  &16& Kernel user interface device  & netlink(7) \\
+       \const{PF\_ROUTE}    &16& Sinonimo di \const{PF\_NETLINK} emula BSD.&\\
        \const{PF\_PACKET}   &17& Low level packet interface    & packet(7)  \\
        \const{PF\_ASH}      &18& Ash                           &    \\
        \const{PF\_ECONET}   &19& Acorn Econet                  &    \\
@@ -208,10 +210,11 @@ i capi della comunicazione.
        \const{PF\_IRDA}     &23& IRDA socket                   &    \\
        \const{PF\_PPPOX}    &24& PPPoX socket                  &    \\
        \const{PF\_WANPIPE}  &25& Wanpipe API socket            &    \\
+       \const{PF\_LLC}      &26& Linux LLC                     &    \\
        \const{PF\_BLUETOOTH}&31& Bluetooth socket              &    \\
        \hline
   \end{tabular}
-  \caption{Famiglie di protocolli definiti in Linux.}
+  \caption{Famiglie di protocolli definiti in Linux.} 
   \label{tab:net_pf_names}
 \end{table}
 
@@ -243,7 +246,7 @@ di amministratore (cio
 \itindex{capabilities}\textit{capability} \const{CAP\_NET\_RAW}.
 
 
-\subsection{Il tipo, o stile}
+\subsection{Il tipo di socket}
 \label{sec:sock_type}
 
 La scelta di un dominio non comporta però la scelta dello stile di
@@ -253,13 +256,18 @@ socket permette di scegliere lo stile di comunicazione indicando il tipo di
 socket con l'argomento \param{type} di \func{socket}. Linux mette a
 disposizione vari tipi di socket (che corrispondono a quelli che il manuale
 della \acr{glibc} \cite{glibc} chiama \textit{styles}) identificati dalle
-seguenti costanti:
+seguenti costanti:\footnote{le pagine di manuale POSIX riportano solo i primi
+  tre tipi, Linux supporta anche gli altri, come si può verificare nel file
+  \texttt{include/linux/net.h} dei sorgenti del kernel.}
 
 \begin{basedescript}{\desclabelwidth{2.9cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{SOCK\_STREAM}] Provvede un canale di trasmissione dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati vengono ricevuti e trasmessi come un flusso continuo di
-  byte (da cui il nome \textit{stream}).
+  byte (da cui il nome \textit{stream}) e possono essere letti in blocchi di
+  dimensioni qualunque. Può supportare la trasmissione dei cosiddetti dati
+  urgenti (o \itindex{out-of-band} \textit{out-of-band}, vedi
+  sez.~\ref{sec:TCP_urgent_data}).
 \item[\const{SOCK\_DGRAM}] Viene usato per trasmettere pacchetti di dati
   (\textit{datagram}) di lunghezza massima prefissata, indirizzati
   singolarmente. Non esiste una connessione e la trasmissione è effettuata in
@@ -267,14 +275,15 @@ seguenti costanti:
 \item[\const{SOCK\_SEQPACKET}] Provvede un canale di trasmissione di dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati possono vengono trasmessi per pacchetti di dimensione
-  massima fissata, ed devono essere letti integralmente da ciascuna
-  chiamata a \func{read}.
+  massima fissata, e devono essere letti integralmente da ciascuna chiamata a
+  \func{read}.
 \item[\const{SOCK\_RAW}] Provvede l'accesso a basso livello ai protocolli di
   rete e alle varie interfacce. I normali programmi di comunicazione non
   devono usarlo, è riservato all'uso di sistema.
 \item[\const{SOCK\_RDM}] Provvede un canale di trasmissione di dati
   affidabile, ma in cui non è garantito l'ordine di arrivo dei pacchetti.
-\item[\const{SOCK\_PACKET}] Obsoleto, non deve essere usato.
+\item[\const{SOCK\_PACKET}] Obsoleto, non deve essere più usato.\footnote{e
+    pertanto non ne parleremo ulteriormente.}
 \end{basedescript}
 
 Si tenga presente che non tutte le combinazioni fra una famiglia di protocolli
@@ -292,10 +301,12 @@ elencati.
     \hline
     \hline
     &\const{SOCK\_STREAM} &\const{SOCK\_DGRAM}     &\const{SOCK\_RAW}& 
-      \const{SOCK\_PACKET}&\const{SOCK\_SEQPACKET} \\
+      \const{SOCK\_RDM}&\const{SOCK\_SEQPACKET} \\
      \hline
-    \const{PF\_UNIX}      &  si & si  &      &     &     \\
+    \const{PF\_LOCAL}     &  si & si  &      &     &     \\
      \hline
+%    \const{PF\_UNIX}&\multicolumn{5}{|l|}{sinonimo di \const{PF\_LOCAL}.}\\
+%     \hline
     \const{PF\_INET}      & TCP & UDP & IPv4 &     &     \\
      \hline
     \const{PF\_INET6}     & TCP & UDP & IPv6 &     &     \\
@@ -583,7 +594,7 @@ 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
-\itindex{capabilities}\textit{capability} \const{CAP\_NET\_BIND\_SERVICE}.
+\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
@@ -602,8 +613,11 @@ un'interfaccia specifica di Linux per inviare e ricevere pacchetti
 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
-assicura la portabilità su altre piattaforme, anche se con funzionalità
+fisico. In genere comunque si preferisce usare la libreria
+\file{pcap},\footnote{la libreria è mantenuta insieme al comando
+  \cmd{tcpdump}, informazioni e documentazione si possono trovare sul sito del
+  progetto \href{http://www.tcpdump.org/}{\texttt{http://www.tcpdump.org/}}.}
+che assicura la portabilità su altre piattaforme, anche se con funzionalità
 ridotte.
 
 Questi socket possono essere di tipo \const{SOCK\_RAW} o \const{SOCK\_DGRAM}.
@@ -691,9 +705,9 @@ macchina ricevente, \const{PACKET\_BROADCAST} per un pacchetto di
 \itindex{broadcast} \textit{broadcast}, \const{PACKET\_MULTICAST} per un
 pacchetto inviato ad un indirizzo fisico di \itindex{multicast}
 \textit{multicast}, \const{PACKET\_OTHERHOST} per un pacchetto inviato ad
-un'altra stazione (e ricevuto su un'interfaccia in modo promiscuo),
-\const{PACKET\_OUTGOING} per un pacchetto originato dalla propria macchina che
-torna indietro sul socket.
+un'altra stazione (e ricevuto su un'interfaccia in \index{modo~promiscuo} modo
+promiscuo), \const{PACKET\_OUTGOING} per un pacchetto originato dalla propria
+macchina che torna indietro sul socket.
 
 
 Si tenga presente infine che in fase di ricezione, anche se si richiede il
@@ -1008,7 +1022,7 @@ Il formato usato per gli indirizzi in formato di presentazione 
 \textit{dotted decimal} per IPv4 e quello descritto in
 sez.~\ref{sec:IP_ipv6_notation} per IPv6.
 
-\index{socket|)}
+\index{socket!definizione|)}
 
 
 
@@ -1040,4 +1054,5 @@ sez.~\ref{sec:IP_ipv6_notation} per IPv6.
 % LocalWords:  all'endianess htons ntohl ntohs long hostlong hostshort netlong
 % LocalWords:  sort netshort host inet aton ntoa dotted decimal const char src
 % LocalWords:  strptr struct dest addrptr INADDR NULL pton ntop presentation af
-% LocalWords:  numeric EAFNOSUPPORT size ENOSPC ENOAFSUPPORT ADDRSTRLEN
+% LocalWords:  numeric EAFNOSUPPORT size ENOSPC ENOAFSUPPORT ADDRSTRLEN ROUTE
+% LocalWords:  of tcpdump