Sistemazione ulteriore degli overfull hbox
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 12 Aug 2018 20:02:20 +0000 (22:02 +0200)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 12 Aug 2018 20:02:20 +0000 (22:02 +0200)
13 files changed:
fileadv.tex
fileio.tex
gapil.tex
ipc.tex
listati/ip_msfilter.h
listati/resolv_option_def.c
netlayer.tex
network.tex
signal.tex
sockctrl.tex
socket.tex
system.tex
tcpsock.tex

index 2d95b7b05393b32a30d4aa22b55b4c6b9ec6a114..6bbc00ce4c3889d033cf12e84a2c7adfb7c48a89 100644 (file)
@@ -1567,8 +1567,8 @@ sono state in discussione altre interfacce con le quali effettuare lo stesso
 tipo di operazioni; \textit{epoll} è in grado di operare sia in modalità
 \textit{level triggered} che \textit{edge triggered}.
 
 tipo di operazioni; \textit{epoll} è in grado di operare sia in modalità
 \textit{level triggered} che \textit{edge triggered}.
 
-La prima versione di \textit{epoll} prevedeva l'apertura di uno speciale file
-di dispositivo, \texttt{/dev/epoll}, per ottenere un file descriptor da
+La prima versione di \textit{epoll} prevedeva l'uso di uno speciale file di
+dispositivo, \texttt{/dev/epoll}, per ottenere un file descriptor da
 utilizzare con le funzioni dell'interfaccia ma poi si è passati all'uso di
 apposite \textit{system call}.  Il primo passo per usare l'interfaccia di
 \textit{epoll} è pertanto quello ottenere detto file descriptor chiamando una
 utilizzare con le funzioni dell'interfaccia ma poi si è passati all'uso di
 apposite \textit{system call}.  Il primo passo per usare l'interfaccia di
 \textit{epoll} è pertanto quello ottenere detto file descriptor chiamando una
@@ -2192,9 +2192,9 @@ tal caso qualora vi fossero segnali pendenti questi resteranno tali, e
 potranno essere ricevuti normalmente una volta che si rimuova il blocco
 imposto con \func{sigprocmask}.
 
 potranno essere ricevuti normalmente una volta che si rimuova il blocco
 imposto con \func{sigprocmask}.
 
-Oltre che con le funzioni dell'\textit{I/O multiplexing} l'uso del file
-descriptor restituito da \func{signalfd} cerca di seguire la semantica di un
-sistema unix-like anche con altre \textit{system call}; in particolare esso
+Oltre a poter essere usato con le funzioni dell'\textit{I/O multiplexing}, il
+file descriptor restituito da \func{signalfd} cerca di seguire la semantica di
+un sistema unix-like anche con altre \textit{system call}; in particolare esso
 resta aperto (come ogni altro file descriptor) attraverso una chiamata ad
 \func{exec}, a meno che non lo si sia creato con il flag di
 \const{SFD\_CLOEXEC} o si sia successivamente impostato il
 resta aperto (come ogni altro file descriptor) attraverso una chiamata ad
 \func{exec}, a meno che non lo si sia creato con il flag di
 \const{SFD\_CLOEXEC} o si sia successivamente impostato il
@@ -2221,7 +2221,7 @@ successivo con \func{fcntl}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.90\textwidth}
+  \begin{minipage}[c]{0.95\textwidth}
     \includestruct{listati/signalfd_siginfo.h}
   \end{minipage} 
   \normalsize 
     \includestruct{listati/signalfd_siginfo.h}
   \end{minipage} 
   \normalsize 
@@ -2251,8 +2251,8 @@ ad eventuali più segnali pendenti, fino al numero massimo di strutture
   \label{fig:fiforeporter_code_init}
 \end{figure}
 
   \label{fig:fiforeporter_code_init}
 \end{figure}
 
-Il contenuto di \struct{signalfd\_siginfo} ricalca da vicino quella della
-analoga struttura \struct{siginfo\_t} (illustrata in
+Il contenuto di \struct{signalfd\_siginfo} ricalca da vicino quella
+dell'analoga struttura \struct{siginfo\_t} (illustrata in
 fig.~\ref{fig:sig_siginfo_t}) usata dall'interfaccia ordinaria dei segnali, e
 restituisce dati simili. Come per \struct{siginfo\_t} i campi che vengono
 avvalorati dipendono dal tipo di segnale e ricalcano i valori che abbiamo già
 fig.~\ref{fig:sig_siginfo_t}) usata dall'interfaccia ordinaria dei segnali, e
 restituisce dati simili. Come per \struct{siginfo\_t} i campi che vengono
 avvalorati dipendono dal tipo di segnale e ricalcano i valori che abbiamo già
index 67c2a20299a5d553f10908610496b36ad86821df..b7db3a7073279bd39e6d0f957d7aff27a873c552 100644 (file)
@@ -4029,7 +4029,7 @@ scelta, si può forzare lo scarico dei dati sul file con la funzione
 \end{funcproto}
 
 \noindent anche di questa funzione esiste una analoga \func{fflush\_unlocked}
 \end{funcproto}
 
 \noindent anche di questa funzione esiste una analoga \func{fflush\_unlocked}
-(accessibile definendo \macro{\_BSD\_SOURCE} o \macro{\_SVID\_SOURCE} o
+(accessibile definendo una fra \macro{\_BSD\_SOURCE}, \macro{\_SVID\_SOURCE} o
 \macro{\_GNU\_SOURCE}) che non effettua il blocco dello \textit{stream}.
 
 % TODO aggiungere prototipo \func{fflush\_unlocked}?
 \macro{\_GNU\_SOURCE}) che non effettua il blocco dello \textit{stream}.
 
 % TODO aggiungere prototipo \func{fflush\_unlocked}?
index d450732217b2b791e7773e2cf3c99989266386b4..b4448914a6cb98ac2cfab20c5883f8b643ecd2bb 100644 (file)
--- a/gapil.tex
+++ b/gapil.tex
@@ -179,6 +179,10 @@ hyperfootnotes=false]{hyperref}
 % distance from margins for boxedminipage
 %\fboxsep=6pt
 
 % distance from margins for boxedminipage
 %\fboxsep=6pt
 
