Ancora indicizzazioni
[gapil.git] / sockctrl.tex
index 5906b98aee79993b55d3e311b8823044b9bedfb9..06ba55f78e96f75ffc7b0a9869a933b43f6a816a 100644 (file)
@@ -275,7 +275,7 @@ che si esegue una delle altre.
 
 Le impostazioni e lo stato del \textit{resolver} vengono mantenuti in una
 serie di variabili raggruppate nei campi di una apposita struttura \var{\_res}
-usata da tutte queste funzioni. Essa viene definita in \headfile{resolv.h} ed
+usata da tutte queste funzioni. Essa viene definita in \headfiled{resolv.h} ed
 è utilizzata internamente alle funzioni essendo definita come variabile
 globale; questo consente anche di accedervi direttamente all'interno di un
 qualunque programma, una volta che la sia opportunamente dichiarata come:
@@ -453,8 +453,8 @@ tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realtà anche una classe
 
 Come accennato le tipologie di dati che sono mantenibili su un server DNS sono
 diverse, ed a ciascuna di essa corrisponde un diverso tipo di \textit{resource
-  record}. L'elenco delle costanti\footnote{ripreso dai file di dichiarazione
-  \headfile{arpa/nameser.h} e \headfile{arpa/nameser\_compat.h}.} che
+  record}. L'elenco delle costantiripreso dai file di dichiarazione
+  \headfiled{arpa/nameser.h} e \headfiled{arpa/nameser\_compat.h}, che
 definiscono i valori che si possono usare per l'argomento \param{type} per
 specificare il tipo di \textit{resource record} da richiedere è riportato in
 tab.~\ref{tab:DNS_record_type}; le costanti (tolto il \texttt{T\_} iniziale)
@@ -650,7 +650,7 @@ definizione è riportata in fig.~\ref{fig:sock_hostent_struct}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/hostent.h}
   \end{minipage}
   \caption{La struttura \structd{hostent} per la risoluzione dei nomi a
@@ -1107,7 +1107,7 @@ memoria statica e che quindi la funzione non è rientrante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/servent.h}
   \end{minipage}
   \caption{La struttura \structd{servent} per la risoluzione dei nomi dei
@@ -1272,7 +1272,7 @@ strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/addrinfo.h}
   \end{minipage}
   \caption{La struttura \structd{addrinfo} usata nella nuova interfaccia POSIX
@@ -1280,15 +1280,16 @@ strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute.
   \label{fig:sock_addrinfo_struct}
 \end{figure}
 
-Come illustrato la struttura \struct{addrinfo}, la cui definizione\footnote{la
-  definizione è ripresa direttamente dal file \headfile{netdb.h} in questa
-  struttura viene dichiarata, la pagina di manuale riporta \type{size\_t} come
-  tipo di dato per il campo \var{ai\_addrlen}, qui viene usata quanto previsto
-  dallo standard POSIX, in cui viene utilizzato \type{socklen\_t}; i due tipi
-  di dati sono comunque equivalenti.} è riportata in
-fig.~\ref{fig:sock_addrinfo_struct}, viene usata sia in ingresso, per passare
-dei valori di controllo alla funzione, che in uscita, per ricevere i
-risultati. Il primo campo, \var{ai\_flags}, è una maschera binaria di bit che
+Come illustrato la struttura \struct{addrinfo}, la cui definizione è riportata
+in fig.~\ref{fig:sock_addrinfo_struct}, viene usata sia in ingresso, per
+passare dei valori di controllo alla funzione, che in uscita, per ricevere i
+risultati. La definizione è ripresa direttamente dal file \headfiled{netdb.h}
+in questa struttura viene dichiarata, la pagina di manuale riporta
+\type{size\_t} come tipo di dato per il campo \var{ai\_addrlen}, qui viene
+usata quanto previsto dallo standard POSIX, in cui viene utilizzato
+\type{socklen\_t}; i due tipi di dati sono comunque equivalenti.
+
+Il primo campo, \var{ai\_flags}, è una maschera binaria di bit che
 permettono di controllare le varie modalità di risoluzione degli indirizzi,
 che viene usato soltanto in ingresso. I tre campi successivi \var{ai\_family},
 \var{ai\_socktype}, e \var{ai\_protocol} contengono rispettivamente la
@@ -2054,8 +2055,7 @@ tab.~\ref{tab:sock_opt_socklevel}.
     \const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
                           Non invia attraverso un gateway.\\
     \const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& 
-                          Attiva o disattiva il \itindex{broadcast}
-                          \textit{broadcast}.\\ 
+                          Attiva o disattiva il \textit{broadcast}.\\ 
     \const{SO\_SNDBUF}   &$\bullet$&$\bullet$&         &\texttt{int}& 
                           Imposta dimensione del buffer di trasmissione.\\
     \const{SO\_RCVBUF}   &$\bullet$&$\bullet$&         &\texttt{int}& 
@@ -2093,7 +2093,7 @@ gestione dei socket, e pertanto il loro utilizzo sarà approfondito
 separatamente in sez.~\ref{sec:sock_options_main}. Quello che segue è quindi
 soltanto un elenco più dettagliato della breve descrizione di
 tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\const{SO\_KEEPALIVE}] questa opzione abilita un meccanismo di verifica
   della persistenza di una connessione associata al socket (ed è pertanto
@@ -2247,12 +2247,12 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   di routing del kernel. Prende per \param{optval} un intero usato come valore
   logico.
 
-\item[\const{SO\_BROADCAST}] questa opzione abilita il \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\_BROADCAST}] questa opzione abilita il \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 dimensione del buffer di
   trasmissione del socket. Prende per \param{optval} un intero indicante il
