Aggiunte in treno
[gapil.git] / sockctrl.tex
index 8bb8e4296518b6dc4ce64fe9900149ef5f3c6a8a..e96ed0e87ca2dc93859a16855ee2c5f1234a044c 100644 (file)
@@ -1,6 +1,6 @@
 %% sockctrl.tex
 %%
 %% sockctrl.tex
 %%
-%% Copyright (C) 2004-2012 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2015 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Prefazione",
@@ -1019,19 +1019,19 @@ 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} (dove \texttt{XXX} indica il
 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} (dove \texttt{XXX} indica il
-servizio) per ciascuna delle informazioni di rete mantenute dal
-\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che permettono
-rispettivamente di trovare una corrispondenza cercando per nome o per numero.
+servizio) per ciascuna delle informazioni di rete mantenute dal \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
 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
 
 L'elenco di queste funzioni è riportato nelle colonne finali di
 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 \itindex{Name~Service~Switch~(NSS)} \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 \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
 
 \begin{table}[!htb]
   \centering
@@ -1053,16 +1053,16 @@ relativi dati, riportata in terza colonna.
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
     \hline
   \end{tabular}
   \caption{Funzioni di risoluzione dei nomi per i vari servizi del
-    \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.}
+    \textit{Name Service Switch} riguardanti la rete.}
   \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
   \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
-\itindex{Name~Service~Switch~(NSS)} NSS a parte, si fa sempre riferimento ai
-dati mantenuti nei rispettivi file.
+una entità esterna; per le altre invece, estensioni fornite dal \textit{Name
+  Service Switch} 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 di rete più comuni (cioè \texttt{http}, \texttt{smtp},
 
 Dopo la risoluzione dei nomi a dominio una delle ricerche più comuni è quella
 sui nomi dei servizi di rete più comuni (cioè \texttt{http}, \texttt{smtp},
@@ -1096,15 +1096,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
 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
-  \itindex{Name~Service~Switch~(NSS)} \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 è \index{funzioni!rientranti} rientrante.
+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 è \index{funzioni!rientranti}
+rientrante.
 
 \begin{figure}[!htb]
   \footnotesize \centering
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -1131,13 +1131,13 @@ 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
 trovati nelle rispettive pagine di manuale.
 
 Oltre alle funzioni di ricerca esistono delle ulteriori funzioni che prevedono
-una lettura sequenziale delle informazioni mantenute nel
-\itindex{Name~Service~Switch~(NSS)} \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 \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)} 
 \begin{functions}
   \headdecl{netdb.h} 
   \funcdecl{void setservent(int stayopen)} 
@@ -1194,7 +1194,7 @@ rimandando alle rispettive pagine di manuale.
     \hline
   \end{tabular}
   \caption{Funzioni lettura sequenziale dei dati del
     \hline
   \end{tabular}
   \caption{Funzioni lettura sequenziale dei dati del
-    \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch}.} 
+    \textit{Name Service Switch}.} 
   \label{tab:name_sequential_read}
 \end{table}
 
   \label{tab:name_sequential_read}
 \end{table}
 
@@ -1723,12 +1723,12 @@ Una volta definite le variabili necessarie (\texttt{\small 3--5}) la funzione
 prima (\texttt{\small 6}) azzera il contenuto della struttura \var{hint} e poi
 provvede (\texttt{\small 7--9}) ad inizializzarne i valori necessari per la
 chiamata (\texttt{\small 10}) a \func{getaddrinfo}. Di quest'ultima si
 prima (\texttt{\small 6}) azzera il contenuto della struttura \var{hint} e poi
 provvede (\texttt{\small 7--9}) ad inizializzarne i valori necessari per la
 chiamata (\texttt{\small 10}) a \func{getaddrinfo}. Di quest'ultima si
-controlla (\texttt{\small 12-16}) il codice di ritorno, in modo da stampare un
+controlla (\texttt{\small 12--16}) il codice di ritorno, in modo da stampare un
 avviso di errore, azzerare \var{errno} ed uscire in caso di errore.  Dato che
 ad una macchina possono corrispondere più indirizzi IP, e di tipo diverso (sia
 IPv4 che IPv6), mentre il servizio può essere in ascolto soltanto su uno solo
 di questi, si provvede a tentare la connessione per ciascun indirizzo
 avviso di errore, azzerare \var{errno} ed uscire in caso di errore.  Dato che
 ad una macchina possono corrispondere più indirizzi IP, e di tipo diverso (sia
 IPv4 che IPv6), mentre il servizio può essere in ascolto soltanto su uno solo
 di questi, si provvede a tentare la connessione per ciascun indirizzo