+% less hspace for tables
+\setlength{\tabcolsep}{0.5em}
+
+
 \part{Programmazione di sistema}
 \label{part:progr-di-sist}
 \include{intro}
 \part{Programmazione di sistema}
 \label{part:progr-di-sist}
 \include{intro}
diff --git a/ipc.tex b/ipc.tex
index f820a13b0cbaec3b200ff368c5a1564682a6e298..4d9c357e74711b7fa5d2fea51d70680598057961 100644 (file)
--- a/ipc.tex
+++ b/ipc.tex
@@ -1072,8 +1072,8 @@ Il secondo livello di controllo è quello delle varie funzioni che accedono
 direttamente (in lettura o scrittura) all'oggetto. In tal caso lo schema dei
 controlli è simile a quello dei file, ed avviene secondo questa sequenza:
 \begin{itemize*}
 direttamente (in lettura o scrittura) all'oggetto. In tal caso lo schema dei
 controlli è simile a quello dei file, ed avviene secondo questa sequenza:
 \begin{itemize*}
-\item se il processo ha i privilegi di amministratore (più precisamente la
-  capacità \const{CAP\_IPC\_OWNER}) l'accesso è sempre consentito.
+\item se il processo ha i privilegi di amministratore (più precisamente
+  \const{CAP\_IPC\_OWNER}) l'accesso è sempre consentito.
 \item se l'\ids{UID} effettivo del processo corrisponde o al valore del campo
   \var{cuid} o a quello del campo \var{uid} ed il permesso per il proprietario
   in \var{mode} è appropriato\footnote{per appropriato si intende che è
 \item se l'\ids{UID} effettivo del processo corrisponde o al valore del campo
   \var{cuid} o a quello del campo \var{uid} ed il permesso per il proprietario
   in \var{mode} è appropriato\footnote{per appropriato si intende che è
@@ -1362,7 +1362,7 @@ come \ctyp{short}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{.90\textwidth}
+  \begin{minipage}[c]{.91\textwidth}
     \includestruct{listati/msqid_ds.h}
   \end{minipage} 
   \normalsize 
     \includestruct{listati/msqid_ds.h}
   \end{minipage} 
   \normalsize 
@@ -1945,7 +1945,7 @@ processo, e la gestione diventa più complicata.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{.80\textwidth}
+  \begin{minipage}[c]{.85\textwidth}
     \includestruct{listati/semid_ds.h}
   \end{minipage} 
   \normalsize 
     \includestruct{listati/semid_ds.h}
   \end{minipage} 
   \normalsize 
@@ -1975,7 +1975,7 @@ quanto riguarda gli altri campi invece:
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{.80\textwidth}
+  \begin{minipage}[c]{.85\textwidth}
     \includestruct{listati/sem.h}
   \end{minipage} 
   \normalsize 
     \includestruct{listati/sem.h}
   \end{minipage} 
   \normalsize 
@@ -2427,7 +2427,7 @@ struttura \struct{sembuf}) e al processo corrente (nel campo \var{sleeper})
 poi quest'ultimo viene messo stato di attesa e viene invocato lo
 \textit{scheduler} per passare all'esecuzione di un altro processo.
 
 poi quest'ultimo viene messo stato di attesa e viene invocato lo
 \textit{scheduler} per passare all'esecuzione di un altro processo.
 
-Se invece tutte le operazioni possono avere successo queste vengono eseguite
+Se invece tutte le operazioni possono avere successo vengono eseguite
 immediatamente, dopo di che il kernel esegue una scansione della coda di
 attesa (a partire da \var{sem\_pending}) per verificare se qualcuna delle
 operazioni sospese in precedenza può essere eseguita, nel qual caso la
 immediatamente, dopo di che il kernel esegue una scansione della coda di
 attesa (a partire da \var{sem\_pending}) per verificare se qualcuna delle
 operazioni sospese in precedenza può essere eseguita, nel qual caso la
@@ -3778,9 +3778,9 @@ dei rispettivi limiti di sistema altrimenti la funzione fallirà con un errore
 di \errcode{EINVAL}.  Se \param{attr} è un puntatore nullo gli attributi della
 coda saranno impostati ai valori predefiniti.
 
 di \errcode{EINVAL}.  Se \param{attr} è un puntatore nullo gli attributi della
 coda saranno impostati ai valori predefiniti.
 
-I suddetti limiti di sistema sono impostati attraverso altrettanti file in
-\texttt{/proc/sys/fs/mqueue}, in particolare i file che controllano i valori
-dei limiti sono:
+I suddetti limiti di sistema sono impostati attraverso una serie di file
+presenti sotto \texttt{/proc/sys/fs/mqueue}, in particolare i file che
+controllano i valori dei limiti sono:
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlfiled{fs/mqueue/msg\_max}] Indica il valore massimo del numero di
   messaggi in una coda e agisce come limite superiore per il valore di
 \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlfiled{fs/mqueue/msg\_max}] Indica il valore massimo del numero di
   messaggi in una coda e agisce come limite superiore per il valore di
@@ -3968,8 +3968,8 @@ nell'argomento \param{msg\_ptr}, e la relativa lunghezza in \param{msg\_len}.
 Se quest'ultima eccede la dimensione massima specificata da \var{mq\_msgsize}
 le funzioni ritornano immediatamente con un errore di \errcode{EMSGSIZE}.
 
 Se quest'ultima eccede la dimensione massima specificata da \var{mq\_msgsize}
 le funzioni ritornano immediatamente con un errore di \errcode{EMSGSIZE}.
 
-L'argomento \param{msg\_prio} indica la priorità dell'argomento, che, essendo
-definito come \ctyp{unsigned int}, è sempre un intero positivo. I messaggi di
+L'argomento \param{msg\_prio} indica la priorità dell'argomento che essendo
+definito come \ctyp{unsigned int} è sempre un intero positivo. I messaggi di
 priorità maggiore vengono inseriti davanti a quelli di priorità inferiore, e
 quindi saranno riletti per primi. A parità del valore della priorità il
 messaggio sarà inserito in coda a tutti quelli che hanno la stessa priorità
 priorità maggiore vengono inseriti davanti a quelli di priorità inferiore, e
 quindi saranno riletti per primi. A parità del valore della priorità il
 messaggio sarà inserito in coda a tutti quelli che hanno la stessa priorità
