Correzioni di impaginazione e indicizzazione
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 16 Oct 2007 17:40:22 +0000 (17:40 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 16 Oct 2007 17:40:22 +0000 (17:40 +0000)
listati/mygethost.c
sockctrl.tex

index 0378058f686fe4c03c61512046416f3350898b37..6587e6b1a1505466f5cb10abaa0bc10a058fc0d4 100644 (file)
@@ -9,10 +9,14 @@ int main(int argc, char *argv[])
     char *addr;
     char buffer[INET6_ADDRSTRLEN];
     ...
+    /*
+     * Main Body
+     */
     if ((argc - optind) != 1) {
        printf("Wrong number of arguments %d\n", argc - optind);
         usage();
     }
+    /* get resolution */
     data = gethostbyname(argv[1]);
     if (data == NULL) {
        herror("Errore di risoluzione");
index 529d0d365b5be0b32e16891360950c075f273c99..dc300a8fccc6a2c46276485afa94d3b2e94bd108 100644 (file)
@@ -735,41 +735,41 @@ trattamento delle opzioni ed una funzione per stampare un messaggio di aiuto,
 è nel file \texttt{mygethost.c} dei sorgenti allegati alla guida.
 
 Il programma richiede un solo argomento che specifichi il nome da cercare,
-senza il quale (\texttt{\small 12--15}) esce con un errore. Dopo di che
-(\texttt{\small 16}) si limita a chiamare \func{gethostbyname}, ricevendo il
-risultato nel puntatore \var{data}. Questo (\texttt{\small 17--20}) viene
+senza il quale (\texttt{\small 15--18}) esce con un errore. Dopo di che
+(\texttt{\small 20}) si limita a chiamare \func{gethostbyname}, ricevendo il
+risultato nel puntatore \var{data}. Questo (\texttt{\small 21--24}) viene
 controllato per rilevare eventuali errori, nel qual caso il programma esce
 dopo aver stampato un messaggio con \func{herror}. 
 
-Se invece la risoluzione è andata a buon fine si inizia (\texttt{\small 21})
-con lo stampare il nome canonico, dopo di che (\texttt{\small 22--26}) si
-stampano eventuali altri nomi. Per questo prima (\texttt{\small 22}) si prende
+Se invece la risoluzione è andata a buon fine si inizia (\texttt{\small 25})
+con lo stampare il nome canonico, dopo di che (\texttt{\small 26--30}) si
+stampano eventuali altri nomi. Per questo prima (\texttt{\small 26}) si prende
 il puntatore alla cima della lista che contiene i nomi e poi (\texttt{\small
-  23--26}) si esegue un ciclo che sarà ripetuto fin tanto che nella lista si
+  27--30}) si esegue un ciclo che sarà ripetuto fin tanto che nella lista si
 troveranno dei puntatori validi\footnote{si ricordi che la lista viene
   terminata da un puntatore nullo.} per le stringhe dei nomi; prima
-(\texttt{\small 24}) si stamperà la stringa e poi (\texttt{\small 25}) si
+(\texttt{\small 28}) si stamperà la stringa e poi (\texttt{\small 29}) si
 provvederà ad incrementare il puntatore per passare al successivo elemento
 della lista.
 
 Una volta stampati i nomi si passerà a stampare gli indirizzi, il primo passo
-(\texttt{\small 27--34}) è allora quello di riconoscere il tipo di indirizzo
+(\texttt{\small 31--38}) è allora quello di riconoscere il tipo di indirizzo
 sulla base del valore del campo \var{h\_addrtype}, stampandolo a video. Si è
 anche previsto di stampare un errore nel caso (che non dovrebbe mai accadere)
 di un indirizzo non valido.
 
-Infine (\texttt{\small 35--40}) si stamperanno i valori degli indirizzi, di
-nuovo (\texttt{\small 35}) si inizializzerà un puntatore alla cima della lista
+Infine (\texttt{\small 39--44}) si stamperanno i valori degli indirizzi, di
+nuovo (\texttt{\small 39}) si inizializzerà un puntatore alla cima della lista
 e si eseguirà un ciclo fintanto che questo punterà ad indirizzi validi in
 maniera analoga a quanto fatto in precedenza per i nomi a dominio. Si noti
 come, essendo il campo \var{h\_addr\_list} un puntatore ad strutture di
 indirizzi generiche, questo sia ancora di tipo \texttt{char **} e si possa
 riutilizzare lo stesso puntatore usato per i nomi.
 