-restituito all'interno di un ciclo (\texttt{\small 18-40}) di scansione della
+restituito all'interno di un ciclo (\texttt{\small 18--40}) di scansione della
 lista restituita da \func{getaddrinfo}, ma prima (\texttt{\small 17}) si salva
 il valore del puntatore per poterlo riutilizzare alla fine per disallocare la
 lista.
 lista restituita da \func{getaddrinfo}, ma prima (\texttt{\small 17}) si salva
 il valore del puntatore per poterlo riutilizzare alla fine per disallocare la
 lista.
@@ -1738,7 +1738,7 @@ validi, ed inizia (\texttt{\small 19}) con l'apertura del socket; se questa
 fallisce si controlla (\texttt{\small 20}) se sono disponibili altri
 indirizzi, nel qual caso si passa al successivo (\texttt{\small 21}) e si
 riprende (\texttt{\small 22}) il ciclo da capo; se non ve ne sono si stampa
 fallisce si controlla (\texttt{\small 20}) se sono disponibili altri
 indirizzi, nel qual caso si passa al successivo (\texttt{\small 21}) e si
 riprende (\texttt{\small 22}) il ciclo da capo; se non ve ne sono si stampa
-l'errore ritornando immediatamente (\texttt{\small 24-27}). Quando la
+l'errore ritornando immediatamente (\texttt{\small 24--27}). Quando la
 creazione del socket ha avuto successo si procede (\texttt{\small 29})
 direttamente con la connessione, di nuovo in caso di fallimento viene ripetuto
 (\texttt{\small 30--38}) il controllo se vi sono o no altri indirizzi da
 creazione del socket ha avuto successo si procede (\texttt{\small 29})
 direttamente con la connessione, di nuovo in caso di fallimento viene ripetuto
 (\texttt{\small 30--38}) il controllo se vi sono o no altri indirizzi da
@@ -1808,11 +1808,11 @@ del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella
 rispettiva struttura degli indirizzi.
 
 Come già detto la funzione è analoga a \texttt{sockconn} ed inizia azzerando
 rispettiva struttura degli indirizzi.
 
 Come già detto la funzione è analoga a \texttt{sockconn} ed inizia azzerando
-ed inizializzando (\texttt{\small 6-11}) opportunamente la struttura
+ed inizializzando (\texttt{\small 6--11}) opportunamente la struttura
 \var{hint} con i valori ricevuti come argomenti, soltanto che in questo caso
 si è usata (\texttt{\small 8}) una impostazione specifica dei flag di
 \var{hint} usando \const{AI\_PASSIVE} per indicare che il socket sarà usato
 \var{hint} con i valori ricevuti come argomenti, soltanto che in questo caso
 si è usata (\texttt{\small 8}) una impostazione specifica dei flag di
 \var{hint} usando \const{AI\_PASSIVE} per indicare che il socket sarà usato
-per una apertura passiva. Per il resto la chiamata (\texttt{\small 12-18}) a
+per una apertura passiva. Per il resto la chiamata (\texttt{\small 12--18}) a
 \func{getaddrinfo} e ed il ciclo principale (\texttt{\small 20--42}) sono
 identici, solo che si è sostituita (\texttt{\small 31}) la chiamata a
 \func{connect} con una chiamata a \func{bind}. Anche la conclusione
 \func{getaddrinfo} e ed il ciclo principale (\texttt{\small 20--42}) sono
 identici, solo che si è sostituita (\texttt{\small 31}) la chiamata a
 \func{connect} con una chiamata a \func{bind}. Anche la conclusione
@@ -2075,6 +2075,11 @@ tab.~\ref{tab:sock_opt_socklevel}.
   \label{tab:sock_opt_socklevel}
 \end{table}
 
   \label{tab:sock_opt_socklevel}
 \end{table}
 