@@ -4963,11 +4963,11 @@ quindi bloccato (causando a questo punto una interruzione delle stampe
 eseguite da \file{message\_getter}). Terminato il tempo di attesa si rilascerà
 (\texttt{\small 29-32}) il semaforo per poi uscire.
 
 eseguite da \file{message\_getter}). Terminato il tempo di attesa si rilascerà
 (\texttt{\small 29-32}) il semaforo per poi uscire.
 
-Per verificare il funzionamento dei programmi occorrerà lanciare per primo
-\file{message\_getter}\footnote{lanciare per primo \file{message\_setter} darà
-  luogo ad un errore, non essendo stati creati il semaforo ed il segmento di
-  memoria condivisa.} che inizierà a stampare una volta al secondo il
-contenuto del messaggio ed i suoi dati, con qualcosa del tipo:
+Per verificare il funzionamento dei programmi occorrerà lanciare prima
+\file{message\_getter} (lanciare per primo \file{message\_setter} darebbe
+luogo ad un errore, non essendo stati creati il semaforo ed il segmento di
+memoria condivisa) che inizierà a stampare una volta al secondo il contenuto
+del messaggio ed i suoi dati, con qualcosa del tipo:
 \begin{Console}
 piccardi@hain:~/gapil/sources$  \textbf{./message_getter messaggio}
 sem=1, Fri Dec 31 14:12:41 2010
 \begin{Console}
 piccardi@hain:~/gapil/sources$  \textbf{./message_getter messaggio}
 sem=1, Fri Dec 31 14:12:41 2010
@@ -4990,10 +4990,8 @@ Sleeping for 3 seconds
 \end{Console}
 %$
 dove il programma si fermerà per 3 secondi prima di rilasciare il semaforo e
 \end{Console}
 %$
 dove il programma si fermerà per 3 secondi prima di rilasciare il semaforo e
-terminare. 
-
-L'effetto di questo programma si potrà però apprezzare meglio nell'uscita di
-\file{message\_getter}, che verrà interrotta per questo stesso tempo, prima di
+terminare. L'effetto di tutto ciò si potrà vedere nell'\textit{output} di
+\file{message\_getter}, che verrà interrotto per questo stesso tempo, prima di
 ricominciare con il nuovo testo:
 \begin{Console}
 ...
 ricominciare con il nuovo testo:
 \begin{Console}
 ...
index dbd40b823b766584b45a47ca3d05cde8bc65112a..b0cee250d05ecdf2efd968e544ea48ab7072eac4 100644 (file)
@@ -2,6 +2,7 @@ struct ip_msfilter {
     struct in_addr imsf_multiaddr; /* IP multicast group address */
     struct in_addr imsf_interface; /* IP address of local interface */
     uint32_t       imsf_fmode;     /* Filter-mode */
     struct in_addr imsf_multiaddr; /* IP multicast group address */
     struct in_addr imsf_interface; /* IP address of local interface */
     uint32_t       imsf_fmode;     /* Filter-mode */
-    uint32_t       imsf_numsrc;    /* Number of sources in the following array */
+    uint32_t       imsf_numsrc;    /* Number of sources in the 
+                                     following array */
     struct in_addr imsf_slist[1];  /* Array of source addresses */
 };
     struct in_addr imsf_slist[1];  /* Array of source addresses */
 };
index 8d45d784fbf4aba17e2374ba1ca5dab288186cc1..631440ffc4231f5441c4cb34b56a0b5855b964e2 100644 (file)
@@ -1 +1 @@
-#define RES_DEFAULT     (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
+#define RES_DEFAULT  (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
index 5516cec51de34939708b0d9e7607c2421db6caf6..ab007dc3da31858962b2b4190606cf0ffcdb3a78 100644 (file)
@@ -641,15 +641,14 @@ coi numeri decimali di IPv4 per rappresentare un numero IP. Per questo gli
 indirizzi di IPv6 sono in genere scritti come sequenze di otto numeri
 esadecimali di 4 cifre (cioè a gruppi di 16 bit) usando i due punti come
 separatore; cioè qualcosa del tipo
 indirizzi di IPv6 sono in genere scritti come sequenze di otto numeri
 esadecimali di 4 cifre (cioè a gruppi di 16 bit) usando i due punti come
 separatore; cioè qualcosa del tipo
-\texttt{5f1b:df00:ce3e:e200:0020:0800:2078:e3e3}.
-
+\texttt{1080:0000:0000:0008:0800:ba98:2078:e3e3}.
 
 Visto che la notazione resta comunque piuttosto pesante esistono alcune
 
 Visto che la notazione resta comunque piuttosto pesante esistono alcune
-abbreviazioni; si può evitare di scrivere gli zeri iniziali per cui si
-può scrivere \texttt{1080:0:0:0:8:800:ba98:2078:e3e3}; se poi un intero è
-zero si può omettere del tutto, così come un insieme di zeri (ma questo
-solo una volta per non generare ambiguità) per cui il precedente indirizzo
-si può scrivere anche come \texttt{1080::8:800:ba98:2078:e3e3}.
+abbreviazioni: si può evitare di scrivere gli zeri iniziali delle singole
+cifre, abbreviando l'indirizzo precedente in \texttt{1080:0:0:8:800:ba98:2078:e3e3}; se
+poi un intero è zero si può omettere del tutto, così come un insieme di zeri
+(ma questo solo una volta per non generare ambiguità) per cui il precedente
+indirizzo si può scrivere anche come \texttt{1080::8:800:ba98:2078:e3e3}.
 
 Infine per scrivere un indirizzo IPv4 all'interno di un indirizzo IPv6 si
 può usare la vecchia notazione con i punti, per esempio
 
 Infine per scrivere un indirizzo IPv4 all'interno di un indirizzo IPv6 si
 può usare la vecchia notazione con i punti, per esempio