-Per ciascun indirizzo valido si provvederà (\texttt{\small 37}) ad una
+Per ciascun indirizzo valido si provvederà (\texttt{\small 41}) ad una
 conversione con la funzione \func{inet\_ntop} (vedi
 sez.~\ref{sec:sock_addr_func}) passandole gli opportuni argomenti, questa
-restituirà la stringa da stampare (\texttt{\small 38}) con il valore
+restituirà la stringa da stampare (\texttt{\small 42}) con il valore
 dell'indirizzo in \var{buffer}, che si è avuto la cura di dichiarare
 inizialmente (\texttt{\small 10}) con dimensioni adeguate; dato che la
 funzione è in grado di tenere conto automaticamente del tipo di indirizzo non
@@ -962,7 +962,7 @@ tab.~\ref{tab:sock_getipnodebyname_flags}.
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|p{10cm}|}
+  \begin{tabular}[c]{|l|p{8cm}|}
     \hline
     \textbf{Costante} & \textbf{Significato} \\
     \hline
@@ -1011,14 +1011,15 @@ funzione \funcd{freehostent}, il cui prototipo 
 La funzione permette di disallocare una struttura \var{hostent}
 precedentemente allocata in una chiamata di \func{getipnodebyname} o
 \func{getipnodebyaddr}, e prende come argomento l'indirizzo restituito da una
-di queste funzioni.
+di queste funzioni. 
 
 Infine per concludere la nostra panoramica sulle funzioni di risoluzione dei
 nomi dobbiamo citare le funzioni che permettono di interrogare gli altri
 servizi di risoluzione dei nomi illustrati in sez.~\ref{sec:sock_resolver}; in
 generale infatti ci sono una serie di funzioni nella forma
-\texttt{getXXXbyname} e \texttt{getXXXbyaddr} per ciascuna delle informazioni
-di rete mantenute dal \textit{Name Service Switch} che permettono
+\texttt{getXXXbyname} e \texttt{getXXXbyaddr} (dove \texttt{XXX} indica il
+servizio) per ciascuna delle informazioni di rete mantenute dal
+\itindex{Name~Service~Switch} \textit{Name Service Switch} che permettono
 rispettivamente di trovare una corrispondenza cercando per nome o per numero.
 
 L'elenco di queste funzioni è riportato nelle colonne finali di
@@ -1026,10 +1027,10 @@ tab.~\ref{tab:name_resolution_functions}, dove le si sono suddivise rispetto
 al tipo di informazione che forniscono (riportato in prima colonna). Nella
 tabella si è anche riportato il file su cui vengono ordinariamente mantenute
 queste informazioni, che però può essere sostituito da un qualunque supporto
-interno al \textit{Name Service Switch} (anche se usualmente questo avviene
-solo per la risoluzione degli indirizzi). Ciascuna funzione fa riferimento ad
-una sua apposita struttura che contiene i relativi dati, riportata in terza
-colonna.
+interno al \itindex{Name~Service~Switch} \textit{Name Service Switch} (anche
+se usualmente questo avviene solo per la risoluzione degli indirizzi).
+Ciascuna funzione fa riferimento ad una sua apposita struttura che contiene i
+relativi dati, riportata in terza colonna.
 
 \begin{table}[!htb]
   \centering
@@ -1051,22 +1052,23 @@ colonna.
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
-    \textit{Name Service Switch}.}
+    \itindex{Name~Service~Switch} \textit{Name Service Switch}.}
   \label{tab:name_resolution_functions}
 \end{table}
 
 Delle funzioni di tab.~\ref{tab:name_resolution_functions} abbiamo trattato
 finora soltanto quelle relative alla risoluzione dei nomi, dato che sono le
 più usate, e prevedono praticamente da sempre la necessità di rivolgersi ad
-una entità esterna; per le altre invece, estensioni fornite dal NSS a parte,
-si fa sempre riferimento ai dati mantenuti nei rispettivi file. 
+una entità esterna; per le altre invece, estensioni fornite dal
+\itindex{Name~Service~Switch} NSS a parte, si fa sempre riferimento ai dati
+mantenuti nei rispettivi file.
 
 Dopo la risoluzione dei nomi a dominio una delle ricerche più comuni è quella
