Sistemata la parte della allocazione della memoria, le variadic
[gapil.git] / sockctrl.tex
index 9e09813da8c0ea659e9158ff3907ed559a4028a6..29df12ba216f41c4858017ee92d21703f07c280d 100644 (file)
@@ -48,9 +48,8 @@ server che forniscono su internet questo servizio, mentre nel nostro caso
 affronteremo la problematica dal lato client, di un qualunque programma che
 necessita di compiere questa operazione.
 
-\begin{figure}[htb]
-  \centering
-  \includegraphics[width=11cm]{img/resolver}
+\begin{figure}[!htb]
+  \centering \includegraphics[width=11cm]{img/resolver}
   \caption{Schema di funzionamento delle funzioni del \textit{resolver}.}
   \label{fig:sock_resolver_schema}
 \end{figure}
@@ -650,7 +649,7 @@ definizione è riportata in fig.~\ref{fig:sock_hostent_struct}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/hostent.h}
   \end{minipage}
   \caption{La struttura \structd{hostent} per la risoluzione dei nomi a
@@ -716,9 +715,9 @@ che dovrà essere utilizzata nei risultati restituiti dalla funzione. Per tutto
 il resto la funzione è identica a \func{gethostbyname}, ed identici sono i
 suoi risultati.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/mygethost.c}
   \end{minipage}
   \normalsize
@@ -887,7 +886,7 @@ usare la funzione \funcd{gethostbyaddr}, il cui prototipo è:
   Richiede la risoluzione inversa di un indirizzo IP.
        
   \bodydesc{La funzione restituisce l'indirizzo ad una struttura
-    \struct{hostent} in caso di successo ed \const{NULL} in caso di errore.}
+    \struct{hostent} in caso di successo ed \val{NULL} in caso di errore.}
 \end{functions}
 
 In questo caso l'argomento \param{addr} dovrà essere il puntatore ad una
@@ -939,7 +938,7 @@ cui prototipi sono:
   indirizzo IP.
        
   \bodydesc{Entrambe le funzioni restituiscono l'indirizzo ad una struttura
-    \struct{hostent} in caso di successo ed \const{NULL} in caso di errore.}
+    \struct{hostent} in caso di successo ed \val{NULL} in caso di errore.}
 \end{functions}
 
 Entrambe le funzioni supportano esplicitamente la scelta di una famiglia di
@@ -1077,7 +1076,7 @@ il nome e viceversa; i loro prototipi sono:
   Risolvono il nome di un servizio nel rispettivo numero di porta e viceversa.
        
   \bodydesc{Ritornano il puntatore ad una struttura \struct{servent} con i
-    risultati in caso di successo, o \const{NULL} in caso di errore.}
+    risultati in caso di successo, o \val{NULL} in caso di errore.}
 \end{functions}
 
 Entrambe le funzioni prendono come ultimo argomento una stringa \param{proto}
