X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=5906b98aee79993b55d3e311b8823044b9bedfb9;hp=196c410f98fee1a413be763fa9b0355f75557eb5;hb=7208522fd60468969d96dba5d8dd2cbd24b75b89;hpb=88d22f4971adcbdb816c405a1375ae0a8d57bdde diff --git a/sockctrl.tex b/sockctrl.tex index 196c410..5906b98 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -828,10 +828,10 @@ lunghezza di questo buffer devono essere indicati con gli argomenti \param{buf} e \param{buflen}. Gli ultimi due argomenti vengono utilizzati per avere indietro i risultati -come \itindex{value~result~argument} \textit{value result argument}, si deve -specificare l'indirizzo della variabile su cui la funzione dovrà salvare il -codice di errore con \param{h\_errnop} e quello su cui dovrà salvare il -puntatore che si userà per accedere i dati con \param{result}. +come \textit{value result argument}, si deve specificare l'indirizzo della +variabile su cui la funzione dovrà salvare il codice di errore +con \param{h\_errnop} e quello su cui dovrà salvare il puntatore che si userà +per accedere i dati con \param{result}. In caso di successo entrambe le funzioni restituiscono un valore nullo, altrimenti restituiscono un codice di errore negativo e all'indirizzo puntato @@ -1263,13 +1263,12 @@ TCP o UDP) che questi possono utilizzare. Come ultimo argomento in \param{res} deve essere passato un puntatore ad una variabile (di tipo puntatore ad una struttura \struct{addrinfo}) che verrà -utilizzata dalla funzione per riportare (come \itindex{value~result~argument} -\textit{value result argument}) i propri risultati. La funzione infatti è -rientrante, ed alloca autonomamente tutta la memoria necessaria in cui -verranno riportati i risultati della risoluzione. La funzione scriverà -all'indirizzo puntato da \param{res} il puntatore iniziale ad una -\itindex{linked~list} \textit{linked list} di strutture di tipo -\struct{addrinfo} contenenti tutte le informazioni ottenute. +utilizzata dalla funzione per riportare (come \textit{value result argument}) +i propri risultati. La funzione infatti è rientrante, ed alloca autonomamente +tutta la memoria necessaria in cui verranno riportati i risultati della +risoluzione. La funzione scriverà all'indirizzo puntato da \param{res} il +puntatore iniziale ad una \itindex{linked~list} \textit{linked list} di +strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. \begin{figure}[!htb] \footnotesize \centering @@ -1753,7 +1752,7 @@ valore del relativo puntatore precedentemente (\texttt{\small 17}) salvato. Si noti come per la funzione sia del tutto irrilevante se la struttura ritornata contiene indirizzi IPv6 o IPv4, in quanto si fa uso direttamente dei dati relativi alle strutture degli indirizzi di \struct{addrinfo} che sono -\index{tipo!opaco} opachi rispetto all'uso della funzione \func{connect}. +opachi rispetto all'uso della funzione \func{connect}. \begin{figure}[!htbp] \footnotesize \centering @@ -1993,12 +1992,11 @@ di \func{setsockopt}, anche se non è detto che tutte le opzioni siano definite per entrambe le funzioni. In questo caso \param{optval} viene usato per ricevere le informazioni ed indica l'indirizzo a cui andranno scritti i dati letti dal socket, infine \param{optlen} diventa un puntatore ad una variabile -che viene usata come \itindex{value~result~argument} \textit{value result - argument} per indicare, prima della chiamata della funzione, la lunghezza -del buffer allocato per \param{optval} e per ricevere indietro, dopo la -chiamata della funzione, la dimensione effettiva dei dati scritti su di esso. -Se la dimensione del buffer allocato per \param{optval} non è sufficiente si -avrà un errore. +che viene usata come \textit{value result argument} per indicare, prima della +chiamata della funzione, la lunghezza del buffer allocato per \param{optval} e +per ricevere indietro, dopo la chiamata della funzione, la dimensione +effettiva dei dati scritti su di esso. Se la dimensione del buffer allocato +per \param{optval} non è sufficiente si avrà un errore. @@ -2601,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 @@ -2613,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 @@ -2621,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 @@ -2789,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}.} @@ -3030,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 @@ -3087,7 +3079,6 @@ sez.~\ref{sec:net_sendmsg}). % TODO chiarire quale è la struttura \struct{ip\_mreq} -\itindend{multicast} \end{basedescript} @@ -3577,10 +3568,10 @@ 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: +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}} \item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura \struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul @@ -3711,14 +3702,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 @@ -3799,19 +3789,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 @@ -3939,8 +3929,8 @@ Le operazioni di controllo disponibili per i socket TCP sono illustrate dalla relativa pagina di manuale, accessibile con \texttt{man 7 tcp}, e prevedono come possibile valore per il secondo argomento della funzione le costanti illustrate nell'elenco seguente; il terzo argomento della funzione, gestito -come \itindex{value~result~argument} \textit{value result argument}, deve -essere sempre il puntatore ad una variabile di tipo \ctyp{int}: +come \textit{value result argument}, deve essere sempre il puntatore ad una +variabile di tipo \ctyp{int}: \begin{basedescript}{\desclabelwidth{2.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 @@ -3972,9 +3962,8 @@ essere sempre il puntatore ad una variabile di tipo \ctyp{int}: Le operazioni di controllo disponibili per i socket UDP, anch'esse illustrate 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 \itindex{value~result~argument} -\textit{value result argument} e deve essere un puntatore ad una variabile di -tipo \ctyp{int}: +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}} \item[\const{FIONREAD}] restituisce la dimensione in byte del primo pacchetto in attesa di ricezione, o 0 qualora non ci sia nessun pacchetto.