-sui nomi dei servizi noti (cioè \texttt{http}, \texttt{smtp}, ecc.) da
-associare alle rispettive porte, le due funzioni da utilizzare per questo sono
-\funcd{getservbyname} e \funcd{getservbyaddr}, che permettono rispettivamente
-di ottenere il numero di porta associato ad un servizio dato il nome e
-viceversa; i loro prototipi sono:
+sui nomi dei servizi di rete più comuni (cioè \texttt{http}, \texttt{smtp},
+ecc.) da associare alle rispettive porte. Le due funzioni da utilizzare per
+questo sono \funcd{getservbyname} e \funcd{getservbyaddr}, che permettono
+rispettivamente di ottenere il numero di porta associato ad un servizio dato
+il nome e viceversa; i loro prototipi sono:
 \begin{functions}
   \headdecl{netdb.h} 
   \funcdecl{struct servent *getservbyname(const char *name, const char *proto)}
@@ -1093,14 +1095,15 @@ qualsiasi.
 Il primo argomento è il nome del servizio per \func{getservbyname},
 specificato tramite la stringa \param{name}, mentre \func{getservbyport}
 richiede il numero di porta in \param{port}. Entrambe le funzioni eseguono una
-ricerca sul file \conffile{/etc/services}\footnote{il \textit{Name Service
-    Switch} astrae il concetto a qualunque supporto su cui si possano
-  mantenere i suddetti dati. } ed estraggono i dati dalla prima riga che
-corrisponde agli argomenti specificati; se la risoluzione ha successo viene
-restituito un puntatore ad una apposita struttura \struct{servent} contenente
-tutti i risultati), altrimenti viene restituito un puntatore nullo.  Si tenga
-presente che anche in questo caso i dati vengono mantenuti in una area di
-memoria statica e che quindi la funzione non è rientrante.
+ricerca sul file \conffile{/etc/services}\footnote{il
+  \itindex{Name~Service~Switch} \textit{Name Service Switch} astrae il
+  concetto a qualunque supporto su cui si possano mantenere i suddetti dati.}
+ed estraggono i dati dalla prima riga che corrisponde agli argomenti
+specificati; se la risoluzione ha successo viene restituito un puntatore ad
+una apposita struttura \struct{servent} contenente tutti i risultati,
+altrimenti viene restituito un puntatore nullo.  Si tenga presente che anche
+in questo caso i dati vengono mantenuti in una area di memoria statica e che
+quindi la funzione non è rientrante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1122,18 +1125,18 @@ contiene il numero di porta e \var{s\_proto} il nome del protocollo.
 Come riportato in tab.~\ref{tab:name_resolution_functions} ci sono analoghe
 funzioni per la risoluzione del nome dei protocolli e delle reti; non staremo
 a descriverle nei dettagli, in quanto il loro uso è molto limitato, esse
-comunque hanno una struttura del tutto analoga alle precedenti, e tutti i
-dettagli relativi al loro funzionamento possono essere trovati nelle
-rispettive pagine di manuale.
+comunque utilizzano una loro struttura dedicata del tutto analoga alle
+precedenti: tutti i dettagli relativi al loro funzionamento possono essere
+trovati nelle rispettive pagine di manuale.
 
 Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono
-una lettura sequenziale delle informazioni mantenute nel \textit{Name Service
-  Switch} (in sostanza permettono di leggere i file contenenti le informazioni
-riga per riga), che sono analoghe a quelle elencate in
-tab.~\ref{tab:sys_passwd_func} per le informazioni relative ai dati degli
-utenti e dei gruppi.  Nel caso specifico dei servizi avremo allora le tre
-funzioni \funcd{setservent}, \funcd{getservent} e \funcd{endservent} i cui
-prototipi sono:
+una lettura sequenziale delle informazioni mantenute nel
+\itindex{Name~Service~Switch} \textit{Name Service Switch} (in sostanza
+permettono di leggere i file contenenti le informazioni riga per riga), che
+sono analoghe a quelle elencate in tab.~\ref{tab:sys_passwd_func} per le
+informazioni relative ai dati degli utenti e dei gruppi. Nel caso specifico
+dei servizi avremo allora le tre funzioni \funcd{setservent},
+\funcd{getservent} e \funcd{endservent} i cui prototipi sono:
 \begin{functions}
   \headdecl{netdb.h} 
   \funcdecl{void setservent(int stayopen)} 
@@ -1189,8 +1192,8 @@ rimandando alle rispettive pagine di manuale.
     protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\ 
     \hline
   \end{tabular}
-  \caption{Funzioni lettura sequenziale dei dati del \textit{Name Service
-      Switch}.} 
+  \caption{Funzioni lettura sequenziale dei dati del
+    \itindex{Name~Service~Switch} \textit{Name Service Switch}.} 
   \label{tab:name_sequential_read}
 \end{table}
 