index 0d39a11f16781d2285ac822566161f69456a9a95..56120dfd77deac03a47393808e162c2fa6b56f1d 100644 (file)
@@ -14,9 +14,9 @@
 
 In questo capitolo sarà fatta un'introduzione ai concetti generali che servono
 come prerequisiti per capire la programmazione di rete, non tratteremo quindi
 
 In questo capitolo sarà fatta un'introduzione ai concetti generali che servono
 come prerequisiti per capire la programmazione di rete, non tratteremo quindi
-aspetti specifici ma faremo una breve introduzione al modello più comune usato
+aspetti specifici ma faremo una breve introduzione ai modelli più comuni usati
 nella programmazione di rete, per poi passare ad un esame a grandi linee dei
 nella programmazione di rete, per poi passare ad un esame a grandi linee dei
-protocolli di rete e di come questi sono organizzati e interagiscono. 
+protocolli di rete e di come questi sono organizzati e interagiscono.
 
 In particolare, avendo assunto l'ottica di un'introduzione mirata alla
 programmazione, ci concentreremo sul gruppo di protocolli più diffuso, il
 
 In particolare, avendo assunto l'ottica di un'introduzione mirata alla
 programmazione, ci concentreremo sul gruppo di protocolli più diffuso, il
@@ -29,7 +29,6 @@ programmi.
 \section{Modelli di programmazione}
 \label{sec:net_prog_model}
 
 \section{Modelli di programmazione}
 \label{sec:net_prog_model}
 
-
 La differenza principale fra un'applicazione di rete e un programma normale è
 che quest'ultima per definizione concerne la comunicazione fra processi
 diversi, che in generale non girano neanche sulla stessa macchina. Questo già
 La differenza principale fra un'applicazione di rete e un programma normale è
 che quest'ultima per definizione concerne la comunicazione fra processi
 diversi, che in generale non girano neanche sulla stessa macchina. Questo già
@@ -439,9 +438,9 @@ programmazione di rete però sono importanti principalmente i due livelli
 centrali, e soprattutto quello di trasporto.
 
 La principale interfaccia usata nella programmazione di rete, quella dei
 centrali, e soprattutto quello di trasporto.
 
 La principale interfaccia usata nella programmazione di rete, quella dei
-socket (vedi sez.~\ref{cha:socket_intro}), è infatti un'interfaccia nei
-confronti di quest'ultimo.  Questo avviene perché al di sopra del livello di
-trasporto i programmi hanno a che fare solo con dettagli specifici delle
+socket (che vedremo in sez.~\ref{cha:socket_intro}), è infatti un'interfaccia
+nei confronti di quest'ultimo.  Questo avviene perché al di sopra del livello
+di trasporto i programmi hanno a che fare solo con dettagli specifici delle
 applicazioni, mentre al di sotto vengono curati tutti i dettagli relativi alla
 comunicazione. È pertanto naturale definire una interfaccia di programmazione
 su questo confine, tanto più che è proprio lì (come evidenziato in
 applicazioni, mentre al di sotto vengono curati tutti i dettagli relativi alla
 comunicazione. È pertanto naturale definire una interfaccia di programmazione
 su questo confine, tanto più che è proprio lì (come evidenziato in
@@ -494,9 +493,9 @@ seguenti:
 \item[\textsl{TCP}] \textit{Trasmission Control Protocol}. È un protocollo
   orientato alla connessione che provvede un trasporto affidabile per un
   flusso di dati bidirezionale fra due stazioni remote. Il protocollo ha cura
 \item[\textsl{TCP}] \textit{Trasmission Control Protocol}. È un protocollo
   orientato alla connessione che provvede un trasporto affidabile per un
   flusso di dati bidirezionale fra due stazioni remote. Il protocollo ha cura
-  di tutti gli aspetti del trasporto, come l'\textit{acknoweledgment} (il
-  ricevuto), i timeout, la ritrasmissione, ecc. È usato dalla maggior parte
-  delle applicazioni.
+  di tutti gli aspetti del trasporto dei dati, come l'\textit{acknowledgment}
+  (il ricevuto), i timeout, la ritrasmissione, ecc. È usato dalla maggior
+  parte delle applicazioni.
 \item[\textsl{UDP}] \textit{User Datagram Protocol}. È un protocollo senza
   connessione, per l'invio di dati a pacchetti. Contrariamente al TCP il
   protocollo non è affidabile e non c'è garanzia che i pacchetti raggiungano
 \item[\textsl{UDP}] \textit{User Datagram Protocol}. È un protocollo senza
   connessione, per l'invio di dati a pacchetti. Contrariamente al TCP il
   protocollo non è affidabile e non c'è garanzia che i pacchetti raggiungano
@@ -568,18 +567,19 @@ trasporto.
 \subsection{Internet Protocol (IP)}
 \label{sec:net_ip}
 
 \subsection{Internet Protocol (IP)}
 \label{sec:net_ip}
 
-Quando si parla di IP ci si riferisce in genere alla versione attualmente in
-uso che è la versione 4 (e viene pertanto chiamato IPv4). Questa versione
-venne standardizzata nel 1981
+Quando si parla di \textit{Internet Protocol} (IP) si fa in genere riferimento
+ad una versione (la quarta, da cui il nome IPv4) che è quella più usata
+comunemente, anche se ormai si sta diffondendo sempre di più la nuova versione
+IPv6. Il protocollo IPv4 venne standardizzato nel 1981
 dall'\href{http://www.ietf.org/rfc/rfc0719.txt}{RFC~719}.
 
 dall'\href{http://www.ietf.org/rfc/rfc0719.txt}{RFC~719}.
 
-Internet Protocol nasce per disaccoppiare le applicazioni della struttura
-hardware delle reti di trasmissione, e creare una interfaccia di trasmissione
-dei dati indipendente dal sottostante substrato di rete, che può essere
-realizzato con le tecnologie più disparate (Ethernet, Token Ring, FDDI, ecc.).
-Il compito di IP è pertanto quello di trasmettere i pacchetti da un computer
-all'altro della rete; le caratteristiche essenziali con cui questo viene
-realizzato in IPv4 sono due:
+Il protocollo IP (indipendentemente dalla versione) nasce per disaccoppiare le
+applicazioni della struttura hardware delle reti di trasmissione, e creare una
+interfaccia di trasmissione dei dati indipendente dal sottostante substrato di
+interconnessione fisica, che può essere realizzato con le tecnologie più
+disparate (Ethernet, Token Ring, FDDI, ecc.).  Il compito di IP è pertanto
+quello di trasmettere i pacchetti da un computer all'altro della rete; le
+caratteristiche essenziali con cui questo viene realizzato in sono due:
 
 \begin{itemize}
 \item \textit{Universal addressing} la comunicazione avviene fra due stazioni
 
 \begin{itemize}
 \item \textit{Universal addressing} la comunicazione avviene fra due stazioni
index fdd2e6fb40c737cec525363089cea4d484ec1406..8b2521959e1cf1edc08ca15be5359074638da2e8 100644 (file)
@@ -944,16 +944,16 @@ situazione è il seguente:
   essere riavvolto);
 \item le operazioni eseguite con \func{ioctl} che non è detto possano essere
   eseguite immediatamente;
   essere riavvolto);
 \item le operazioni eseguite con \func{ioctl} che non è detto possano essere
   eseguite immediatamente;
