Riorganizzazione della parte finale del capitolo sulla gestione dei socket;
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 28 Mar 2006 21:59:21 +0000 (21:59 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 28 Mar 2006 21:59:21 +0000 (21:59 +0000)
create due nuove sezioni, accorpando le funzioni di controllo (ora suddivise
per tipo di socket) e i valori di sistema (sempre suddivisi per tipo di
socket)

fileunix.tex
sockctrl.tex

index 2d297ec77c517d8f7a2515e8b2bc628a304092be..8af781cc276be9409f4e9ba2ddcce4ea23026378 100644 (file)
@@ -1197,7 +1197,8 @@ relative. In particolare le tematiche relative all'I/O asincrono e ai vari
 meccanismi di notifica saranno trattate in maniera esaustiva in
 sez.~\ref{sec:file_asyncronous_access} mentre quelle relative al \textit{file
   locking}\index{file!locking} saranno esaminate in
-sez.~\ref{sec:file_locking}).
+sez.~\ref{sec:file_locking}). L'uso di questa funzione con i socket verrà
+trattato in sez.~\ref{sec:sock_ctrl_func}.
 
 Si tenga presente infine che quando si usa la funzione per determinare le
 modalità di accesso con cui è stato aperto il file (attraverso l'uso del
@@ -1283,11 +1284,12 @@ imprevedibili o indesiderati.
 
 Data la assoluta specificità della funzione, il cui comportamento varia da
 dispositivo a dispositivo, non è possibile fare altro che dare una descrizione
-sommaria delle sue caratteristiche; torneremo ad esaminare in seguito quelle
-relative ad alcuni casi specifici (ad esempio la gestione dei terminali è
-effettuata attraverso \func{ioctl} in quasi tutte le implementazioni di Unix),
-qui riportiamo solo i valori di alcuni comandi che sono definiti per ogni
-file:
+sommaria delle sue caratteristiche; torneremo ad esaminare in
+seguito\footnote{per l'uso con i socket si veda
+  sez.~\ref{sec:sock_ctrl_func}.}  quelle relative ad alcuni casi specifici
+(ad esempio la gestione dei terminali è effettuata attraverso \func{ioctl} in
+quasi tutte le implementazioni di Unix), qui riportiamo solo i valori di
+alcuni comandi che sono definiti per ogni file:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\const{FIOCLEX}] Imposta il flag di
   \textit{close-on-exec}\itindex{close-on-exec}.
@@ -1298,6 +1300,8 @@ file:
 \end{basedescript}
 relativi ad operazioni comunque eseguibili anche attraverso \func{fcntl}.
 
+
+
 % TODO estendere la lista delle ioctl
 
 
index 25ba9cf8dbf6de86ee437f8018696a3069737608..c751d0abdc5fe19c51745f87bac2bde0d7b9d124 100644 (file)
@@ -2988,36 +2988,46 @@ sez.~\ref{sec:net_sendmsg}).
 
 
 
-\section{Altre funzioni di controllo}
+\section{La gestione attraverso le funzioni di controllo}
 \label{sec:sock_ctrl_func}
 
