X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=d94093e3d7f83462c3b29dceda144a5af72481c2;hp=429fdecc17d973cd142c9ff6bace81e5ce9b94c8;hb=4d46f47e3a0e08440812b334f79489d92814e6d2;hpb=9b7af600ff0f73bc946c9d160c320667c7a91347 diff --git a/sockctrl.tex b/sockctrl.tex index 429fdec..d94093e 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -650,7 +650,7 @@ definizione è riportata in fig.~\ref{fig:sock_hostent_struct}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/hostent.h} \end{minipage} \caption{La struttura \structd{hostent} per la risoluzione dei nomi a @@ -1107,7 +1107,7 @@ memoria statica e che quindi la funzione non è rientrante. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/servent.h} \end{minipage} \caption{La struttura \structd{servent} per la risoluzione dei nomi dei @@ -1272,7 +1272,7 @@ strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/addrinfo.h} \end{minipage} \caption{La struttura \structd{addrinfo} usata nella nuova interfaccia POSIX @@ -2093,7 +2093,7 @@ gestione dei socket, e pertanto il loro utilizzo sarà approfondito separatamente in sez.~\ref{sec:sock_options_main}. Quello che segue è quindi soltanto un elenco più dettagliato della breve descrizione di tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{SO\_KEEPALIVE}] questa opzione abilita un meccanismo di verifica della persistenza di una connessione associata al socket (ed è pertanto @@ -2599,10 +2599,8 @@ Infine il quarto caso è quello in cui si vuole effettivamente ottenere un \func{bind} su un indirizzo ed una porta che sono già \textsl{legati} ad un altro socket. Questo ovviamente non ha senso per il normale traffico di rete, in cui i pacchetti vengono scambiati direttamente fra due applicazioni; ma -quando un sistema supporta il traffico in \itindex{multicast} -\textit{multicast}, in cui una applicazione invia i pacchetti a molte altre -(vedi sez.~\ref{sec:xxx_multicast}), allora ha senso che su una macchina i -pacchetti provenienti dal traffico in \itindex{multicast} \textit{multicast} +quando un sistema supporta il traffico in \textit{multicast}, allora ha senso +che su una macchina i pacchetti provenienti dal traffico in \textit{multicast} possano essere ricevuti da più applicazioni\footnote{l'esempio classico di traffico in \textit{multicast} è quello di uno streaming di dati (audio, video, ecc.), l'uso del \textit{multicast} consente in tal caso di @@ -2611,7 +2609,6 @@ possano essere ricevuti da più applicazioni\footnote{l'esempio classico di questo caso è perfettamente logico aspettarsi che sulla stessa macchina più utenti possano lanciare un programma che permetta loro di ricevere gli stessi dati.} o da diverse istanze della stessa applicazione. -\itindex{multicast} In questo caso utilizzando \const{SO\_REUSEADDR} si consente ad una applicazione eseguire \func{bind} sulla stessa porta ed indirizzo usata da @@ -2619,10 +2616,10 @@ un'altra, così che anche essa possa ricevere gli stessi pacchetti (chiaramente la cosa non ha alcun senso per i socket TCP, ed infatti in questo tipo di applicazione è normale l'uso del protocollo UDP). La regola è che quando si hanno più applicazioni che hanno eseguito \func{bind} sulla stessa porta, di -tutti pacchetti destinati ad un indirizzo di \itindex{broadcast} -\textit{broadcast} o di \itindex{multicast} \textit{multicast} viene inviata -una copia a ciascuna applicazione. Non è definito invece cosa accade qualora -il pacchetto sia destinato ad un indirizzo normale (unicast). +tutti pacchetti destinati ad un indirizzo di \textit{broadcast} o di +\textit{multicast} viene inviata una copia a ciascuna applicazione. Non è +definito invece cosa accade qualora il pacchetto sia destinato ad un indirizzo +normale (unicast). Essendo questo un caso particolare in alcuni sistemi (come BSD) è stata introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta @@ -2658,7 +2655,7 @@ dal kernel. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/linger.h} \end{minipage} \caption{La struttura \structd{linger} richiesta come valore dell'argomento @@ -2689,7 +2686,7 @@ che termina immediatamente la connessione. Un esempio di questo comportamento si può abilitare nel nostro client del servizio \textit{echo} utilizzando l'opzione \texttt{-r}; riportiamo in fig.~\ref{fig:TCP_echo_sixth} la sezione di codice che permette di introdurre -questa funzionalità,; al solito il codice completo è disponibile nei sorgenti +questa funzionalità; al solito il codice completo è disponibile nei sorgenti allegati. \begin{figure}[!htbp] @@ -2752,7 +2749,7 @@ file. \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|c|c|c|l|l|} + \begin{tabular}[c]{|l|c|c|c|l|p{6cm}|} \hline \textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}& \textbf{Descrizione}\\ @@ -2787,17 +2784,15 @@ file. \const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Imposta l'opzione \textit{IP router alert} sui pacchetti.\\ \const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& - Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\ + Imposta il TTL per i pacchetti \textit{multicast}.\\ \const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Controlla il reinvio a se stessi dei dati di \itindex{multicast} - \textit{multicast}.\\ + Controlla il reinvio a se stessi dei dati di \textit{multicast}.\\ \const{IP\_ADD\_MEMBERSHIP} & &$\bullet$& &\struct{ip\_mreqn}& - Si unisce a un gruppo di \itindex{multicast} \textit{multicast}.\\ + Si unisce a un gruppo di \textit{multicast}.\\ \const{IP\_DROP\_MEMBERSHIP}& &$\bullet$& &\struct{ip\_mreqn}& Si sgancia da un gruppo di \textit{multicast}.\\ \const{IP\_MULTICAST\_IF} & &$\bullet$& &\struct{ip\_mreqn}& - Imposta l'interfaccia locale di un socket \itindex{multicast} - \textit{multicast}.\\ + Imposta l'interfaccia locale di un socket \textit{multicast}.\\ \hline \end{tabular} \caption{Le opzioni disponibili al livello \const{SOL\_IP}.} @@ -2807,7 +2802,7 @@ file. Le descrizioni riportate in tab.~\ref{tab:sock_opt_iplevel} sono estremamente succinte, una maggiore quantità di dettagli sulle varie opzioni è fornita nel seguente elenco: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{IP\_OPTIONS}] l'opzione permette di impostare o leggere le @@ -2835,7 +2830,7 @@ seguente elenco: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/pktinfo.h} \end{minipage} \caption{La struttura \structd{pktinfo} usata dall'opzione @@ -3028,7 +3023,6 @@ sez.~\ref{sec:net_sendmsg}). sez.~\ref{sec:IP_options}) che devono essere inoltrati al socket corrente. Può essere usata soltanto per socket di tipo raw. -\itindbeg{multicast} \item[\const{IP\_MULTICAST\_TTL}] L'opzione permette di impostare o leggere il valore del campo TTL per i pacchetti \textit{multicast} in uscita associati al socket. È importante che questo valore sia il più basso possibile, ed il @@ -3065,7 +3059,7 @@ sez.~\ref{sec:net_sendmsg}). \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ip_mreqn.h} \end{minipage} \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei @@ -3085,7 +3079,6 @@ sez.~\ref{sec:net_sendmsg}). % TODO chiarire quale è la struttura \struct{ip\_mreq} -\itindend{multicast} \end{basedescript} @@ -3168,8 +3161,7 @@ Le descrizioni delle varie opzioni riportate in tab.~\ref{tab:sock_opt_tcplevel} sono estremamente sintetiche ed indicative, la spiegazione del funzionamento delle singole opzioni con una maggiore quantità di dettagli è fornita nel seguente elenco: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} - +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{TCP\_NODELAY}] il protocollo TCP utilizza un meccanismo di bufferizzazione dei dati uscenti, per evitare la trasmissione di tanti @@ -3353,7 +3345,7 @@ quantità di dettagli è fornita nel seguente elenco: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/tcp_info.h} \end{minipage} \caption{La struttura \structd{tcp\_info} contenente le informazioni sul @@ -3459,7 +3451,7 @@ quantità di dettagli è fornita nel seguente elenco: \begin{table}[!htb] \centering \footnotesize - \begin{tabular}[c]{|l|l|p{10cm}|} + \begin{tabular}[c]{|l|l|l|} \hline \textbf{Nome}&\textbf{Configurazione}&\textbf{Riferimento} \\ \hline @@ -3528,7 +3520,7 @@ file.\footnote{come per TCP, la definizione delle opzioni effettivamente Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel} sono un semplice riferimento, una maggiore quantità di dettagli sulle caratteristiche delle opzioni citate è quello dell'elenco seguente: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga \const{TCP\_CORK} vista in precedenza per il protocollo TCP, e quando @@ -3579,7 +3571,7 @@ come \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}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \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 @@ -3635,7 +3627,7 @@ permette di impostare e rilevare le funzionalità delle interfacce di rete. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ifreq.h} \end{minipage} \caption{La struttura \structd{ifreq} utilizzata dalle \func{ioctl} per le @@ -3658,7 +3650,7 @@ quelle che modificano le caratteristiche dell'interfaccia) sono privilegiate e richiedono i privilegi di amministratore o la \textit{capability} \const{CAP\_NET\_ADMIN}, altrimenti si otterrà un errore di \errval{EPERM}. Le costanti che identificano le operazioni disponibili sono le seguenti: -\begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{SIOCGIFNAME}] questa è l'unica operazione che usa il campo \var{ifr\_name} per restituire un risultato, tutte le altre lo utilizzano per indicare l'interfaccia sulla quale operare. L'operazione richiede che si @@ -3709,14 +3701,13 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: pacchetti che vede passare, compresi quelli non direttamente indirizzati a lei).\\ \const{IFF\_NOTRAILERS}& Evita l'uso di \textit{trailer} nei pacchetti.\\ - \const{IFF\_ALLMULTI} & Riceve tutti i pacchetti di \itindex{multicast} - \textit{multicast}.\\ + \const{IFF\_ALLMULTI} & Riceve tutti i pacchetti di \textit{multicast}.\\ \const{IFF\_MASTER} & L'interfaccia è il master di un bundle per il bilanciamento di carico.\\ \const{IFF\_SLAVE} & L'interfaccia è uno slave di un bundle per il bilanciamento di carico.\\ \const{IFF\_MULTICAST} & L'interfaccia ha il supporto per il - \textit{multicast} \itindex{multicast} attivo.\\ + \textit{multicast} attivo.\\ \const{IFF\_PORTSEL} & L'interfaccia può impostare i suoi parametri hardware (con l'uso di \struct{ifmap}).\\ \const{IFF\_AUTOMEDIA} & L'interfaccia è in grado di selezionare @@ -3783,7 +3774,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ifmap.h} \end{minipage} \caption{La struttura \structd{ifmap} utilizzata per leggere ed impostare i @@ -3797,19 +3788,19 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: struttura \struct{ifmap}, secondo la definizione di fig.~\ref{fig:netdevice_ifmap_struct}. -\item[\const{SIOCADDMULTI}] aggiunge un indirizzo di \itindex{multicast} - \textit{multicast} ai filtri del livello di collegamento associati - dell'interfaccia. Si deve usare un indirizzo hardware da specificare - attraverso il campo \var{ifr\_hwaddr}, che conterrà l'opportuna struttura - \struct{sockaddr}; l'operazione è privilegiata. Per una modalità alternativa - per eseguire la stessa operazione si possono usare i \textit{packet socket}, - vedi sez.~\ref{sec:packet_socket}. +\item[\const{SIOCADDMULTI}] aggiunge un indirizzo di \textit{multicast} ai + filtri del livello di collegamento associati dell'interfaccia. Si deve usare + un indirizzo hardware da specificare attraverso il campo \var{ifr\_hwaddr}, + che conterrà l'opportuna struttura \struct{sockaddr}; l'operazione è + privilegiata. Per una modalità alternativa per eseguire la stessa operazione + si possono usare i \textit{packet socket}, vedi + sez.~\ref{sec:packet_socket}. -\item[\const{SIOCDELMULTI}] rimuove un indirizzo di \itindex{multicast} - \textit{multicast} ai filtri del livello di collegamento dell'interfaccia, - vuole un indirizzo hardware specificato come per \const{SIOCADDMULTI}. Anche - questa operazione è privilegiata e può essere eseguita in forma alternativa - con i \textit{packet socket}. +\item[\const{SIOCDELMULTI}] rimuove un indirizzo di \textit{multicast} ai + filtri del livello di collegamento dell'interfaccia, vuole un indirizzo + hardware specificato come per \const{SIOCADDMULTI}. Anche questa operazione + è privilegiata e può essere eseguita in forma alternativa con i + \textit{packet socket}. \item[\const{SIOCGIFTXQLEN}] permette di leggere la lunghezza della coda di trasmissione del dispositivo associato all'interfaccia specificata nel campo @@ -3839,7 +3830,7 @@ fig.~\ref{fig:netdevice_ifconf_struct}. \begin{figure}[!htb] \footnotesize \centering - \begin{minipage}[c]{\textwidth} + \begin{minipage}[c]{0.80\textwidth} \includestruct{listati/ifconf.h} \end{minipage} \caption{La struttura \structd{ifconf}.} @@ -3939,7 +3930,7 @@ come possibile valore per il secondo argomento della funzione le costanti illustrate nell'elenco seguente; il terzo argomento della funzione, gestito come \textit{value result argument}, deve essere sempre il puntatore ad una variabile di tipo \ctyp{int}: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{SIOCINQ}] restituisce la quantità di dati non ancora letti presenti nel buffer di ricezione; il socket non deve essere in stato \texttt{LISTEN}, altrimenti si avrà un errore di \errval{EINVAL}. @@ -3972,7 +3963,7 @@ dalla relativa pagina di manuale accessibile con \texttt{man 7 udp}, sono quelle indicate dalle costanti del seguente elenco; come per i socket TCP il terzo argomento viene gestito come \textit{value result argument} e deve essere un puntatore ad una variabile di tipo \ctyp{int}: -\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}} +\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} \item[\const{FIONREAD}] restituisce la dimensione in byte del primo pacchetto in attesa di ricezione, o 0 qualora non ci sia nessun pacchetto. \item[\const{TIOCOUTQ}] restituisce il numero di byte presenti nella coda di