-\item le funzioni di intercomunicazione fra processi (vedi cap.~\ref{cha:IPC})
-  che si bloccano in attesa di risposte da altri processi;
-\item la funzione \func{pause} (vedi sez.~\ref{sec:sig_pause_sleep}) e le
-  analoghe \func{sigsuspend}, \func{sigtimedwait}, e \func{sigwaitinfo} (vedi
-  sez.~\ref{sec:sig_real_time}), usate appunto per attendere l'arrivo di un
-  segnale;
-\item le funzioni associate al \textit{file locking} (vedi
+\item l'uso di funzioni di intercomunicazione fra processi (vedi
+  cap.~\ref{cha:IPC}) che si bloccano in attesa di risposte da altri processi;
+\item l'uso della funzione \func{pause} (vedi sez.~\ref{sec:sig_pause_sleep})
+  e le analoghe \func{sigsuspend}, \func{sigtimedwait}, e \func{sigwaitinfo}
+  (vedi sez.~\ref{sec:sig_real_time}), usate appunto per attendere l'arrivo di
+  un segnale;
+\item l'uso delle funzioni associate al \textit{file locking} (vedi
   sez.~\ref{sec:file_locking})
   sez.~\ref{sec:file_locking})
-\item la funzione \func{wait} e le analoghe funzioni di attesa se nessun
-  processo figlio è ancora terminato.
+\item l'uso della funzione \func{wait} e le analoghe funzioni di attesa se
+  nessun processo figlio è ancora terminato.
 \end{itemize*}
 
 In questo caso si pone il problema di cosa fare una volta che il gestore sia
 \end{itemize*}
 
 In questo caso si pone il problema di cosa fare una volta che il gestore sia
@@ -987,18 +987,18 @@ interrotte con un errore di \errcode{EINTR} indipendentemente dal fatto che ne
 possa essere stato richiesto il riavvio automatico, queste funzioni sono:
 
 \begin{itemize*}
 possa essere stato richiesto il riavvio automatico, queste funzioni sono:
 
 \begin{itemize*}
-\item le funzioni di attesa di un segnale, come \func{pause} (vedi
-  sez.~\ref{sec:sig_pause_sleep}), \func{sigsuspend}, \func{sigtimedwait}, e
+\item le funzioni di attesa di un segnale: \func{pause} (vedi
+  sez.~\ref{sec:sig_pause_sleep}) o \func{sigsuspend}, \func{sigtimedwait}, e
   \func{sigwaitinfo} (vedi sez.~\ref{sec:sig_real_time}).
   \func{sigwaitinfo} (vedi sez.~\ref{sec:sig_real_time}).
-\item le funzioni di attesa dell'\textit{I/O multiplexing}, come
-  \func{select}, \func{pselect}, \func{poll}, \func{ppoll}, \func{epoll\_wait}
-  e \func{epoll\_pwait} (vedi sez.~\ref{sec:file_multiplexing}).
+\item le funzioni di attesa dell'\textit{I/O multiplexing} (vedi
+  sez.~\ref{sec:file_multiplexing}) come \func{select}, \func{pselect},
+  \func{poll}, \func{ppoll}, \func{epoll\_wait} e \func{epoll\_pwait}.
 \item le funzioni del System V IPC che prevedono attese: \func{msgrcv},
   \func{msgsnd} (vedi sez.~\ref{sec:ipc_sysv_mq}), \func{semop} e
   \func{semtimedop} (vedi sez.~\ref{sec:ipc_sysv_sem}).
 \item le funzioni del System V IPC che prevedono attese: \func{msgrcv},
   \func{msgsnd} (vedi sez.~\ref{sec:ipc_sysv_mq}), \func{semop} e
   \func{semtimedop} (vedi sez.~\ref{sec:ipc_sysv_sem}).
-\item le funzioni di attesa di un processo: \func{usleep}, \func{nanosleep}
-  (vedi sez.~\ref{sec:sig_pause_sleep}) e \func{clock\_nanosleep} (vedi
-  sez.~\ref{sec:sig_timer_adv}).
+\item le funzioni per la messa in attesa di un processo come \func{usleep},
+  \func{nanosleep} (vedi sez.~\ref{sec:sig_pause_sleep}) e
+  \func{clock\_nanosleep} (vedi sez.~\ref{sec:sig_timer_adv}).
 \item le funzioni che operano sui socket quando è stato impostato un
   \textit{timeout} sugli stessi con \func{setsockopt} (vedi
   sez.~\ref{sec:sock_generic_options}) ed in particolare \func{accept},
 \item le funzioni che operano sui socket quando è stato impostato un
   \textit{timeout} sugli stessi con \func{setsockopt} (vedi
   sez.~\ref{sec:sock_generic_options}) ed in particolare \func{accept},
@@ -2001,10 +2001,10 @@ relativi all'uso di \func{signal}. Per ovviare a tutto questo lo standard
 POSIX.1 ha ridefinito completamente l'interfaccia per la gestione dei segnali,
 rendendola molto più flessibile e robusta, anche se leggermente più complessa.
 
 POSIX.1 ha ridefinito completamente l'interfaccia per la gestione dei segnali,
 rendendola molto più flessibile e robusta, anche se leggermente più complessa.
 