@@ -2358,7 +2358,7 @@ programmazione dei socket.  Per questo motivo faremo in questa sezione un
 approfondimento sul significato delle opzioni generiche più importanti.
 
 
-\index{costante!{SO\_KEEPALIVE}@{{\tt  {SO\_KEEPALIVE}}}|(}
+\constbeg{SO\_KEEPALIVE}
 \subsubsection{L'opzione \const{SO\_KEEPALIVE}}
 
 La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di
@@ -2460,11 +2460,11 @@ tutte le volte che un processo figlio viene eseguito in risposta ad una
 connessione verrà pertanto eseguita o meno la sezione (\texttt{\small 14--17})
 che esegue l'impostazione di \const{SO\_KEEPALIVE} sul socket connesso,
 attivando il relativo comportamento.
-\index{costante!{SO\_KEEPALIVE}@{{\tt  {SO\_KEEPALIVE}}}|)}
+\constend{SO\_KEEPALIVE}
 
 
 
-\index{costante!{SO\_REUSEADDR}@{{\tt  {SO\_REUSEADDR}}}|(}
+\constbeg{SO\_REUSEADDR}
 \subsubsection{L'opzione \const{SO\_REUSEADDR}}
 
 La seconda opzione da approfondire è \const{SO\_REUSEADDR}, che consente di
@@ -2637,12 +2637,11 @@ stesso indirizzo e porta solo se il programma che ha eseguito per primo
   primo programma a consentirlo, avendo usato fin dall'inizio
   \const{SO\_REUSEADDR}.}
 
-% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
-
+\constend{SO\_REUSEADDR}
 
-\index{costante!{SO\_REUSEADDR}@{{\tt  {SO\_REUSEADDR}}}|)}
+% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
 
-\index{costante!{SO\_LINGER}@{{\tt  {SO\_LINGER}}}|(}
+\constbeg{SO\_LINGER}
 \subsubsection{L'opzione \const{SO\_LINGER}}
 
 La terza opzione da approfondire è \const{SO\_LINGER}; essa, come il nome
@@ -2655,7 +2654,7 @@ dal kernel.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/linger.h}
   \end{minipage}
   \caption{La struttura \structd{linger} richiesta come valore dell'argomento
@@ -2686,7 +2685,7 @@ che termina immediatamente la connessione.
 Un esempio di questo comportamento si può abilitare nel nostro client del
 servizio \textit{echo} utilizzando l'opzione \texttt{-r}; riportiamo in
 fig.~\ref{fig:TCP_echo_sixth} la sezione di codice che permette di introdurre
-questa funzionalità,; al solito il codice completo è disponibile nei sorgenti
+questa funzionalità; al solito il codice completo è disponibile nei sorgenti
 allegati.
 
 \begin{figure}[!htbp] 
@@ -2728,7 +2727,7 @@ secondi\footnote{questa è l'unità di misura indicata da POSIX ed adottata da
   completamento della trasmissione dei dati sul buffer.}  pari al valore
 specificato in \var{l\_linger}.
 
-\index{costante!{SO\_LINGER}@{{\tt  {SO\_LINGER}}}|)}
+\constend{SO\_LINGER}
 
 
 
@@ -2743,13 +2742,13 @@ socket che usano il protocollo IPv4.\footnote{come per le precedenti opzioni
 livello da utilizzare è \const{SOL\_IP} (o l'equivalente \const{IPPROTO\_IP});
 si è riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_iplevel}.
 Le costanti indicanti le opzioni e tutte le altre costanti ad esse collegate
-sono definite in \headfile{netinet/ip.h}, ed accessibili includendo detto
+sono definite in \headfiled{netinet/ip.h}, ed accessibili includendo detto
 file.
 
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|c|c|c|l|l|}
+  \begin{tabular}[c]{|l|c|c|c|l|p{6cm}|}
     \hline
     \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
                     \textbf{Descrizione}\\
@@ -2802,7 +2801,7 @@ file.
 Le descrizioni riportate in tab.~\ref{tab:sock_opt_iplevel} sono estremamente
 succinte, una maggiore quantità di dettagli sulle varie opzioni è fornita nel
 seguente elenco:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
 
 \item[\const{IP\_OPTIONS}] l'opzione permette di impostare o leggere le
@@ -2830,7 +2829,7 @@ seguente elenco:
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/pktinfo.h}
   \end{minipage}
   \caption{La struttura \structd{pktinfo} usata dall'opzione
@@ -3059,7 +3058,7 @@ sez.~\ref{sec:net_sendmsg}).
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
@@ -3108,7 +3107,7 @@ riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcplevel},
 dove sono elencate le rispettive costanti da utilizzare come valore per
 l'argomento \param{optname}. Dette costanti e tutte le altre costanti e
 strutture collegate all'uso delle opzioni TCP sono definite in