@@ -1107,7 +1106,7 @@ quindi la funzione non è \index{funzioni!rientranti} rientrante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/servent.h}
   \end{minipage}
   \caption{La struttura \structd{servent} per la risoluzione dei nomi dei
@@ -1150,7 +1149,7 @@ dei servizi avremo allora le tre funzioni \funcd{setservent},
 
   \bodydesc{Le due funzioni \func{setservent} e \func{endservent} non
     restituiscono nulla, \func{getservent} restituisce il puntatore ad una
-    struttura \struct{servent} in caso di successo e \const{NULL} in caso di
+    struttura \struct{servent} in caso di successo e \val{NULL} in caso di
     errore o fine del file.}
 \end{functions}
 
@@ -1250,7 +1249,7 @@ forma \textit{dotted-decimal} per IPv4 o in formato esadecimale per IPv6.  Si
 può anche specificare il nome di una rete invece che di una singola macchina.
 Il secondo argomento, \param{service}, specifica invece il nome del servizio
 che si intende risolvere. Per uno dei due argomenti si può anche usare il
-valore \const{NULL}, nel qual caso la risoluzione verrà effettuata soltanto
+valore \val{NULL}, nel qual caso la risoluzione verrà effettuata soltanto
 sulla base del valore dell'altro.
 
 Il terzo argomento, \param{hints}, deve essere invece un puntatore ad una
@@ -1273,7 +1272,7 @@ tipo \struct{addrinfo} contenenti tutte le informazioni ottenute.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/addrinfo.h}
   \end{minipage}
   \caption{La struttura \structd{addrinfo} usata nella nuova interfaccia POSIX
@@ -1308,7 +1307,7 @@ risultato, \var{ai\_next} è un puntatore alla successiva struttura
 \struct{addrinfo} della lista.
 
 Ovviamente non è necessario dare dei suggerimenti in ingresso, ed usando
-\const{NULL} come valore per l'argomento \param{hints} si possono compiere
+\val{NULL} come valore per l'argomento \param{hints} si possono compiere
 ricerche generiche.  Se però si specifica un valore non nullo questo deve
 puntare ad una struttura \struct{addrinfo} precedentemente allocata nella
 quale siano stati opportunamente impostati i valori dei campi
@@ -1344,7 +1343,7 @@ nella selezione.
     \const{AI\_PASSIVE}    & Viene utilizzato per ottenere un indirizzo in
                              formato adatto per una successiva chiamata a
                              \func{bind}. Se specificato quando si è usato 
-                             \const{NULL} come valore per \param{node} gli
+                             \val{NULL} come valore per \param{node} gli
                              indirizzi restituiti saranno inizializzati al
                              valore generico (\const{INADDR\_ANY} per IPv4 e
                              \const{IN6ADDR\_ANY\_INIT} per IPv6), altrimenti
@@ -1411,7 +1410,7 @@ corrispondente è riportato tramite \var{errno}.
                            validi. \\
     \const{EAI\_NONAME}  & Il nome a dominio o il servizio non sono noti,
                            viene usato questo errore anche quando si specifica
-                           il valore \const{NULL} per entrambi gli argomenti
+                           il valore \val{NULL} per entrambi gli argomenti
                            \param{node} e \param{service}. \\
     \const{EAI\_SERVICE} & Il servizio richiesto non è disponibile per il tipo
                            di socket richiesto, anche se può esistere per
@@ -1490,9 +1489,9 @@ dell'argomento \var{hints} per restringere le ricerche su protocolli, tipi di
 socket o famiglie di indirizzi, è disponibile nel file \texttt{mygetaddr.c}
 dei sorgenti allegati alla guida.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/mygetaddr.c}
   \end{minipage}
   \normalsize
@@ -1630,7 +1629,7 @@ I risultati della funzione saranno restituiti nelle due stringhe puntate da
 \param{host} e \param{serv}, che dovranno essere state precedentemente
 allocate per una lunghezza massima che deve essere specificata con gli altri
 due argomenti \param{hostlen} e \param{servlen}. Si può, quando non si è
-interessati ad uno dei due, passare il valore \const{NULL} come argomento,
+interessati ad uno dei due, passare il valore \val{NULL} come argomento,
 così che la corrispondente informazione non verrà richiesta. Infine l'ultimo
 argomento \param{flags} è una maschera binaria i cui bit consentono di
 impostare le modalità con cui viene eseguita la ricerca, e deve essere
@@ -1694,9 +1693,9 @@ fig.~\ref{fig:sockconn_code}, il codice completo è nel file \file{SockUtil.c}
 dei sorgenti allegati alla guida, che contiene varie funzioni di utilità per
 l'uso dei socket.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/sockconn.c}
   \end{minipage}
   \normalsize
@@ -1755,9 +1754,9 @@ ritornata contiene indirizzi IPv6 o IPv4, in quanto si fa uso direttamente dei
 dati relativi alle strutture degli indirizzi di \struct{addrinfo} che sono
 \textsl{opachi} rispetto all'uso della funzione \func{connect}.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/TCP_echo_fifth.c}
   \end{minipage}
   \normalsize
@@ -1776,9 +1775,9 @@ codice completo è nel file \file{TCP\_echo\_fifth.c} dei sorgenti allegati)
 consente di utilizzare come argomento del programma un nome a dominio al posto
 dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/sockbind.c}
   \end{minipage}
   \normalsize
@@ -1802,7 +1801,7 @@ indirizzo specifico come argomento di \func{bind}, che consente di porre il
 server in ascolto su uno solo dei possibili diversi indirizzi presenti su di
 una macchina.  Se non si vuole che la funzione esegua \func{bind} su un
 indirizzo specifico, ma utilizzi l'indirizzo generico, occorrerà avere cura di
