X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=059a4e01dc910abae91655980c7676d411ed6fc7;hp=7b067b5d653770aeae4328c02dc49582b3715bec;hb=0c4a9ed958f4797e1cf4dc90e0c0358e302956f5;hpb=9949b501aea36905b12f069e11743b70b3e2df57 diff --git a/sockctrl.tex b/sockctrl.tex index 7b067b5..059a4e0 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -1,6 +1,6 @@ %% sockctrl.tex %% -%% Copyright (C) 2004-2014 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", @@ -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 -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 -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 @@ -1053,16 +1053,16 @@ relativi dati, riportata in terza colonna. \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 -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}, @@ -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 -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 @@ -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 -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)} @@ -1194,7 +1194,7 @@ rimandando alle rispettive pagine di manuale. \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} @@ -2075,6 +2075,11 @@ tab.~\ref{tab:sock_opt_socklevel}. \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 è @@ -3149,7 +3154,7 @@ strutture collegate all'uso delle opzioni TCP sono definite in \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$& &\texttt{int}& Ritorna da \func{accept} solo in presenza di dati.\\ \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$& &\texttt{int}& - Valore della \itindex{advertised~window} \textit{advertised window}.\\ + Valore della \textit{advertised window}.\\ \const{TCP\_INFO} &$\bullet$& & &\struct{tcp\_info}& Restituisce informazioni sul socket.\\ \const{TCP\_QUICKACK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& @@ -3345,10 +3350,10 @@ quantità di dettagli è fornita nel seguente elenco: \item[\const{TCP\_WINDOW\_CLAMP}] con questa opzione si legge o si imposta alla dimensione specificata, in byte, il valore dichiarato della - \itindex{advertised~window} \textit{advertised window} (vedi - sez.~\ref{sec:tcp_protocol_xxx}). Il kernel impone comunque una dimensione - minima pari a \texttt{SOCK\_MIN\_RCVBUF/2}. Questa opzione non deve essere - utilizzata in codice che vuole essere portabile. + \textit{advertised window} (vedi sez.~\ref{sec:tcp_protocol_xxx}). Il kernel + impone comunque una dimensione minima pari a \texttt{SOCK\_MIN\_RCVBUF/2}. + Questa opzione non deve essere utilizzata in codice che vuole essere + portabile. \begin{figure}[!htb] \footnotesize \centering @@ -3826,6 +3831,10 @@ sono le seguenti: \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 @@ -4095,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}} -\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 @@ -4253,14 +4262,14 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: quando si è sicuri che non è possibile ottimizzare il server in modo che sia in grado di accettare connessioni più rapidamente. -\item[\sysctlrelfile{net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel - quale frazione del buffer associato ad un socket\footnote{quello impostato - con \sysctlrelfile{net/ipv4}{tcp\_rmem}.} deve essere utilizzata - per la finestra del protocollo TCP\footnote{in sostanza il valore che - costituisce la \itindex{advertised~window} \textit{advertised window} - annunciata all'altro capo del socket.} e quale come buffer applicativo per - isolare la rete dalle latenze dell'applicazione. Prende un valore intero - che determina la suddetta frazione secondo la formula +\item[\sysctlrelfile{net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel quale + frazione del buffer associato ad un socket\footnote{quello impostato con + \sysctlrelfile{net/ipv4}{tcp\_rmem}.} deve essere utilizzata per la + finestra del protocollo TCP\footnote{in sostanza il valore che costituisce + la \textit{advertised window} annunciata all'altro capo del socket.} e + quale come buffer applicativo per isolare la rete dalle latenze + dell'applicazione. Prende un valore intero che determina la suddetta + frazione secondo la formula $\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se positivo o con $\texttt{buffer}-\texttt{buffer}/2^\texttt{tcp\_adv\_win\_scale}$ se negativo. Il default è 2 che significa che al buffer dell'applicazione