-\headfile{netinet/tcp.h}, ed accessibili includendo detto file.\footnote{in
+\headfiled{netinet/tcp.h}, ed accessibili includendo detto file.\footnote{in
   realtà questo è il file usato dalle librerie; la definizione delle opzioni
   effettivamente supportate da Linux si trova nel file
   \texttt{include/linux/tcp.h} dei sorgenti del kernel, dal quale si sono
@@ -3161,8 +3160,7 @@ Le descrizioni delle varie opzioni riportate in
 tab.~\ref{tab:sock_opt_tcplevel} sono estremamente sintetiche ed indicative,
 la spiegazione del funzionamento delle singole opzioni con una maggiore
 quantità di dettagli è fornita nel seguente elenco:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
-
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\const{TCP\_NODELAY}] il protocollo TCP utilizza un meccanismo di
   bufferizzazione dei dati uscenti, per evitare la trasmissione di tanti
@@ -3346,7 +3344,7 @@ quantità di dettagli è fornita nel seguente elenco:
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/tcp_info.h}
   \end{minipage}
   \caption{La struttura \structd{tcp\_info} contenente le informazioni sul
@@ -3452,7 +3450,7 @@ quantità di dettagli è fornita nel seguente elenco:
   \begin{table}[!htb]
     \centering
     \footnotesize
-    \begin{tabular}[c]{|l|l|p{10cm}|}
+    \begin{tabular}[c]{|l|l|l|}
       \hline
       \textbf{Nome}&\textbf{Configurazione}&\textbf{Riferimento} \\
       \hline
@@ -3490,7 +3488,7 @@ ridotto di opzioni, riportate in tab.~\ref{tab:sock_opt_udplevel}; anche in
 questo caso per poterle utilizzare occorrerà impostare l'opportuno valore per
 l'argomento \param{level}, che è \const{SOL\_UDP} (o l'equivalente
 \const{IPPROTO\_UDP}).  Le costanti che identificano dette opzioni sono
-definite in \headfile{netinet/udp.h}, ed accessibili includendo detto
+definite in \headfiled{netinet/udp.h}, ed accessibili includendo detto
 file.\footnote{come per TCP, la definizione delle opzioni effettivamente
   supportate dal kernel si trova in realtà nel file
   \texttt{include/linux/udp.h}, dal quale si sono estratte le costanti di
@@ -3521,7 +3519,7 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente
 Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel}
 sono un semplice riferimento, una maggiore quantità di dettagli sulle
 caratteristiche delle opzioni citate è quello dell'elenco seguente:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\const{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga
   \const{TCP\_CORK} vista in precedenza per il protocollo TCP, e quando
@@ -3572,7 +3570,7 @@ come \textit{value result argument}, con queste operazioni il terzo argomento
 deve sempre essere passato come puntatore ad una variabile (o struttura)
 precedentemente allocata. Le costanti che identificano le operazioni sono le
 seguenti:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura
   \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
   socket, questa operazione può essere utilizzata per effettuare delle
@@ -3628,7 +3626,7 @@ permette di impostare e rilevare le funzionalità delle interfacce di rete.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/ifreq.h}
   \end{minipage}
   \caption{La struttura \structd{ifreq} utilizzata dalle \func{ioctl} per le
@@ -3643,7 +3641,7 @@ il primo campo della struttura, \var{ifr\_name} per specificare il nome
 dell'interfaccia su cui si vuole operare (ad esempio \texttt{eth0},
 \texttt{ppp0}, ecc.), e si inseriscono (o ricevono) i valori relativi alle
 diversa caratteristiche e funzionalità nel secondo campo, che come si può