-La funzione di sistema principale prevista dall'interfaccia POSIX.1 per i
-segnali è \funcd{sigaction}. Essa ha sostanzialmente lo stesso uso di
-\func{signal}, permette cioè di specificare le modalità con cui un segnale può
-essere gestito da un processo. Il suo prototipo è:
+La principale funzione di sistema prevista dall'interfaccia POSIX.1 per la
+gestione dei segnali è \funcd{sigaction}. Essa ha sostanzialmente lo stesso
+uso di \func{signal}, permette cioè di specificare le modalità con cui un
+segnale può essere gestito da un processo. Il suo prototipo è:
 
 \begin{funcproto}{
 \fhead{signal.h}
 
 \begin{funcproto}{
 \fhead{signal.h}
@@ -2820,7 +2820,7 @@ nell'argomento \param{value}. Se invece si è installato un gestore nella forma
 classica il segnale sarà generato, ma tutte le caratteristiche tipiche dei
 segnali \textit{real-time} (priorità e coda) saranno perse.
 
 classica il segnale sarà generato, ma tutte le caratteristiche tipiche dei
 segnali \textit{real-time} (priorità e coda) saranno perse.
 
-Secondo lo standard POSIX la profondità della coda è indicata dalla costante
+Per lo standard POSIX la profondità della coda è indicata dalla costante
 \constd{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
 standard POSIX che non abbiamo riportato esplicitamente in
 sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard,
 \constd{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo
 standard POSIX che non abbiamo riportato esplicitamente in
 sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard,
index fcfa257d1e10d6687034310b70e0536c537c1edf..07c657eab685eebee01dec1dbf1130b676caef58 100644 (file)
@@ -822,7 +822,7 @@ 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.
 
 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 41}) ad una
+Per ciascun indirizzo valido si provvederà (\texttt{\small 41}) a 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 42}) con il valore
 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 42}) con il valore
@@ -2529,10 +2529,10 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
   specificare come argomento per questa opzione sono impostabili tramiti gli
   opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
 
   specificare come argomento per questa opzione sono impostabili tramiti gli
   opportuni valori di \func{sysctl} (vedi sez.~\ref{sec:sock_sysctl}).
 
-  Si tenga presente che nel caso di socket TCP, per entrambe le opzioni
-  \const{SO\_RCVBUF} e \const{SO\_SNDBUF}, il kernel alloca effettivamente una
-  quantità di memoria doppia rispetto a quanto richiesto con
-  \func{setsockopt}. Questo comporta che una successiva lettura con
+  Si tenga presente che nel caso di socket TCP il kernel alloca effettivamente
+  una quantità di memoria doppia rispetto a quanto richiesto con
+  \func{setsockopt} per entrambe le opzioni \const{SO\_RCVBUF} e
+  \const{SO\_SNDBUF}. Questo comporta che una successiva lettura con
   \func{getsockopt} riporterà un valore diverso da quello impostato con
   \func{setsockopt}.  Questo avviene perché TCP necessita dello spazio in più
   per mantenere dati amministrativi e strutture interne, e solo una parte
   \func{getsockopt} riporterà un valore diverso da quello impostato con
   \func{setsockopt}.  Questo avviene perché TCP necessita dello spazio in più
   per mantenere dati amministrativi e strutture interne, e solo una parte