-Benché la maggior parte delle caratteristiche dei socket sia gestita
-attraverso le due funzioni \func{setsockopt} e \func{getsockopt}, alcune
-funzionalità possono essere impostate attraverso quelle che sono le funzioni
-classiche per il controllo delle proprietà dei file, cioè \func{fcntl} e
-\func{ioctl}. 
+Benché la maggior parte delle caratteristiche dei socket sia gestibile con le
+funzioni \func{setsockopt} e \func{getsockopt}, alcune proprietà possono
+essere impostate attraverso le funzioni \func{fcntl} e \func{ioctl} già
+trattate in sez.~\ref{sec:file_fcntl} e sez.~\ref{sec:file_ioctl}; in
+quell'occasione abbiamo parlato di queste funzioni esclusivamente nell'ambito
+della loro applicazione a file descriptor associati a dei file normali; qui
+tratteremo invece i dettagli del loro utilizzo con file descriptor associati a
+dei socket.
 
 
-\subsection{L'uso di \func{ioctl} per i socket}
+\subsection{L'uso di \func{ioctl} e \func{fcntl} per i socket generici}
 \label{sec:sock_ioctl}
 
-Abbiamo già trattato l'uso di \func{ioctl} in sez.~\ref{sec:file_ioctl}, dove
-però ne abbiamo descritto le funzionalità nell'ambito della sua applicazione a
-file descriptor associati a file normali; tratteremo qui invece il suo uso
-specifico quando la si impiega su file descriptor associati a dei socket. 
-
-Quanto utilizzata con socket generici i valori utilizzabili per il secondo
-argomento della funzione (\param{request}, che indica il tipo di operazione
-richiesta) sono quelli riportati nel seguente elenco, il terzo argomento della
-funzione (quello usato per inviare o ricevere i dati) dipende dalla richiesta
-effettuata, ed è anch'esso illustrato nell'elenco in corrispondenza alla
-relativa richiesta:
+Tratteremo in questa sezione le caratteristiche specifiche delle funzioni
+\func{ioctl} e \func{fcntl} quando esse vengono utilizzate con dei socket
+generici. Quanto già detto in precedenza in sez.~\ref{sec:file_fcntl} e
+sez.~\ref{sec:file_ioctl} continua a valere; quello che tratteremo qui sono le
+operazioni ed i comandi che sono validi, o che hanno significati peculiari,
+quando queste funzioni vengono applicate a dei socket generici.
+
+Nell'elenco seguente si riportano i valori specifici che può assumere il
+secondo argomento della funzione \func{ioctl} (\param{request}, che indica il
+tipo di operazione da effettuare) quando essa viene applicata ad un socket
+generico. Nell'elenco si illustrerà anche, per ciascuna operazione, il tipo di
+dato usato come terzo argomento della funzione ed il significato che esso
+viene ad assumere.  Dato che in caso di lettura questi dati vengono restituiti
+come \itindex{value~result~argument} \textit{value result argument}, con
+queste operazioni il terzo argomento deve sempre essere passato come puntatore
+ad una variabile (o struttura) precedentemente allocata. Le costanti che
+identificano le operazioni sono le seguenti:
 \begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{SIOCGSTAMP}] restituisce una struttura \struct{timeval} con la
-  marca temporale dell'ultimo pacchetto ricevuto sul socket, questa operazione
-  può essere utilizzata per effettuare delle misurazioni precise del tempo di
-  andata e ritorno\footnote{il cosiddetto \itindex{round~trip~time}
-    \textit{round trip time}.} dei pacchetti sulla rete.
+\item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura
+  \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
+  socket, questa operazione può essere utilizzata per effettuare delle
+  misurazioni precise del tempo di andata e ritorno\footnote{il cosiddetto
+    \itindex{round~trip~time} \textit{round trip time}.} dei pacchetti sulla
+  rete.
 
 \item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
   \textit{process group} a cui inviare i segnali \const{SIGIO} e
@@ -3029,48 +3039,79 @@ relativa richiesta:
   capability \const{CAP\_KILL} si può impostare solo se stessi o il proprio
   \textit{process group}.
 
+\item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
+  relativamente all'eventuale processo o \itindex{process~group}
+  \textit{process group} cui devono essere inviati i segnali \const{SIGIO} e
+  \const{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
+  puntatore ad una variabile di tipo \type{pid\_t}, con lo stesso significato.
+  Qualora non sia presente nessuna impostazione verrà restituito un valore
+  nullo.
+
 \item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
-  socket. Questa significa (vedi sez.~\ref{sec:file_asyncronous_operation})
+  socket. Questo significa (vedi sez.~\ref{sec:file_asyncronous_operation})
   che verrà inviato il segnale di \const{SIGIO} (o quanto impostato con
   \const{F\_SETSIG}, vedi sez.~\ref{sec:file_fcntl}) in caso di eventi di I/O
   sul socket.
+\end{basedescript}
 
-\item[\const{SIOCGPGRP}] .
+Nel caso dei socket generici anche \func{fcntl} prevede un paio di comandi
+specifici; in questo caso il secondo argomento (\param{cmd}, che indica il
+comando) può assumere i due valori \const{FIOGETOWN} e \const{FIOSETOWN},
+mentre il terzo argomento dovrà essere un puntatore ad una variabile di tipo
+\type{pid\_t}. Questi due comandi sono una modalità alternativa di eseguire le
+stesse operazioni (lettura o impostazione del processo o del gruppo di
+processo che riceve i segnali) che si effettuano chiamando \func{ioctl} con
+\const{SIOCGPGRP} e \const{SIOCSPGRP}.
 
-\end{basedescript}
 
 
-\subsection{L'uso di \func{fcntl} per i socket}
-\label{sec:sock_fcntl}
 
-Come per \func{ioctl} abbiamo trattato l'uso di \func{fcntl} in
-sez.~\ref{sec:file_fcntl}, dove ne abbiamo descritto le funzionalità
-nell'ambito dell'applicazione su file normali; tratteremo qui il suo uso
-specifico quando la si impiega su file descriptor associati a dei socket. 
+\subsection{L'uso di \func{ioctl} per i socket IP}
+\label{sec:sock_ioctl_IP}
+
+
+
+\subsection{L'uso di \func{ioctl} per i socket TCP e UDP}
+\label{sec:sock_ioctl_TCP_UDP}
 
 
-\subsection{L'uso di \func{sysctl} per le proprietà della rete}
-\label{sec:sock_sysctl}
 
-Come ultimo argomento di questa sezione tratteremo l'uso della funzione
+
+
+\section{La gestione con \func{sysctl} ed il filesystem \texttt{/proc}}
+\label{sec:sock_sysctl_proc}
+
+
+Come ultimo argomento di questo capitolo tratteremo l'uso della funzione
 \func{sysctl} (che è stata introdotta nelle sue funzionalità generiche in
 sez.~\ref{sec:sys_sysctl}) per quanto riguarda le sue capacità di effettuare
-impostazioni relative alle proprietà dei socket. La differenza nell'uso di
-\func{sysctl} rispetto alle funzioni viste finora è che esse consentono di
-controllare le proprietà di un singolo socket, mentre con \func{sysctl} si
+impostazioni relative alle proprietà dei socket.  Dato che le stesse
+funzionalità sono controllabili direttamente attraverso il filesystem
+\texttt{/proc}, tratteremo anche di quest'ultimo.
+
+
+
+\subsection{L'uso di \func{sysctl} e \texttt{/proc} per le proprietà della
+  rete}
+\label{sec:sock_sysctl}
+
+La differenza nell'uso di \func{sysctl} e del filesystem \texttt{/proc}
+rispetto a quello delle funzioni \func{ioctl} e \func{fcntl} visto in
+sez.~\ref{sec:sock_ctrl_func} o all'uso di \func{getsockopt} e
+\func{setsockopt} è che queste funzioni consentono di controllare le proprietà
+di un singolo socket, mentre con \func{sysctl} e con \texttt{/proc} si
 impostano proprietà (o valori di default) validi a livello dell'intero
-sistema.
-
-Le opzioni disponibili per le proprietà della rete sono riportate nella
-gerarchia dei valori impostabili con \func{sysctl}, sotto il nodo
-\texttt{net}, o, se acceduti tramite l'interfaccia del filesystem
-\texttt{/proc}, sotto \texttt{/proc/sys/net}. In genere sotto questa directory
-compaiono le sottodirectory (corrispondenti ad altrettanti sottonodi per
-\func{sysctl}) relative ai vari protocolli e tipi di interfacce su cui è
-possibile intervenire per effettuare impostazioni; un contenuto tipico di
-questa directory è il seguente:
+sistema, e cioè per tutti i socket.
+
+
+Le opzioni disponibili per le proprietà della rete, nella gerarchia dei valori
+impostabili con \func{sysctl}, sono riportate sotto il nodo \texttt{net}, o,
+se acceduti tramite l'interfaccia del filesystem \texttt{/proc}, sotto
+\texttt{/proc/sys/net}. In genere sotto questa directory compaiono le
+sottodirectory (corrispondenti ad altrettanti sottonodi per \func{sysctl})
+relative ai vari protocolli e tipi di interfacce su cui è possibile
+intervenire per effettuare impostazioni; un contenuto tipico di questa
+directory è il seguente:
 \begin{verbatim}
 /proc/sys/net/
 |-- core
@@ -3081,13 +3122,24 @@ questa directory 
 |-- token-ring
 `-- unix
 \end{verbatim}
-e sono presenti varie centinaia di diversi parametri; nel nostro caso ci
-limiteremo a vedere quelli più significativi.
+e sono presenti varie centinaia di parametri, molti dei quali non sono neanche
+documentati; nel nostro caso ci limiteremo ad illustrare quelli più
+significativi.
+
+Si tenga presente infine che se è sempre possibile utilizzare il filesystem
+\texttt{/proc} come sostituto di \func{sysctl}, dato che i valori di nodi e
+sottonodi di quest'ultima sono mappati come file e directory sotto
+\texttt{/proc/sys/}, non è vero il contrario, ed in particolare Linux consente
+di impostare alcuni parametri o leggere lo stato della rete a livello di
+sistema sotto \texttt{/proc/net}.
+
+
+\subsection{I valori di controllo per i socket generici}
+\label{sec:sock_gen_sysctl}
 
 Nella directory \texttt{/proc/sys/net/core} sono disponibili i parametri
 generici validi per tutti i socket, quelli descritti anche nella rispettiva
-pagina di manuale.\footnote{quella accessibile con \texttt{man 7 socket}.}
-I principali sono:
+pagina di manuale, accessibile con \texttt{man 7 socket}.  Essi sono:
 
 \begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}}
 \item[\texttt{rmem\_default}] imposta la dimensione di default del buffer di
@@ -3105,17 +3157,21 @@ I principali sono:
   (rispettivamente flusso a regime e dimensione di picchi di emissione) che
   limita l'ammontare dei messaggi di avvertimento inviati dal kernel a causa
   di eventi esterni sulla rete.
-% TODO: spiegare il ucket filter e questa opzione
+% TODO: spiegare il bucket filter e questa opzione
 \item[\texttt{netdev\_max\_backlog}] numero massimo di pacchetti che possono
   essere contenuti nella coda di ingresso generale.
 \item[\texttt{optmem\_max}] lunghezza massima dei dati ancillari e di
   controllo (vedi sez.~\ref{sec:net_ancillary_data}).
 \end{basedescript}
 
+
+
+\subsection{I valori di controllo per i socket IP}
+\label{sec:sock_gen_sysctl}
+
 Nella directory \texttt{/proc/sys/net/ipv4} sono disponibili i parametri per i
-socket IPv4, descritti anche nella rispettiva pagina di
-manuale.\footnote{quella accessibile con \texttt{man 7 ip}.} I principali
-sono:
+socket IPv4, descritti anche nella rispettiva pagina di manuale, accessibile
+con \texttt{man 7 ip}. Essi sono:
 \begin{basedescript}{\desclabelwidth{3.2cm}\desclabelstyle{\nextlinelabel}}
 
 \item[\texttt{ip\_default\_ttl}] imposta il valore di default per il campo TTL
@@ -3166,7 +3222,7 @@ sono:
     di compilazione del kernel con l'opzione
     \texttt{CONFIG\_IP\_ALWAYS\_DEFRAG}.}
 
-\item[\texttt{}] 
+\item[\texttt{neigh/*}] La directory contiene i valori 
 
 
 \end{basedescript}
@@ -3225,9 +3281,10 @@ sono:
 % LocalWords:  process SIGIO SIGURG KILL FIOASYNC SIOCGPGRP filesystem proc ttl
 % LocalWords:  rmem wmem message cost burst bucket filter netdev backlog optmem
 % LocalWords:  forward dynaddr dial autoconfig local masquerading ipfrag high
-% LocalWords:  thresh low always defrag CONFIG
+% LocalWords:  thresh low always defrag CONFIG SETSIG cmd FIOGETOWN FIOSETOWN
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+% LocalWords:  quest'ultime neigh