-notare è definito come una \direct{union} proprio in quanto il suo significato
+notare è definito come una \dirct{union} proprio in quanto il suo significato
 varia a secondo dell'operazione scelta.
 
 Si tenga inoltre presente che alcune di queste operazioni (in particolare
@@ -3651,7 +3649,7 @@ quelle che modificano le caratteristiche dell'interfaccia) sono privilegiate e
 richiedono i privilegi di amministratore o la \textit{capability}
 \const{CAP\_NET\_ADMIN}, altrimenti si otterrà un errore di \errval{EPERM}.
 Le costanti che identificano le operazioni disponibili sono le seguenti:
-\begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{SIOCGIFNAME}] questa è l'unica operazione che usa il campo
   \var{ifr\_name} per restituire un risultato, tutte le altre lo utilizzano
   per indicare l'interfaccia sulla quale operare. L'operazione richiede che si
@@ -3687,7 +3685,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
     \hline
     \const{IFF\_UP}        & L'interfaccia è attiva.\\
     \const{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di
-                             \itindex{broadcast} \textit{broadcast} valido.\\
+                             \textit{broadcast} valido.\\
     \const{IFF\_DEBUG}     & È attivo il flag interno di debug.\\
     \const{IFF\_LOOPBACK}  & L'interfaccia è una interfaccia di
                              \textit{loopback}.\\ 
@@ -3764,8 +3762,8 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
   privilegiata.
 
 \item[\const{SIOCSIFHWBROADCAST}] imposta l'indirizzo \textit{broadcast}
-  \itindex{broadcast} hardware dell'interfaccia al valore specificato dal
-  campo \var{ifr\_hwaddr}. L'operazione è privilegiata.
+  hardware dell'interfaccia al valore specificato dal campo
+  \var{ifr\_hwaddr}. L'operazione è privilegiata.
 
 \item[\const{SIOCGIFMAP}] legge alcuni parametri hardware (memoria, interrupt,
   canali di DMA) del driver dell'interfaccia specificata, restituendo i
@@ -3775,7 +3773,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti:
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/ifmap.h}
   \end{minipage}
   \caption{La struttura \structd{ifmap} utilizzata per leggere ed impostare i
@@ -3831,7 +3829,7 @@ fig.~\ref{fig:netdevice_ifconf_struct}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{\textwidth}
+  \begin{minipage}[c]{0.80\textwidth}
     \includestruct{listati/ifconf.h}
   \end{minipage}
   \caption{La struttura \structd{ifconf}.}
@@ -3845,7 +3843,7 @@ questo buffer deve essere specificata nel campo \var{ifc\_len} di
 \var{ifc\_req}. Qualora il buffer sia stato allocato come una stringa, il suo
 indirizzo potrà essere fornito usando il campo \var{ifc\_buf}.\footnote{si
   noti che l'indirizzo del buffer è definito in \struct{ifconf} con una
-  \direct{union}, questo consente di utilizzare una delle due forme a piacere.}
+  \dirct{union}, questo consente di utilizzare una delle due forme a piacere.}
 
 La funzione restituisce nel buffer indicato una serie di strutture
 \struct{ifreq} contenenti nel campo \var{ifr\_name} il nome dell'interfaccia e
@@ -3931,7 +3929,7 @@ come possibile valore per il secondo argomento della funzione le costanti
 illustrate nell'elenco seguente; il terzo argomento della funzione, gestito
 come \textit{value result argument}, deve essere sempre il puntatore ad una
 variabile di tipo \ctyp{int}:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{SIOCINQ}] restituisce la quantità di dati non ancora letti
   presenti nel buffer di ricezione; il socket non deve essere in stato
   \texttt{LISTEN}, altrimenti si avrà un errore di \errval{EINVAL}.
@@ -3964,7 +3962,7 @@ dalla relativa pagina di manuale accessibile con \texttt{man 7 udp}, sono
 quelle indicate dalle costanti del seguente elenco; come per i socket TCP il
 terzo argomento viene gestito come \textit{value result argument} e deve
 essere un puntatore ad una variabile di tipo \ctyp{int}:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\const{FIONREAD}] restituisce la dimensione in byte del primo pacchetto
   in attesa di ricezione, o 0 qualora non ci sia nessun pacchetto.
 \item[\const{TIOCOUTQ}] restituisce il numero di byte presenti nella coda di