-passare un valore \const{NULL} come valore per l'argomento \var{host}; l'uso
+passare un valore \val{NULL} come valore per l'argomento \var{host}; l'uso
 del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella
 rispettiva struttura degli indirizzi.
 
@@ -1824,9 +1823,9 @@ ha successo il programma deve uscire immediatamente prima di essere posto in
 background, e può quindi scrivere gli errori direttamente sullo standard
 error.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/TCP_echod_third.c}
   \end{minipage}
   \normalsize
@@ -1948,7 +1947,7 @@ Il quarto argomento, \param{optval} è un puntatore ad una zona di memoria che
 contiene i dati che specificano il valore dell'opzione che si vuole passare al
 socket, mentre l'ultimo argomento \param{optlen},\footnote{questo argomento è
   in realtà sempre di tipo \ctyp{int}, come era nelle \acr{libc4} e
-  \acr{libc5}; l'uso di \ctyp{socklen\_t} è stato introdotto da POSIX (valgono
+  \acr{libc5}; l'uso di \type{socklen\_t} è stato introdotto da POSIX (valgono
   le stesse considerazioni per l'uso di questo tipo di dato fatte in
   sez.~\ref{sec:TCP_func_accept}) ed adottato dalle \acr{glibc}.} è la
 dimensione in byte dei dati presenti all'indirizzo indicato da \param{optval}.
@@ -1960,7 +1959,7 @@ La gran parte delle opzioni utilizzano per \param{optval} un valore intero, se
 poi l'opzione esprime una condizione logica, il valore è sempre un intero, ma
 si dovrà usare un valore non nullo per abilitarla ed un valore nullo per
 disabilitarla.  Se invece l'opzione non prevede di dover ricevere nessun tipo
-di valore si deve impostare \param{optval} a \const{NULL}. Un piccolo numero
+di valore si deve impostare \param{optval} a \val{NULL}. Un piccolo numero
 di opzioni però usano dei tipi di dati peculiari, è questo il motivo per cui
 \param{optval} è stato definito come puntatore generico.
 
@@ -2416,9 +2415,9 @@ attesa di dati in ingresso su una connessione che non arriveranno mai o perché
 il client sull'altro capo non è più attivo o perché non è più in grado di
 comunicare con il server via rete.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/TCP_echod_fourth.c}
   \end{minipage}
   \normalsize
@@ -2514,9 +2513,9 @@ completo della funzione si trova, insieme alle altre funzioni di servizio dei
 socket, all'interno del file \texttt{SockUtils.c} dei sorgenti allegati alla
 guida.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/sockbindopt.c}
   \end{minipage}
   \normalsize
@@ -2548,9 +2547,9 @@ riportata in fig.~\ref{fig:TCP_echod_fifth}) se ne potrà impostare ad 1 il
 valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a
 \func{setsockopt} attiverà l'opzione \const{SO\_REUSEADDR}.
 
-\begin{figure}[!htb] 
+\begin{figure}[!htbp
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/TCP_echod_fifth.c}
   \end{minipage}
   \normalsize