@@ -2549,8 +2549,8 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 
 \item[\constd{SO\_RCVBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_RCVBUF} ma consente ad un processo con i privilegi di
 
 \item[\constd{SO\_RCVBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_RCVBUF} ma consente ad un processo con i privilegi di
-  amministratore (con la \textit{capability} \const{CAP\_NET\_ADMIN}) di
-  impostare in valore maggiore del limite di
+  amministratore (per la precisione con la \textit{capability}
+  \const{CAP\_NET\_ADMIN}) di impostare in valore maggiore del limite di
   \sysctlrelfile{net/core}{rmem\_max}.
 
 \item[\constd{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
   \sysctlrelfile{net/core}{rmem\_max}.
 
 \item[\constd{SO\_RCVLOWAT}] questa opzione imposta il valore che indica il
@@ -2639,8 +2639,8 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 
 \item[\constd{SO\_SNDBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_SNDBUF} ma consente ad un processo con i privilegi di
 
 \item[\constd{SO\_SNDBUFFORCE}] questa opzione, presente dal kernel 2.6.14, è
   identica a \const{SO\_SNDBUF} ma consente ad un processo con i privilegi di
-  amministratore (con la \textit{capability} \const{CAP\_NET\_ADMIN}) di
-  impostare in valore maggiore del limite di
+  amministratore (per la precisione con la \textit{capability}
+  \const{CAP\_NET\_ADMIN}) di impostare in valore maggiore del limite di
   \sysctlrelfile{net/core}{wmem\_max}.
 
 % TODO verificare il timeout con un programma di test
   \sysctlrelfile{net/core}{wmem\_max}.
 
 % TODO verificare il timeout con un programma di test
@@ -3098,7 +3098,7 @@ manuale, nel caso specifico la documentazione si può consultare con
 \begin{table}[!htb]
   \centering
   \footnotesize
 \begin{table}[!htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|c|c|c|l|p{5.cm}|}
+  \begin{tabular}[c]{|l|c|c|c|l|p{4.8cm}|}
     \hline
     \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
                     \textbf{Descrizione}\\
     \hline
     \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
                     \textbf{Descrizione}\\
@@ -3192,7 +3192,7 @@ seguente elenco:
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.70\textwidth}
+  \begin{minipage}[c]{0.90\textwidth}
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
     \includestruct{listati/ip_mreqn.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
@@ -3213,7 +3213,7 @@ differente dimensione passata in \param{optlen}.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.70\textwidth}
+  \begin{minipage}[c]{0.90\textwidth}
     \includestruct{listati/ip_mreq_source.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
     \includestruct{listati/ip_mreq_source.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_mreqn} utilizzata per unirsi a un gruppo di
@@ -3280,7 +3280,7 @@ per collegarsi a diverse sorgenti.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.70\textwidth}
+  \begin{minipage}[c]{0.90\textwidth}
     \includestruct{listati/ip_msfilter.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_msfilter} utilizzata per il
     \includestruct{listati/ip_msfilter.h}
   \end{minipage}
   \caption{La struttura \structd{ip\_msfilter} utilizzata per il
@@ -3288,13 +3288,14 @@ per collegarsi a diverse sorgenti.
   \label{fig:ip_msfilter_struct}
 \end{figure}
 
   \label{fig:ip_msfilter_struct}
 \end{figure}
 
-L'argomento \param{optval} è una struttura \struct{ip\_msfilter} illustrata in
-fig.~\ref{fig:ip_msfilter_struct}, il campo \var{imsf\_multiaddr} è
-l'indirizzo del gruppo di \textit{multicast}, il campo \var{imsf\_interface}
-l'indirizzo dell'interfaccia locale, il campo \var{imsf\_mode} indica la
-modalità di filtraggio e con i campi \var{imsf\_numsrc} e \var{imsf\_slist}
+L'argomento \param{optval} deve essere una struttura di tipo
+\struct{ip\_msfilter} (illustrata in fig.~\ref{fig:ip_msfilter_struct}); il
+campo \var{imsf\_multiaddr} indica l'indirizzo del gruppo di
+\textit{multicast}, il campo \var{imsf\_interface} l'indirizzo
+dell'interfaccia locale, il campo \var{imsf\_mode} indica la modalità di
+filtraggio e con i campi \var{imsf\_numsrc} e \var{imsf\_slist}
 rispettivamente la lunghezza della lista, e la lista stessa, degli indirizzi
 rispettivamente la lunghezza della lista, e la lista stessa, degli indirizzi
-sorgente. 
+sorgente.
 
 Come ausilio all'uso di questa opzione sono disponibili le macro
 \macro{MCAST\_INCLUDE} e \macro{MCAST\_EXCLUDE} che si possono usare per
 
 Come ausilio all'uso di questa opzione sono disponibili le macro
 \macro{MCAST\_INCLUDE} e \macro{MCAST\_EXCLUDE} che si possono usare per
@@ -3323,9 +3324,9 @@ di \param{optlen} con una struttura \struct{ip\_msfilter} contenente
 
 \itindbeg{Path~MTU}
 \item[\constd{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
 
 \itindbeg{Path~MTU}
 \item[\constd{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU}
-  di percorso del socket.  L'opzione richiede per \param{optval} un intero che
-  conterrà il valore della \textit{Path MTU} in byte.  Questa è una opzione
-  introdotta con i kernel della serie 2.2.x, ed è specifica di Linux.
+  del socket.  L'opzione richiede per \param{optval} un intero che conterrà il
+  valore della \textit{Path MTU} in byte.  Questa è una opzione introdotta con
+  i kernel della serie 2.2.x, ed è specifica di Linux.
 
   È tramite questa opzione che un programma può leggere, quando si è avuto un
   errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si
 
   È tramite questa opzione che un programma può leggere, quando si è avuto un
   errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si
@@ -3333,7 +3334,7 @@ di \param{optlen} con una struttura \struct{ip\_msfilter} contenente
   la scoperta della \textit{Path MTU}, occorre che il socket sia stato
   esplicitamente connesso con \func{connect}. 
 
   la scoperta della \textit{Path MTU}, occorre che il socket sia stato
   esplicitamente connesso con \func{connect}. 
 
-  Ad esempio con i socket UDP si potrà ottenere una stima iniziale della
+  Ad esempio con i socket UDP si p ottenere una stima iniziale della
   \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
   e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
   esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
   \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione,
   e poi usando \func{getsockopt} con questa opzione. Si può anche avviare
   esplicitamente il procedimento di scoperta inviando un pacchetto di grosse
@@ -4532,10 +4533,11 @@ socket.  Quelli descritti anche nella pagina di manuale, accessibile con
   dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
   dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
-Oltre a questi nella directory \texttt{/proc/sys/net/core} si trovano altri
-file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel,
-nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di
-questi però non è documentato:
+Oltre a questi, nella directory \texttt{/proc/sys/net/core} si trovano diversi
+altri file, la cui documentazione, come per gli altri, dovrebbe essere
+mantenuta nei sorgenti del kernel nel file
+\texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di questi
+però non è documentato:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlrelfiled{net/core}{dev\_weight}] blocco di lavoro (\textit{work
     quantum}) dello \textit{scheduler} di processo dei pacchetti.
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\sysctlrelfiled{net/core}{dev\_weight}] blocco di lavoro (\textit{work
     quantum}) dello \textit{scheduler} di processo dei pacchetti.
@@ -4653,12 +4655,12 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti:
 
 \item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il limite
   massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
 
 \item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il limite
   massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti
-  in coda; quando questo valore viene raggiunta la coda viene ripulita fino al
+  in coda; quando questo valore viene raggiunto la coda viene ripulita fino al
   valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
 
   valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero.
 
-\item[\sysctlrelfiled{net/ipv4}{ipfrag\_low\_thresh}] soglia bassa
-  (specificata in byte) a cui viene riportata la coda dei pacchetti IP
-  frammentati quando si raggiunge il valore massimo dato da 
+\item[\sysctlrelfiled{net/ipv4}{ipfrag\_low\_thresh}] indica la dimensione
+  (specificata in byte) della soglia inferiore a cui viene riportata la coda
+  dei pacchetti IP frammentati quando si raggiunge il valore massimo dato da
   \texttt{ipfrag\_high\_thresh}. Prende un valore intero.
 
 \item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
   \texttt{ipfrag\_high\_thresh}. Prende un valore intero.
 
 \item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende
@@ -5038,9 +5040,9 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti:
   \item il secondo valore, denominato \textit{default}, indica la dimensione
     di default in byte del buffer di spedizione di un socket TCP.  Questo
     valore sovrascrive il default iniziale impostato per tutti i tipi di
   \item il secondo valore, denominato \textit{default}, indica la dimensione
     di default in byte del buffer di spedizione di un socket TCP.  Questo
     valore sovrascrive il default iniziale impostato per tutti i tipi di
-    socket con \sysctlfile{net/core/wmem\_default}. Il default è 87380 byte,
-    ridotto a 43689 per sistemi con poca memoria. Si può aumentare questo
-    valore quando si desiderano dimensioni più ampie del buffer di
+    socket sul file \sysctlfile{net/core/wmem\_default}. Il default è 87380
+    byte, ridotto a 43689 per sistemi con poca memoria. Si può aumentare
+    questo valore quando si desiderano dimensioni più ampie del buffer di
     trasmissione per i socket TCP, ma come per il precedente
     \sysctlrelfile{net/ipv4}{tcp\_rmem}) se si vuole che in corrispondenza
     aumentino anche le dimensioni usate per la finestra TCP si deve abilitare
     trasmissione per i socket TCP, ma come per il precedente
     \sysctlrelfile{net/ipv4}{tcp\_rmem}) se si vuole che in corrispondenza
     aumentino anche le dimensioni usate per la finestra TCP si deve abilitare
index 6cd3468e8dd62356a2c54bda644928ec7f23d435..6773fc287009f5d80936e1996886829529e01204 100644 (file)
@@ -512,7 +512,7 @@ sufficiente.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
-  \begin{minipage}[c]{0.90\textwidth}
+  \begin{minipage}[c]{0.95\textwidth}
     \includestruct{listati/sockaddr_storage.h}
   \end{minipage} 
   \caption{La struttura generica degli indirizzi dei socket
     \includestruct{listati/sockaddr_storage.h}
   \end{minipage} 
   \caption{La struttura generica degli indirizzi dei socket
index 74d6dd330c7268f1011ab71a1f5e69a609fffb6d..31ce9b2545c7be8382ab61ed86abfb475b8910e0 100644 (file)
@@ -617,7 +617,7 @@ dall'argomento \param{info}.
 
 \begin{figure}[!ht!b]
   \footnotesize \centering
 
 \begin{figure}[!ht!b]
   \footnotesize \centering
-  \begin{minipage}[c]{0.8\textwidth}
+  \begin{minipage}[c]{0.85\textwidth}
     \includestruct{listati/ustname.h}
   \end{minipage}
   \normalsize 
     \includestruct{listati/ustname.h}
   \end{minipage}
   \normalsize 
@@ -1094,12 +1094,12 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}.
   \label{tab:sys_ut_type}
 \end{table}
 
   \label{tab:sys_ut_type}
 \end{table}
 
-La funzione \func{getutline} esegue la ricerca sulle voci che hanno
-\var{ut\_type} uguale a \const{LOGIN\_PROCESS} o \const{USER\_PROCESS},
-restituendo la prima che corrisponde al valore di \var{ut\_line}, che
-specifica il dispositivo di terminale che interessa, da indicare senza il
-\file{/dev/} iniziale. Lo stesso criterio di ricerca è usato da
-\func{pututline} per trovare uno spazio dove inserire la voce specificata;
+La funzione \func{getutline} esegue la ricerca sulle voci che hanno un
+\var{ut\_type} con valore uguale a \const{LOGIN\_PROCESS} o
+\const{USER\_PROCESS}, restituendo la prima che corrisponde al valore di
+\var{ut\_line}, che specifica il dispositivo di terminale che interessa, da
+indicare senza il \file{/dev/} iniziale. Lo stesso criterio di ricerca è usato
+da \func{pututline} per trovare uno spazio dove inserire la voce specificata;
 qualora questo spazio non venga trovato la voce viene aggiunta in coda al
 registro.
 
 qualora questo spazio non venga trovato la voce viene aggiunta in coda al
 registro.
 
@@ -2296,10 +2296,10 @@ il comportamento è stato adeguato allo standard a partire dalla versione
 2.6.9.
 
 A differenza di quanto avviene per \func{clock} i valori restituiti nei campi
 2.6.9.
 
 A differenza di quanto avviene per \func{clock} i valori restituiti nei campi
-di una struttura \struct{tms} sono misurati in numero di 
-\textit{clock tick} effettivi e non in multipli di \const{CLOCKS\_PER\_SEC},
-pertanto per ottenere il valore effettivo in secondi occorrerà dividere per il
-risultato di \code{sysconf(\_SC\_CLK\_TCK)}.
+di una struttura \struct{tms} sono misurati in numero di \textit{clock tick}
+effettivi e non in multipli di \const{CLOCKS\_PER\_SEC}, pertanto per ottenere
+il valore effettivo del tempo in secondi occorrerà dividere per il risultato
+di \code{sysconf(\_SC\_CLK\_TCK)}.
 
 Lo stesso vale per il valore di ritorno della funzione, il cui significato fa
 riferimento ad un tempo relativo ad un certo punto nel passato la cui
 
 Lo stesso vale per il valore di ritorno della funzione, il cui significato fa
 riferimento ad un tempo relativo ad un certo punto nel passato la cui
index 344ee30446e847d2afd67dc216b752566d34b163..6f7ca7d97d87ed8dad47a2892c3d7b093fbfcf2a 100644 (file)
@@ -1780,8 +1780,8 @@ stamparla sullo \textit{standard output}.
 \subsection{Il client \textit{echo}: prima versione}
 \label{sec:TCP_echo_client}
 
 \subsection{Il client \textit{echo}: prima versione}
 \label{sec:TCP_echo_client}
 
-Il codice della prima versione del client per il servizio \textit{echo},
-disponibile nel file \texttt{TCP\_echo\_first.c}, è riportato in
+Il codice della prima versione del client per il servizio \textit{echo} (file
+\texttt{TCP\_echo\_first.c}) dei sorgenti allegati alla guida) è riportato in
 fig.~\ref{fig:TCP_echo_client_1}. Esso ricalca la struttura del precedente
 client per il servizio \textit{daytime} (vedi
 sez.~\ref{sec:TCP_daytime_client}), e la prima parte (\texttt{\small 10--27})
 fig.~\ref{fig:TCP_echo_client_1}. Esso ricalca la struttura del precedente
 client per il servizio \textit{daytime} (vedi
 sez.~\ref{sec:TCP_daytime_client}), e la prima parte (\texttt{\small 10--27})