From 5e9607e62d03da3360bd27146e788a89a0820ab9 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Sun, 12 Aug 2018 22:02:20 +0200 Subject: [PATCH] Sistemazione ulteriore degli overfull hbox --- fileadv.tex | 16 ++++----- fileio.tex | 2 +- gapil.tex | 4 +++ ipc.tex | 38 ++++++++++---------- listati/ip_msfilter.h | 3 +- listati/resolv_option_def.c | 2 +- netlayer.tex | 13 ++++--- network.tex | 38 ++++++++++---------- signal.tex | 44 +++++++++++------------ sockctrl.tex | 70 +++++++++++++++++++------------------ socket.tex | 2 +- system.tex | 22 ++++++------ tcpsock.tex | 4 +-- 13 files changed, 131 insertions(+), 127 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index 2d95b7b..6bbc00c 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -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}. -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 @@ -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}. -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 @@ -2221,7 +2221,7 @@ successivo con \func{fcntl}. \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 @@ -2251,8 +2251,8 @@ ad eventuali più segnali pendenti, fino al numero massimo di strutture \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à diff --git a/fileio.tex b/fileio.tex index 67c2a20..b7db3a7 100644 --- a/fileio.tex +++ b/fileio.tex @@ -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} -(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}? diff --git a/gapil.tex b/gapil.tex index d450732..b444891 100644 --- a/gapil.tex +++ b/gapil.tex @@ -179,6 +179,10 @@ hyperfootnotes=false]{hyperref} % 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} diff --git a/ipc.tex b/ipc.tex index f820a13..4d9c357 100644 --- 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*} -\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 è @@ -1362,7 +1362,7 @@ come \ctyp{short}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{.90\textwidth} + \begin{minipage}[c]{.91\textwidth} \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{minipage}[c]{.80\textwidth} + \begin{minipage}[c]{.85\textwidth} \includestruct{listati/semid_ds.h} \end{minipage} \normalsize @@ -1975,7 +1975,7 @@ quanto riguarda gli altri campi invece: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{.80\textwidth} + \begin{minipage}[c]{.85\textwidth} \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. -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 @@ -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. -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 @@ -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}. -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à @@ -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. -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 @@ -4990,10 +4990,8 @@ Sleeping for 3 seconds \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} ... diff --git a/listati/ip_msfilter.h b/listati/ip_msfilter.h index dbd40b8..b0cee25 100644 --- a/listati/ip_msfilter.h +++ b/listati/ip_msfilter.h @@ -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 */ - 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 */ }; diff --git a/listati/resolv_option_def.c b/listati/resolv_option_def.c index 8d45d78..631440f 100644 --- a/listati/resolv_option_def.c +++ b/listati/resolv_option_def.c @@ -1 +1 @@ -#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH) +#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH) diff --git a/netlayer.tex b/netlayer.tex index 5516cec..ab007dc 100644 --- a/netlayer.tex +++ b/netlayer.tex @@ -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 -\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 -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 diff --git a/network.tex b/network.tex index 0d39a11..56120df 100644 --- a/network.tex +++ b/network.tex @@ -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 -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 -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 @@ -29,7 +29,6 @@ programmi. \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à @@ -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 -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 @@ -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 - 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 @@ -568,18 +567,19 @@ trasporto. \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}. -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 diff --git a/signal.tex b/signal.tex index fdd2e6f..8b25219 100644 --- a/signal.tex +++ b/signal.tex @@ -944,16 +944,16 @@ situazione è il seguente: 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}) -\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 @@ -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*} -\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}). -\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 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}, @@ -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. -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} @@ -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. -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, diff --git a/sockctrl.tex b/sockctrl.tex index fcfa257..07c657e 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -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. -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 @@ -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}). - 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 @@ -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 - 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 @@ -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 - 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 @@ -3098,7 +3098,7 @@ manuale, nel caso specifico la documentazione si può consultare con \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}\\ @@ -3192,7 +3192,7 @@ seguente elenco: \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 @@ -3213,7 +3213,7 @@ differente dimensione passata in \param{optlen}. \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 @@ -3280,7 +3280,7 @@ per collegarsi a diverse sorgenti. \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 @@ -3288,13 +3288,14 @@ per collegarsi a diverse sorgenti. \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 -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 @@ -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} - 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 @@ -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}. - Ad esempio con i socket UDP si potrà ottenere una stima iniziale della + Ad esempio con i socket UDP si può 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 @@ -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} -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. @@ -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 - 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. -\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 @@ -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 - 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 diff --git a/socket.tex b/socket.tex index 6cd3468..6773fc2 100644 --- a/socket.tex +++ b/socket.tex @@ -512,7 +512,7 @@ sufficiente. \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 diff --git a/system.tex b/system.tex index 74d6dd3..31ce9b2 100644 --- a/system.tex +++ b/system.tex @@ -617,7 +617,7 @@ dall'argomento \param{info}. \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 @@ -1094,12 +1094,12 @@ corrispondente al valore del campo \var{ut\_id} specificato in \param{ut}. \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. @@ -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 -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 diff --git a/tcpsock.tex b/tcpsock.tex index 344ee30..6f7ca7d 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -1780,8 +1780,8 @@ stamparla sullo \textit{standard output}. \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}) -- 2.30.2