+% TODO aggiungere e documentare SO_ATTACH_BPF, introdotta con il kernel 3.19,
+% vedi http://lwn.net/Articles/625224/
+% TODO aggiungere e documentare SO_INCOMING_CPU, introdotta con il kernel 3.19,
+% vedi https://lwn.net/Articles/626150/
+
 La tabella elenca le costanti che identificano le singole opzioni da usare
 come valore per \param{optname}; le due colonne seguenti indicano per quali
 delle due funzioni (\func{getsockopt} o \func{setsockopt}) l'opzione è
 La tabella elenca le costanti che identificano le singole opzioni da usare
 come valore per \param{optname}; le due colonne seguenti indicano per quali
 delle due funzioni (\func{getsockopt} o \func{setsockopt}) l'opzione è
@@ -2340,6 +2345,9 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
 % Documentation/networking/timestamping.txt
 
 
 % Documentation/networking/timestamping.txt
 
 
+% TOFO documentare SO_REUSEPORT introdotta con il kernel 3.9, vedi
+% http://git.kernel.org/linus/c617f398edd4db2b8567a28e899a88f8f574798d 
+
 \end{basedescript}
 
 
 \end{basedescript}
 
 
@@ -2529,7 +2537,7 @@ guida.
 In realtà tutto quello che si è fatto è stato introdurre nella nuova funzione
 (\texttt{\small 1}) un nuovo argomento intero, \param{reuse}, che conterrà il
 valore logico da usare nella successiva chiamata (\texttt{\small 14}) a
 In realtà tutto quello che si è fatto è stato introdurre nella nuova funzione
 (\texttt{\small 1}) un nuovo argomento intero, \param{reuse}, che conterrà il
 valore logico da usare nella successiva chiamata (\texttt{\small 14}) a
-\func{setsockopt}. Si è poi aggiunta una sezione (\texttt{\small 13-17}) che
+\func{setsockopt}. Si è poi aggiunta una sezione (\texttt{\small 13--17}) che
 esegue l'impostazione dell'opzione fra la chiamata a \func{socket} e quella a
 \func{bind}.
 
 esegue l'impostazione dell'opzione fra la chiamata a \func{socket} e quella a
 \func{bind}.
 
@@ -2546,7 +2554,7 @@ usata (\texttt{\small 14}) come ultimo argomento di \func{setsockopt}. Il
 valore di default di questa variabile è nullo, ma usando l'opzione \texttt{-r}
 nell'invocazione del server (al solito la gestione delle opzioni non è
 riportata in fig.~\ref{fig:TCP_echod_fifth}) se ne potrà impostare ad 1 il
 valore di default di questa variabile è nullo, ma usando l'opzione \texttt{-r}
 nell'invocazione del server (al solito la gestione delle opzioni non è
 riportata in fig.~\ref{fig:TCP_echod_fifth}) se ne potrà impostare ad 1 il
-valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a
+valore, per cui in tal caso la successiva chiamata (\texttt{\small 13--17}) a
 \func{setsockopt} attiverà l'opzione \const{SO\_REUSEADDR}.
 
 \begin{figure}[!htbp] 
 \func{setsockopt} attiverà l'opzione \const{SO\_REUSEADDR}.
 
 \begin{figure}[!htbp] 
@@ -3823,6 +3831,10 @@ sono le seguenti:
 
 \end{basedescript}
 
 
 \end{basedescript}
 
+
+% TODO aggiunta con il kernel 3.14 SIOCGHWTSTAMP per ottenere il timestamp
+% hardware senza modificarlo
+
 Una ulteriore operazione, che consente di ricavare le caratteristiche delle
 interfacce di rete, è \const{SIOCGIFCONF}; però per ragioni di compatibilità
 questa operazione è disponibile soltanto per i socket della famiglia
 Una ulteriore operazione, che consente di ricavare le caratteristiche delle
 interfacce di rete, è \const{SIOCGIFCONF}; però per ragioni di compatibilità
 questa operazione è disponibile soltanto per i socket della famiglia
@@ -4092,8 +4104,8 @@ 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:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
 nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di
 questi però non è documentato:
 \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}}
-\item[\sysctlrelfile{net/core}{dev\_weight}] blocco di lavoro
-  (\textit{work quantum}) dello scheduler di processo dei pacchetti.
+\item[\sysctlrelfile{net/core}{dev\_weight}] blocco di lavoro (\textit{work
+    quantum}) dello \textit{scheduler} di processo dei pacchetti.
 
 % TODO da documentare meglio
 
 
 % TODO da documentare meglio