@@ -2649,7 +2648,7 @@ dal kernel.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/linger.h}
   \end{minipage}
   \caption{La struttura \structd{linger} richiesta come valore dell'argomento
@@ -2683,9 +2682,9 @@ fig.~\ref{fig:TCP_echo_sixth} la sezione di codice che permette di introdurre
 questa funzionalità,; al solito il codice completo è disponibile nei sorgenti
 allegati.
 
-\begin{figure}[!htb] 
+\begin{figure}[!htbp
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/TCP_echo_sixth.c}
   \end{minipage}
   \normalsize
@@ -2825,7 +2824,7 @@ seguente elenco:
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/pktinfo.h}
   \end{minipage}
   \caption{La struttura \structd{pktinfo} usata dall'opzione
@@ -3056,7 +3055,7 @@ sez.~\ref{sec:net_sendmsg}).
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
@@ -3339,7 +3338,7 @@ quantità di dettagli è fornita nel seguente elenco:
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/tcp_info.h}
   \end{minipage}
   \caption{La struttura \structd{tcp\_info} contenente le informazioni sul
@@ -3362,9 +3361,9 @@ quantità di dettagli è fornita nel seguente elenco:
   in fig.~\ref{fig:is_closing}, in cui si utilizza il valore del campo
   \var{tcpi\_state} di \struct{tcp\_info} per controllare lo stato del socket.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/is_closing.c}
   \end{minipage}
   \caption{Codice della funzione \texttt{is\_closing.c}, che controlla lo stato
@@ -3582,8 +3581,8 @@ identificano le operazioni sono le seguenti:
     accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
-  \textit{process group} a cui inviare i segnali \const{SIGIO} e
-  \const{SIGURG} quando viene completata una operazione di I/O asincrono o
+  \textit{process group} a cui inviare i segnali \signal{SIGIO} e
+  \signal{SIGURG} quando viene completata una operazione di I/O asincrono o
   arrivano dei dati urgenti \itindex{out-of-band} (\texttt{out-of-band}). Il
   terzo argomento deve essere un puntatore ad una variabile di tipo
   \type{pid\_t}; un valore positivo indica direttamente il \acr{pid} del
@@ -3594,15 +3593,15 @@ identificano le operazioni sono le seguenti:
 
 \item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
   relativamente all'eventuale processo o \itindex{process~group}
-  \textit{process group} cui devono essere inviati i segnali \const{SIGIO} e
-  \const{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
+  \textit{process group} cui devono essere inviati i segnali \signal{SIGIO} e
+  \signal{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
   puntatore ad una variabile di tipo \type{pid\_t}, con lo stesso significato.
   Qualora non sia presente nessuna impostazione verrà restituito un valore
   nullo.
 
 \item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
   socket. Questo significa (vedi sez.~\ref{sec:file_asyncronous_operation})
-  che verrà inviato il segnale di \const{SIGIO} (o quanto impostato con
+  che verrà inviato il segnale di \signal{SIGIO} (o quanto impostato con
   \const{F\_SETSIG}, vedi sez.~\ref{sec:file_fcntl}) in caso di eventi di I/O
   sul socket.
 \end{basedescript}
@@ -3629,7 +3628,7 @@ permette di impostare e rilevare le funzionalità delle interfacce di rete.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/ifreq.h}
   \end{minipage}
   \caption{La struttura \structd{ifreq} utilizzata dalle \func{ioctl} per le
@@ -3644,7 +3643,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 \ctyp{union} proprio in quanto il suo significato
+notare è definito come una \direct{union} proprio in quanto il suo significato
 varia a secondo dell'operazione scelta.
 
 Si tenga inoltre presente che alcune di queste operazioni (in particolare
@@ -3778,7 +3777,7 @@ sono le seguenti:
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/ifmap.h}
   \end{minipage}
   \caption{La struttura \structd{ifmap} utilizzata per leggere ed impostare i
@@ -3830,7 +3829,7 @@ fig.~\ref{fig:netdevice_ifconf_struct}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\textwidth}
     \includestruct{listati/ifconf.h}
   \end{minipage}
   \caption{La struttura \structd{ifconf}.}
@@ -3844,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
-  \ctyp{union}, questo consente di utilizzare una delle due forme a piacere.}
+  \direct{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
@@ -3864,9 +3863,9 @@ probabilmente\footnote{probabilmente perché si potrebbe essere nella
   condizione in cui sono stati usati esattamente quel numero di byte.} avuta
 una situazione di troncamento dei dati.
 
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
   \footnotesize \centering
-  \begin{minipage}[c]{15cm}
+  \begin{minipage}[c]{\codesamplewidth}
     \includecodesample{listati/iflist.c}
   \end{minipage}
   \caption{Il corpo principale del programma \texttt{iflist.c}.}
@@ -4190,9 +4189,9 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
   procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery}
   fallisce; dato che questo può avvenire a causa di router\footnote{ad
     esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato
-    anche in sez.~1.4.4 di \cite{FwGL}.} o interfacce\footnote{ad esempio se i
+    anche in sez.~3.4.4 di \cite{SGL}.} o interfacce\footnote{ad esempio se i
     due capi di un collegamento \textit{point-to-point} non si accordano sulla
-    stessa MTU.}  mal configurate è opportuno correggere le configurazioni,
+    stessa MTU.}  mal configurati è opportuno correggere le configurazioni,
   perché disabilitare globalmente il procedimento con questo parametro ha
   pesanti ripercussioni in termini di prestazioni di rete.