X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=65c05355544fb761816100717818302a5d33651b;hp=5c2e1858034d57a0c3b5d8da1a347cf6082be537;hb=22e01eeebd2d386a8a992cba0fdaf2d73f5ff217;hpb=bf41def586b4bf552660e34913f3c39b7d26b7bc diff --git a/sockctrl.tex b/sockctrl.tex index 5c2e185..65c0535 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2041,7 +2041,8 @@ tab.~\ref{tab:sock_opt_socklevel}. \const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& non invia attraverso un gateway.\\ \const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - attiva o disattiva il \textit{broadcast}.\\ + attiva o disattiva il \itindex{broadcast} + \textit{broadcast}.\\ \const{SO\_SNDBUF} &$\bullet$&$\bullet$& &\texttt{int}& imposta dimensione del buffer di trasmissione.\\ \const{SO\_RCVBUF} &$\bullet$&$\bullet$& &\texttt{int}& @@ -2167,7 +2168,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: processo remoto connesso al socket; l'opzione è disponibile solo per socket unix-domain e può essere usata solo con \func{getsockopt}. Utilizza per \param{optval} una apposita struttura \struct{ucred} (vedi - sez.~\ref{sec:unix_socket_xxx}). + sez.~\ref{sec:unix_socket}). \item[\const{SO\_BINDTODEVICE}] questa opzione permette di \textsl{legare} il socket ad una particolare interfaccia, in modo che esso possa ricevere ed @@ -2180,7 +2181,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: da uno zero e di lunghezza massima pari a \const{IFNAMSIZ}; l'opzione è effettiva solo per alcuni tipi di socket, ed in particolare per quelli della famiglia \const{AF\_INET}; non è invece supportata per i \textit{packet - socket} (vedi sez.~\ref{cha:advanced_socket_xxx}). + socket} (vedi sez.~\ref{sec:socket_raw}). \item[\const{SO\_DEBUG}] questa opzione abilita il debugging delle operazioni dei socket; l'opzione utilizza per \param{optval} un intero usato come @@ -2227,11 +2228,12 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: di routing del kernel. Prende per \param{optval} un intero usato come valore logico. -\item[\const{SO\_BROADCAST}] questa opzione abilita il \textit{broadcast}; - quanto abilitata i socket di tipo \const{SOCK\_DGRAM} riceveranno i - pacchetti inviati all'indirizzo di broadcast, e potranno scrivere pacchetti - su tale indirizzo. Prende per \param{optval} un intero usato come valore - logico. L'opzione non ha effetti su un socket di tipo \const{SOCK\_STREAM}. +\item[\const{SO\_BROADCAST}] questa opzione abilita il \itindex{broadcast} + \textit{broadcast}; quanto abilitata i socket di tipo \const{SOCK\_DGRAM} + riceveranno i pacchetti inviati all'indirizzo di \textit{broadcast}, e + potranno scrivere pacchetti su tale indirizzo. Prende per \param{optval} un + intero usato come valore logico. L'opzione non ha effetti su un socket di + tipo \const{SOCK\_STREAM}. \item[\const{SO\_SNDBUF}] questa opzione imposta la dimenzione del buffer di uscita del socket. Prende per \param{optval} un intero indicante il numero @@ -2520,37 +2522,35 @@ si pu fare questa operazione per un socket TCP dato che su di essi si può sempre invocare \func{getsockname} una volta che si è completata la connessione. -Infine il quarto caso è quello in cui si vuole effettivamente ottenere -un \textit{completely duplicate binding}, quando cioè si vuole -eseguire \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:multicast_xxx}), allora ha senso che su una macchina i -pacchetti provenienti dal traffico in multicast possano essere -ricevuti da più applicazioni\footnote{l'esempio classico di traffico - in multicast è quello di uno streaming di dati (audio, video, ecc.), - l'uso del multicast consente in tal caso di trasmettere un solo - pacchetto, che potrà essere ricevuto da tutti i possibili - destinatari (invece di inviarne un duplicato a ciascuno); in 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. +Infine il quarto caso è quello in cui si vuole effettivamente ottenere un +\textit{completely duplicate binding}, quando cioè si vuole eseguire +\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:multicast_xxx}), allora ha senso che su una macchina i +pacchetti provenienti dal traffico in \itindex{multicast} \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 + trasmettere un solo pacchetto, che potrà essere ricevuto da tutti i + possibili destinatari (invece di inviarne un duplicato a ciascuno); in + 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 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 protovollo -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 broadcast o di \itindex{multicast} -\texttt{multicast} viene inviata una copia a ciascuna applicazione. -Non è definito invece cosa accade qualora il pacchetto sia destinato -ad un indirizzo normale (unicast). +applicazione eseguire \func{bind} sulla stessa porta ed indirizzo usata da +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 protovollo 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). Essendo questo un caso particolare in alcuni sistemi (come BSD) è stata introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta @@ -2684,7 +2684,7 @@ tutte le altre costanti ad esse collegate sono definite in \textbf{Descrizione}\\ \hline \hline - \const{IP\_OPTIONS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + \const{IP\_OPTIONS} &$\bullet$&$\bullet$&&\texttt{void *}& %??? Imposta o riceve le opzioni di IP.\\ \const{IP\_PKTINFO} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Passa un messaggio di informazione.\\ @@ -2696,30 +2696,32 @@ tutte le altre costanti ad esse collegate sono definite in Passa un messaggio con le opzioni IP.\\ \const{IP\_RETOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Passa un messaggio con le opzioni IP non trattate.\\ - \const{IP\_TOS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + \const{IP\_TOS} &$\bullet$&$\bullet$& &\texttt{int}& Imposta il valore del campo TOS.\\ - \const{IP\_TTL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + \const{IP\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& Imposta il valore del campo TTL.\\ \const{IP\_HDRINCL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Passa l'intestazione di IP nei dati.\\ \const{IP\_RECVERR} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Abilita la gestione degli errori.\\ - \const{IP\_MTU\_DISCOVER} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& + \const{IP\_MTU\_DISCOVER} &$\bullet$&$\bullet$& &\texttt{int}& Imposta il Path MTU Discovery.\\ - \const{IP\_MTU} &$\bullet$& &$\bullet$&\texttt{int}& + \const{IP\_MTU} &$\bullet$& & &\texttt{int}& Legge il valore attuale della MTU.\\ \const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& Imposta l'opzione \textit{IP router alert} sui pacchetti.\\ - \const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Imposta il TTL per i pacchetti multicast.\\ + \const{IP\_MULTICAST\_TTL} &$\bullet$&$\bullet$& &\texttt{int}& + Imposta il TTL per i pacchetti \itindex{multicast} \textit{multicast}.\\ \const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Controlla il reinvio a se stessi dei dati di multicast.\\ - \const{IP\_ADD\_MEMBERSHIP} & &$\bullet$&$\bullet$&\texttt{int}& - Si unisce a un gruppo di multicast.\\ - \const{IP\_DROP\_MEMBERSHIP}& &$\bullet$&$\bullet$&\texttt{int}& - Si sgancia da un gruppo di multicast.\\ - \const{IP\_MULTICAST\_IF} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& - Imposta l'interfaccia locale di un socket multicast.\\ + Controlla il reinvio a se stessi dei dati di \itindex{multicast} + \textit{multicast}.\\ + \const{IP\_ADD\_MEMBERSHIP} & &$\bullet$& &\struct{ip\_mreqn}& + Si unisce a un gruppo di \itindex{multicast} \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}.\\ \hline \end{tabular} \caption{Le opzioni disponibili al livello \const{SOL\_IP}.} @@ -2740,12 +2742,12 @@ elenco: opzioni IP utilizzate per la spedizione, quando la si usa con \func{setsockopt} vengono impostate le opzioni specificate. L'uso di questa opzione richiede una profonda conoscenza del funzionamento del protocollo, - torneremo in parte sull'argomento in sez.~\ref{sec:sock_advanced_xxx}. + torneremo in parte sull'argomento in sez.~\ref{sec:sock_IP_options}. \item[\const{IP\_PKTINFO}] Quando abilitata l'opzione permette di ricevere insieme ai pacchetti un messaggio ancillare (vedi - sez.~\ref{sec:TCP_ancillary_data}) di tipo \const{IP\_PKTINFO} contenente + sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_PKTINFO} contenente una struttura \struct{pktinfo} (vedi fig.~\ref{fig:sock_pktinfo_struct}) che mantiene una serie di informazioni riguardo i pacchetti in arrivo. In particolare è possibile conoscere l'interfaccia su cui è stato ricevuto un @@ -2773,23 +2775,33 @@ e \const{IP\_RECVIF} presenti in altri Unix (la relativa informazione ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di \struct{pktinfo}). +L'opzione prende per \param{optval} un intero usato come valore logico, che +specifica soltanto se insieme al pacchetto deve anche essere inviato o +ricevuto il messaggio \const{IP\_PKTINFO} (vedi +sez.~\ref{sec:net_ancillary_data}); il messaggio stesso dovrà poi essere +letto o scritto direttamente con \func{recvmsg} e \func{sendmsg} (vedi +sez.~\ref{sec:net_sendmsg}). + \item[\const{IP\_RECVTOS}] Quando abilitata l'opzione permette di ricevere - insieme ai pacchetti un messaggio ancillare di tipo \const{IP\_TOS}, che - contiene un byte con il valore del campo \textit{Type of Service} - dell'intestazione IP del pacchetto stesso (vedi sez.~\ref{sec:IP_header}). - Prende per \param{optval} un intero usato come valore logico. + insieme ai pacchetti un messaggio ancillare (vedi + sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_TOS}, che contiene un + byte con il valore del campo \textit{Type of Service} dell'intestazione IP + del pacchetto stesso (vedi sez.~\ref{sec:IP_header}). Prende per + \param{optval} un intero usato come valore logico. \item[\const{IP\_RECVTTL}] Quando abilitata l'opzione permette di ricevere - insieme ai pacchetti un messaggio ancillare di tipo \const{IP\_RECVTTL}, - contenente un byte con il valore del campo \textit{Time to Live} - dell'intestazione IP (vedi sez.~\ref{sec:IP_header}). L'opzione richiede - per \param{optval} un intero usato come valore logico. L'opzione non è - supportata per socket di tipo \const{SOCK\_STREAM}. + insieme ai pacchetti un messaggio ancillare (vedi + sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_RECVTTL}, contenente + un byte con il valore del campo \textit{Time to Live} dell'intestazione IP + (vedi sez.~\ref{sec:IP_header}). L'opzione richiede per \param{optval} un + intero usato come valore logico. L'opzione non è supportata per socket di + tipo \const{SOCK\_STREAM}. \item[\const{IP\_RECVOPTS}] Quando abilitata l'opzione permette di ricevere - insieme ai pacchetti un messaggio ancillare di tipo \const{IP\_OPTIONS}, - contenente le opzioni IP del protocollo (vedi sez.~\ref{sec:IP_options}). Le + insieme ai pacchetti un messaggio ancillare (vedi + sez.~\ref{sec:net_ancillary_data}) di tipo \const{IP\_OPTIONS}, contenente + le opzioni IP del protocollo (vedi sez.~\ref{sec:IP_options}). Le intestazioni di instradamento e le altre opzioni sono già riempite con i dati locali. L'opzione richiede per \param{optval} un intero usato come valore logico. L'opzione non è supportata per socket di tipo @@ -2801,12 +2813,16 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di per \param{optval} un intero usato come valore logico. L'opzione non è supportata per socket di tipo \const{SOCK\_STREAM}. - \item[\const{IP\_TOS}] L'opzione consente di leggere o impostare il campo \textit{Type of Service} dell'intestazione IP (vedi sez.~\ref{sec:IP_header}) che permette di indicare le priorità dei - pacchetti. Il campo TOS è di 8 bit e l'opzione richiede per \param{optval} - un intero che ne contiene il valore. Sono definite anche alcune costanti che + pacchetti. Se impostato il valore verrà mantenuto per tutti i pacchetti del + socket; alcuni valori (quelli che aumentano la priorità) richiedono i + privilegi di amministrazione con la \itindex{capabilities} capability + \const{CAP\_NET\_ADMIN}. + + Il campo TOS è di 8 bit e l'opzione richiede per \param{optval} un intero + che ne contenga il valore. Sono definite anche alcune costanti che definiscono alcuni valori standardizzati per il \textit{Type of Service}, riportate in tab.~\ref{tab:IP_TOS_values}, il valore di default usato da Linux è \const{IPTOS\_LOWDELAY}, ma esso può essere modificato con le @@ -2815,67 +2831,117 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di dal protocollo utilizzando l'opzione \const{SO\_PRIORITY} illustrata in sez.~\ref{sec:sock_generic_options}. - \item[\const{IP\_TTL}] L'opzione consente di leggere o impostare il campo \textit{Time to Live} dell'intestazione IP (vedi sez.~\ref{sec:IP_header}) per tutti i pacchetti associati al socket. Il campo TTL è di 8 bit e l'opzione richiede che \param{optval} sia un intero, che ne conterrà il valore. - \item[\const{IP\_HDRINCL}] Se abilitata l'utente deve fornire lui stesso l'intestazione IP in cima ai propri dati. L'opzione è valida soltanto per socket di tipo \const{SOCK\_RAW}, e quando utilizzata eventuali valori impostati con \const{IP\_OPTIONS}, \const{IP\_TOS} o \const{IP\_TTL} sono ignorati. In ogni caso prima della spedizione alcuni campi dell'instestazione vengono comunque modificati dal kernel, torneremo - sull'argomento in sez.~\ref{sec:socket_raw_xxx} - + sull'argomento in sez.~\ref{sec:socket_raw} \item[\const{IP\_RECVERR}] Questa è una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di Linux. Essa permette di usufruire di un meccanismo affidabile per ottenere un maggior numero di informazioni in caso di errori. Se l'opzione è abilitata tutti gli errori generati su un socket vengono memorizzati su una coda, dalla quale poi possono essere letti con - \func{recvmsg} (torneremo su questo in sez.~\ref{sec:TCP_ancillary_data}). - L'opzione richiede per \param{optval} un intero usato come valore logico; - l'opzione non è applicabile a socket di tipo \const{SOCK\_STREAM}. - -\item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i - kernel della serie 2.2.x, ed è specifica di Linux. L'opzione - permette di scrivere o leggere le impostazioni usate nella - determinazione della \textit{Maximum Tranfer Unit} (vedi - sez.~\ref{sec:net_lim_dim}) per il socket. Il valore di default è - determinato dal parametro \texttt{ip\_no\_pmtu\_disc} di - \func{sysctl} per i socket di tipo \const{SOCK\_STREAM}, mentre è - diabilitato per tutti gli altri. - -\item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Maximum - Tranfer Unit} di percorso del socket. L'opzione richiede per - \param{optval} un intero che conterrà il valore della MTU in byte. Questa è - una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di - Linux. + \func{recvmsg} (vedi sez.~\ref{sec:net_sendmsg}) come messaggi ancillari + (torneremo su questo in sez.~\ref{sec:net_ancillary_data}) di tipo + \const{IP\_RECVERR}. L'opzione richiede per \param{optval} un intero usato + come valore logico e non è applicabile a socket di tipo + \const{SOCK\_STREAM}. + +\itindbeg{Maximum~Transfer~Unit} +\item[\const{IP\_MTU\_DISCOVER}] Questa è una opzione introdotta con i kernel + della serie 2.2.x, ed è specifica di Linux. L'opzione permette di scrivere + o leggere le impostazioni della modalità usata per la determinazione della + \textit{Path Maximum Transfer Unit} (vedi sez.~\ref{sec:net_lim_dim}) del + socket. L'opzione prende per \param{optval} un valore intero che indica la + modalità usata, da specificare con una delle costanti riportate in + tab.~\ref{tab:sock_ip_mtu_discover}. + + \begin{table}[!htb] + \centering + \footnotesize + \begin{tabular}[c]{|l|r|p{7cm}|} + \hline + \multicolumn{2}{|c|}{\textbf{Valore}}&\textbf{Significato} \\ + \hline + \hline + \const{IP\_PMTUDISC\_DONT}&0& Non effettua la ricerca dalla \textit{Path + MTU}.\\ + \const{IP\_PMTUDISC\_WANT}&1& Utilizza il valore impostato per la rotta + utilizzata dai pacchetti (dal comando + \texttt{route}).\\ + \const{IP\_PMTUDISC\_DO} &2& Esegue la procedura di determinazione + della \textit{Path MTU} come richiesto + dall'\href{http://www.ietf.org/rfc/rfc1191.txt}{RFC~1191}.\\ + \hline + \end{tabular} + \caption{Valori possibili per l'argomento \param{optval} di + \const{IP\_MTU\_DISCOVER}.} + \label{tab:sock_ip_mtu_discover} + \end{table} + + Il valore di default applicato ai socket di tipo \const{SOCK\_STREAM} è + determinato dal parametro \texttt{ip\_no\_pmtu\_disc} (vedi + sez.~\ref{sec:sock_sysctl}), mentre per tutti gli altri socket di default la + ricerca è disabilitata ed è responsabilità del programma creare pacchetti di + dimensioni appropriate e ritrasmettere eventuali pacchetti persi. Se + l'opzione viene abilitata, il kernel si incaricherà di tenere traccia + automaticamente della \textit{Path MTU} verso ciascuna destinazione, e + rifiuterà immediatamente la trasmissione di pacchetti di dimensioni maggiori + della MTU con un errore di \errval{EMSGSIZE}.\footnote{in caso contrario la + trasmissione del pacchetto sarebbe effettuata, ottenendo o un fallimento + successivo della trasmissione, o la frammentazione dello stesso.} + +\item[\const{IP\_MTU}] Permette di leggere il valore della \textit{Path MTU} + di percorso del socket. L'opzione richiede per \param{optval} un intero che + conterrà il valore della \textit{Path MTU} in byte. Questa è una opzione + introdotta con i kernel della serie 2.2.x, ed è specifica di Linux. + + È tramite questa opzione che un programma può leggere, quando si è avuto un + errore di \errval{EMSGSIZE}, il valore della MTU corrente del socket. Si + tenga presente che per poter usare questa opzione, oltre ad avere abilitato + la scoperta della \textit{Path MTU}, occorre che il socket sia stato + esplicitamente connesso con \func{connect}. + + Ad esempio con i socket UDP si potrà ottenere una stima iniziale della + \textit{Path MTU} eseguendo prima una \func{connect} verso la destinazione, + e poi usando \func{getsockopt} con questa opzione. Si può anche avviare + esplicitamente il procedimento di scoperta inviando un pacchetto di grosse + dimensioni (che verrà scartato) e ripetendo l'invio coi dati aggiornati. Si + tenga infine conto che durante il procedimento i pacchetti iniziali possono + essere perduti, ed è compito dell'applicazione gestirne una eventuale + ritrasmissione. + +\itindend{Maximum~Transfer~Unit} \item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di Linux. Prende per \param{optval} un intero usato come valore logico. Se abilitata passa tutti i pacchetti con l'opzione \textit{IP Router Alert} (vedi - sez.\ref{sec:IP_options}) che devono essere inoltrati al socket + 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 in uscita associati al socket. È - importante che questo valore sia il più basso possibile, ed il default è 1, - che significa che i pacchetti non potranno uscire dalla rete locale. Questa - opzione consente ai programmi che lo richiedono di superare questo limite. - L'opzione richiede per \param{optval} un intero che conterrà il valore del - TTL. - -\item[\const{IP\_MULTICAST\_LOOP}] L'opzione consente di decidere se i - dati che si inviano su un socket usato con il \itindex{multicast} - \texttt{multicast} vengano ricevuti anche sulla stessa macchina da - cui li si stanno inviando. Prende per \param{optval} un intero - usato come valore logico. + 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 + default è 1, che significa che i pacchetti non potranno uscire dalla rete + locale. Questa opzione consente ai programmi che lo richiedono di superare + questo limite. L'opzione richiede per + \param{optval} un intero che conterrà il valore del TTL. + +\item[\const{IP\_MULTICAST\_LOOP}] L'opzione consente di decidere se i dati + che si inviano su un socket usato con il \textit{multicast} vengano ricevuti + anche sulla stessa macchina da cui li si stanno inviando. Prende per + \param{optval} un intero usato come valore logico. In generale se si vuole che eventuali client possano ricevere i dati che si inviano occorre che questa funzionalità sia abilitata (come avviene di @@ -2883,17 +2949,16 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di disponibili in locale l'uso di questa opzione permette di disabilitare questo tipo di traffico. -\item[\const{IP\_ADD\_MEMBERSHIP}] L'opzione consente di unirsi ad - gruppo di \itindex{multicast} \texttt{multicast}, e può essere usata - solo con \func{setsockopt}. L'argomento \param{optval} in questo - caso deve essere una struttura di tipo \struct{ip\_mreqn}, - illustrata in fig.~\ref{fig:ip_mreqn_struct}, che permette di - indicare, con il campo \var{imr\_multiaddr} l'indirizzo del gruppo - di multicast a cui ci si vuole unire, con il campo - \var{imr\_address} l'indirizzo dell'interfaccia locale con cui - unirsi al gruppo di multicast e con \var{imr\_ifindex} l'indice - dell'interfaccia da utilizzare (un valore nullo indica una - interfaccia qualunque). +\item[\const{IP\_ADD\_MEMBERSHIP}] L'opzione consente di unirsi ad gruppo di + \textit{multicast}, e può essere usata solo con \func{setsockopt}. + L'argomento \param{optval} in questo caso deve essere una struttura di tipo + \struct{ip\_mreqn}, illustrata in fig.~\ref{fig:ip_mreqn_struct}, che + permette di indicare, con il campo \var{imr\_multiaddr} l'indirizzo del + gruppo di \textit{multicast} a cui ci si vuole unire, con il campo + \var{imr\_address} l'indirizzo dell'interfaccia locale con cui unirsi al + gruppo di \textit{multicast} e con \var{imr\_ifindex} l'indice + dell'interfaccia da utilizzare (un valore nullo indica una interfaccia + qualunque). Per compatibilità è possibile utilizzare anche un argomento di tipo \struct{ip\_mreq}, una precedente versione di \struct{ip\_mreqn}, che @@ -2904,29 +2969,25 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di \begin{minipage}[c]{15cm} \includestruct{listati/ip_mreqn.h} \end{minipage} - \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei socket - per le operazioni concernenti l'appartenenza ai gruppi di multicast.} + \caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei + socket per le operazioni concernenti l'appartenenza ai gruppi di + \textit{multicast}.} \label{fig:ip_mreqn_struct} \end{figure} +\item[\const{IP\_DROP\_MEMBERSHIP}] Lascia un gruppo di \textit{multicast}, + prende per \param{optval} la stessa struttura \struct{ip\_mreqn} (o + \struct{ip\_mreq}) usata anche per \const{IP\_ADD\_MEMBERSHIP}. -\item[\const{IP\_DROP\_MEMBERSHIP}] Lascia un gruppo di - \itindex{multicast} \texttt{multicast}, prende per \param{optval} la - stessa struttura \struct{ip\_mreqn} (o \struct{ip\_mreq}) usata - anche per \const{IP\_ADD\_MEMBERSHIP}. - -\item[\const{IP\_MULTICAST\_IF}] Imposta l'interfaccia locale per - i'utilizzo del multicast, ed utilizza come \param{optval} le stesse - strutture \struct{ip\_mreqn} o \struct{ip\_mreq} delle due - precedenti opzioni. - +\item[\const{IP\_MULTICAST\_IF}] Imposta l'interfaccia locale per i'utilizzo + del \textit{multicast}, ed utilizza come \param{optval} le stesse strutture + \struct{ip\_mreqn} o \struct{ip\_mreq} delle due precedenti opzioni. +\itindend{multicast} \end{basedescript} - - \section{Altre funzioni di controllo} \label{sec:sock_ctrl_func} @@ -3043,7 +3104,7 @@ I principali sono: \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:TCP_ancillary_data}). + controllo (vedi sez.~\ref{sec:net_ancillary_data}). \end{basedescript} Nella directory \texttt{/proc/sys/net/ipv4} sono disponibili i parametri per i