@@ -1330,14 +1333,6 @@ rispettivo protocollo di trasporto (i cui valori possibili sono riportati in
 relativi a UDP e TCP, o il valore nullo che indica di ignorare questo campo
 nella selezione.
 
-Infine l'ultimo campo è \var{ai\_flags}; che deve essere impostato come una
-maschera binaria; i bit di questa variabile infatti vengono usati per dare
-delle indicazioni sul tipo di risoluzione voluta, ed hanno valori analoghi a
-quelli visti in sez.~\ref{sec:sock_name_services} per \func{getipnodebyname};
-il valore di \var{ai\_flags} può essere impostata con un OR aritmetico delle
-costanti di tab.~\ref{tab:ai_flags_values}, ciascuna delle quali identifica un
-bit della maschera.
-
 \begin{table}[!htb]
   \centering
   \footnotesize
@@ -1384,6 +1379,15 @@ bit della maschera.
   \label{tab:ai_flags_values}
 \end{table}
 
+
+Infine l'ultimo campo è \var{ai\_flags}; che deve essere impostato come una
+maschera binaria; i bit di questa variabile infatti vengono usati per dare
+delle indicazioni sul tipo di risoluzione voluta, ed hanno valori analoghi a
+quelli visti in sez.~\ref{sec:sock_name_services} per \func{getipnodebyname};
+il valore di \var{ai\_flags} può essere impostata con un OR aritmetico delle
+costanti di tab.~\ref{tab:ai_flags_values}, ciascuna delle quali identifica un
+bit della maschera.
+
 La funzione restituisce un valore nullo in caso di successo, o un codice in
 caso di errore. I valori usati come codice di errore sono riportati in
 tab.~\ref{tab:addrinfo_error_code}; dato che la funzione utilizza altre
@@ -3328,7 +3332,7 @@ quantit
 \begin{figure}[!htb]
   \footnotesize \centering
   \begin{minipage}[c]{15cm}
-    \includecodesnip{listati/is_closing.c}
+    \includecodesample{listati/is_closing.c}
   \end{minipage}
   \caption{Codice della funzione \texttt{is\_closing.c}, che controlla lo stato
     di un socket TCP per verificare se si sta chiudendo.}
@@ -4421,8 +4425,8 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un
   massimo di 100 secondi, che però è un valore considerato troppo basso.
 
-\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] indica allo stack TCP
-  del kernel di abilitare il comportamento richiesto
+\item[\procrelfile{/proc/sys/net/ipv4}{tcp\_rfc1337}] indica al kernel di
+  abilitare il comportamento richiesto
   nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore
   logico e di default è disabilitato, il che significa che alla ricezione di
   un segmento RST in stato \texttt{TIME\_WAIT} il socket viene chiuso
@@ -4434,7 +4438,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   anche in rapporto alla memoria disponibile.  Prende una tripletta di valori
   interi separati da spazi che indicano delle dimensioni in byte:
 
-  \begin{itemize*}
+  \begin{itemize}
   \item il primo valore, chiamato \textit{min} nelle pagine di manuale, indica
     la dimensione minima in byte del buffer di ricezione; il default è 4Kb, ma
     in sistemi con poca memoria viene automaticamente ridotto a
@@ -4465,7 +4469,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
     \procfile{/proc/sys/net/core/rmem\_max}. Questo valore non viene ad
     incidere sulla dimensione del buffer di ricezione di un singolo socket
     dichiarata con l'opzione \const{SO\_RCVBUF}.
-  \end{itemize*}
+  \end{itemize}
 
 \item[\procrelfile{/proc/sys/net/ipv4}{tcp\_sack}] indica al kernel di
   utilizzare il meccanismo del \textit{TCP selective acknowledgement} definito
@@ -4545,7 +4549,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   adeguandole in rapporto alla memoria disponibile.  Prende una tripletta di
   valori interi separati da spazi che indicano delle dimensioni in byte:
 
-  \begin{itemize*}
+  \begin{itemize}
   \item il primo valore, chiamato \textit{min}, indica la dimensione minima in
     byte del buffer di spedizione; il default è 4Kb. Come per l'analogo di
     \procrelfile{/proc/sys/net/ipv4}{tcp\_rmem}) viene usato per assicurare
@@ -4574,7 +4578,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
     posto con \procfile{/proc/sys/net/core/wmem\_max}. Questo valore non viene
     ad incidere sulla dimensione del buffer di trasmissione di un singolo
     socket dichiarata con l'opzione \const{SO\_SNDBUF}.
-  \end{itemize*}
+  \end{itemize}
 
 \end{basedescript}