From: Simone Piccardi Date: Mon, 5 Dec 2005 15:34:08 +0000 (+0000) Subject: Correzioni varie. X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=2eed0ffd24ecdbe06640513fd5d3f062115a4669 Correzioni varie. --- diff --git a/errors.tex b/errors.tex index 991a166..77bbec8 100644 --- a/errors.tex +++ b/errors.tex @@ -195,11 +195,12 @@ gestione dei socket e delle connessioni di rete. Famiglia di indirizzi non supportata. La famiglia di indirizzi richiesta non è supportata, o è inconsistente con il protocollo usato dal socket. \item \errcode{EADDRINUSE} \textit{Address already in use}. L'indirizzo del - socket richiesto è gia utilizzato (ad esempio si è richiesto il \func{bind} - per una porta già in uso). -\item \errcode{EADDRNOTAVAIL} \textit{Cannot assign requested address}. - L'indirizzo richiesto non è disponibile (ad esempio si è cercato di dare al - socket un nome che non corrisponde al nome della stazione locale). + socket richiesto è gia utilizzato (ad esempio si è eseguita \func{bind} + su una porta già in uso). +\item \errcode{EADDRNOTAVAIL} \textit{Cannot assign requested + address}. L'indirizzo richiesto non è disponibile (ad esempio si + è cercato di dare al socket un nome che non corrisponde al nome + della stazione locale), o l'interfaccia richesta non esiste. \item \errcode{ENETDOWN} \textit{Network is down}. L'operazione sul socket è fallita perché la rete è sconnessa. \item \errcode{ENETUNREACH} \textit{Network is unreachable}. L'operazione è diff --git a/macro.tex b/macro.tex index 762ec69..a34b4ce 100644 --- a/macro.tex +++ b/macro.tex @@ -9,6 +9,15 @@ %% License". %% % +% +% Defining some special character for use inside typewriter +% text without using the verbatim environment +% +\def\tild{\char'176} +\def\bslash{\char'134} +\def\circonf{\char'136} +\def\invap{\char'140} +% % Defining some commands to manipulate counter to avoid ude of % \label and \ref commands (and related problem to remeber the % used labels) to refer nearest objects diff --git a/netlayer.tex b/netlayer.tex index 86bb052..2b264d1 100644 --- a/netlayer.tex +++ b/netlayer.tex @@ -1395,7 +1395,7 @@ fino al vettore di inizializzazione, il resto \centering \includegraphics[width=10cm]{img/esp_option} \caption{Schema di pacchetto crittografato.} - \label{tab:ESP_criptopack} + \label{fig:ESP_criptopack} \end{figure} diff --git a/network.tex b/network.tex index 788d554..ceb7f55 100644 --- a/network.tex +++ b/network.tex @@ -456,10 +456,11 @@ seguenti: venire usato direttamente da alcuni programmi come \cmd{ping}. A volte ci si riferisce ad esso come ICPMv4 per distinguerlo da ICMPv6. \item[\textsl{IGMP}] \textit{Internet Group Management Protocol}. É un - protocollo di livello 2 usato per il \textit{multicasting} (vedi - sez.~\ref{sec:xxx_multicast}). Permette alle stazioni remote di notificare - ai router che supportano questa comunicazione a quale gruppo esse - appartengono. Come ICMP viene implementato direttamente sopra IP. + protocollo di livello 2 usato per il \itindex{multicast} + \textit{multicast} (vedi sez.~\ref{sec:xxx_multicast}). Permette + alle stazioni remote di notificare ai router che supportano questa + comunicazione a quale gruppo esse appartengono. Come ICMP viene + implementato direttamente sopra IP. \item[\textsl{ARP}] \textit{Address Resolution Protocol}. È il protocollo che mappa un indirizzo IP in un indirizzo hardware sulla rete locale. È usato in reti di tipo broadcast come Ethernet, Token Ring o FDDI che hanno associato @@ -616,7 +617,7 @@ grande pregio della velocit presta bene per le applicazioni in cui la connessione non è necessaria, e costituirebbe solo un peso in termini di prestazioni, mentre una perdita di pacchetti può essere tollerata, ad esempio le applicazioni di streaming e -quelle che usano il multicasting. +quelle che usano il \texttt{multicast}.\itindex{multicast} \subsection{Transport Control Protocol (TCP)} \label{sec:net_tcp} diff --git a/signal.tex b/signal.tex index dcef54c..a170ba7 100644 --- a/signal.tex +++ b/signal.tex @@ -360,49 +360,50 @@ momento della ricezione del segnale. \hline \hline \const{SIGHUP} &PL & A & Hangup o terminazione del processo di - controllo \\ - \const{SIGINT} &PL & A & Interrupt da tastiera (\cmd{C-c}) \\ - \const{SIGQUIT} &PL & C & Quit da tastiera (\cmd{C-y}) \\ - \const{SIGILL} &PL & C & Istruzione illecita \\ - \const{SIGABRT} &PL & C & Segnale di abort da \func{abort} \\ - \const{SIGFPE} &PL & C & Errore aritmetico \\ - \const{SIGKILL} &PL &AEF& Segnale di terminazione forzata \\ - \const{SIGSEGV} &PL & C & Errore di accesso in memoria \\ - \const{SIGPIPE} &PL & A & Pipe spezzata \\ - \const{SIGALRM} &PL & A & Segnale del timer da \func{alarm} \\ - \const{SIGTERM} &PL & A & Segnale di terminazione \verb|C-\| \\ - \const{SIGUSR1} &PL & A & Segnale utente numero 1 \\ - \const{SIGUSR2} &PL & A & Segnale utente numero 2 \\ - \const{SIGCHLD} &PL & B & Figlio terminato o fermato \\ - \const{SIGCONT} &PL & & Continua se fermato \\ - \const{SIGSTOP} &PL &DEF& Ferma il processo \\ - \const{SIGTSTP} &PL & D & Pressione del tasto di stop sul terminale \\ + controllo. \\ + \const{SIGINT} &PL & A & Interrupt da tastiera (\cmd{C-c}). \\ + \const{SIGQUIT} &PL & C & Quit da tastiera (\cmd{C-y}). \\ + \const{SIGILL} &PL & C & Istruzione illecita. \\ + \const{SIGABRT} &PL & C & Segnale di abort da \func{abort}. \\ + \const{SIGFPE} &PL & C & Errore aritmetico. \\ + \const{SIGKILL} &PL &AEF& Segnale di terminazione forzata. \\ + \const{SIGSEGV} &PL & C & Errore di accesso in memoria. \\ + \const{SIGPIPE} &PL & A & Pipe spezzata. \\ + \const{SIGALRM} &PL & A & Segnale del timer da \func{alarm}. \\ + \const{SIGTERM} &PL & A & Segnale di terminazione \texttt{C-\bslash}. \\ + \const{SIGUSR1} &PL & A & Segnale utente numero 1. \\ + \const{SIGUSR2} &PL & A & Segnale utente numero 2. \\ + \const{SIGCHLD} &PL & B & Figlio terminato o fermato. \\ + \const{SIGCONT} &PL & & Continua se fermato. \\ + \const{SIGSTOP} &PL &DEF& Ferma il processo. \\ + \const{SIGTSTP} &PL & D & Pressione del tasto di stop sul terminale. \\ \const{SIGTTIN} &PL & D & Input sul terminale per un processo - in background \\ + in background. \\ \const{SIGTTOU} &PL & D & Output sul terminale per un processo - in background \\ - \const{SIGBUS} &SL & C & Errore sul bus (bad memory access) \\ - \const{SIGPOLL} &SL & A & \textit{Pollable event} (Sys V). - Sinonimo di \const{SIGIO} \\ - \const{SIGPROF} &SL & A & Timer del profiling scaduto \\ - \const{SIGSYS} &SL & C & Argomento sbagliato per una subroutine (SVID) \\ - \const{SIGTRAP} &SL & C & Trappole per un Trace/breakpoint \\ + in background. \\ + \const{SIGBUS} &SL & C & Errore sul bus (bad memory access). \\ + \const{SIGPOLL} &SL & A & \textit{Pollable event} (Sys V); + Sinonimo di \const{SIGIO}. \\ + \const{SIGPROF} &SL & A & Timer del profiling scaduto. \\ + \const{SIGSYS} &SL & C & Argomento sbagliato per una subroutine (SVID).\\ + \const{SIGTRAP} &SL & C & Trappole per un Trace/breakpoint. \\ \const{SIGURG} &SLB& B & Ricezione di una \textit{urgent condition} su - un socket\index{socket}\\ - \const{SIGVTALRM}&SLB& A & Virtual alarm clock \\ - \const{SIGXCPU} &SLB& C & Ecceduto il limite sul CPU time \\ - \const{SIGXFSZ} &SLB& C & Ecceduto il limite sulla dimensione dei file \\ - \const{SIGIOT} &L & C & IOT trap. Sinonimo di \const{SIGABRT} \\ + un socket\index{socket}. \\ + \const{SIGVTALRM}&SLB& A & Virtual alarm clock. \\ + \const{SIGXCPU} &SLB& C & Ecceduto il limite sul tempo di CPU. \\ + \const{SIGXFSZ} &SLB& C & Ecceduto il limite sulla dimensione dei file. \\ + \const{SIGIOT} &L & C & IOT trap. Sinonimo di \const{SIGABRT}. \\ \const{SIGEMT} &L & & \\ - \const{SIGSTKFLT}&L & A & Errore sullo stack del coprocessore \\ - \const{SIGIO} &LB & A & L'I/O è possibile (4.2 BSD) \\ - \const{SIGCLD} &L & & Sinonimo di \const{SIGCHLD} \\ - \const{SIGPWR} &L & A & Fallimento dell'alimentazione \\ - \const{SIGINFO} &L & & Sinonimo di \const{SIGPWR} \\ - \const{SIGLOST} &L & A & Perso un lock sul file (per NFS) \\ - \const{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun) \\ +% TODO che roba e` SIGEMT + \const{SIGSTKFLT}&L & A & Errore sullo stack del coprocessore. \\ + \const{SIGIO} &LB & A & L'I/O è possibile (4.2 BSD). \\ + \const{SIGCLD} &L & & Sinonimo di \const{SIGCHLD}. \\ + \const{SIGPWR} &L & A & Fallimento dell'alimentazione. \\ + \const{SIGINFO} &L & & Sinonimo di \const{SIGPWR}. \\ + \const{SIGLOST} &L & A & Perso un lock sul file (per NFS). \\ + \const{SIGWINCH} &LB & B & Finestra ridimensionata (4.3 BSD, Sun). \\ \const{SIGUNUSED}&L & A & Segnale inutilizzato (diventerà - \const{SIGSYS}) \\ + \const{SIGSYS}). \\ \hline \end{tabular} \caption{Lista dei segnali in Linux.} @@ -511,14 +512,17 @@ segnali sono: \const{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo si usa per chiedere in maniera ``\textsl{educata}'' ad un processo di concludersi. + \item[\const{SIGINT}] Il nome sta per \textit{interrupt}. È il segnale di interruzione per il programma. È quello che viene generato di default dal comando \cmd{kill} o dall'invio sul terminale del carattere di controllo INTR (interrupt, generato dalla sequenza \cmd{C-c}). -\item[\const{SIGQUIT}] È analogo a \const{SIGINT} con la differenza che è - controllato da un altro carattere di controllo, QUIT, corrispondente alla - sequenza \verb|C-\|. A differenza del precedente l'azione predefinita, oltre - alla terminazione del processo, comporta anche la creazione di un + +\item[\const{SIGQUIT}] È analogo a \const{SIGINT} con la differenza + che è controllato da un altro carattere di controllo, QUIT, + corrispondente alla sequenza \texttt{C-\bslash}. A differenza del + precedente l'azione predefinita, oltre alla terminazione del + processo, comporta anche la creazione di un \itindex{core~dump}\textit{core dump}. In genere lo si può pensare come corrispondente ad una condizione di @@ -526,7 +530,8 @@ segnali sono: fare eseguire al gestore di questo segnale le operazioni di pulizia normalmente previste (tipo la cancellazione di file temporanei), dato che in certi casi esse possono eliminare informazioni utili nell'esame dei core - dump. + dump.\itindex{core~dump} + \item[\const{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata qualunque programma. Questo segnale non può essere né intercettato, né ignorato, né bloccato, per cui causa comunque la terminazione del processo. @@ -541,6 +546,7 @@ segnali sono: kernel). Talvolta è il sistema stesso che può generare questo segnale quando per condizioni particolari il processo non può più essere eseguito neanche per eseguire un gestore. + \item[\const{SIGHUP}] Il nome sta per \textit{hang-up}. Segnala che il terminale dell'utente si è disconnesso (ad esempio perché si è interrotta la rete). Viene usato anche per riportare la terminazione del processo di @@ -564,9 +570,11 @@ sempre la necessit \item[\const{SIGALRM}] Il nome sta per \textit{alarm}. Segnale la scadenza di un timer misurato sul tempo reale o sull'orologio di sistema. È normalmente usato dalla funzione \func{alarm}. + \item[\const{SIGVTALRM}] Il nome sta per \textit{virtual alarm}. È analogo al precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal processo. + \item[\const{SIGPROF}] Il nome sta per \textit{profiling}. Indica la scadenza di un timer che misura sia il tempo di CPU speso direttamente dal processo che quello che il sistema ha speso per conto di quest'ultimo. In genere @@ -588,9 +596,11 @@ segnali sono: socket\index{socket} e i terminali possono generare questo segnale, in Linux questo può essere usato anche per i file, posto che la \func{fcntl} abbia avuto successo. + \item[\const{SIGURG}] Questo segnale è inviato quando arrivano dei dati urgenti o \textit{out-of-band} su di un socket\index{socket}; per maggiori dettagli al proposito si veda sez.~\ref{sec:TCP_urgent_data}. + \item[\const{SIGPOLL}] Questo segnale è equivalente a \const{SIGIO}, è definito solo per compatibilità con i sistemi System V. \end{basedescript} @@ -606,8 +616,10 @@ in cui si trattano gli argomenti relativi. Questi segnali sono: \item[\const{SIGCHLD}] Questo è il segnale mandato al processo padre quando un figlio termina o viene fermato. L'azione predefinita è di ignorare il segnale, la sua gestione è trattata in sez.~\ref{sec:proc_wait}. + \item[\const{SIGCLD}] Per Linux questo è solo un segnale identico al precedente, il nome è obsoleto e andrebbe evitato. + \item[\const{SIGCONT}] Il nome sta per \textit{continue}. Il segnale viene usato per fare ripartire un programma precedentemente fermato da \const{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre @@ -625,6 +637,7 @@ in cui si trattano gli argomenti relativi. Questi segnali sono: \item[\const{SIGSTOP}] Il segnale ferma un processo (lo porta cioè in uno stato di sleep, vedi sez.~\ref{sec:proc_sched}); il segnale non può essere né intercettato, né ignorato, né bloccato. + \item[\const{SIGTSTP}] Il nome sta per \textit{interactive stop}. Il segnale ferma il processo interattivamente, ed è generato dal carattere SUSP (prodotto dalla combinazione \cmd{C-z}), ed al contrario di @@ -633,12 +646,14 @@ in cui si trattano gli argomenti relativi. Questi segnali sono: o il terminale in uno stato definito prima di fermarsi; se per esempio un programma ha disabilitato l'eco sul terminale può installare un gestore per riabilitarlo prima di fermarsi. + \item[\const{SIGTTIN}] Un processo non può leggere dal terminale se esegue una sessione di lavoro in \textit{background}. Quando un processo in background tenta di leggere da un terminale viene inviato questo segnale a tutti i processi della sessione di lavoro. L'azione predefinita è di fermare il processo. L'argomento è trattato in sez.~\ref{sec:sess_job_control_overview}. + \item[\const{SIGTTOU}] Segnale analogo al precedente \const{SIGTTIN}, ma generato quando si tenta di scrivere o modificare uno dei modi del terminale. L'azione predefinita è di fermare il processo, l'argomento è diff --git a/sockctrl.tex b/sockctrl.tex index 585e371..8abb56a 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2520,32 +2520,37 @@ 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 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 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. +\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 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 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). Essendo questo un caso particolare in alcuni sistemi (come BSD) è stata introdotta una opzione ulteriore, \const{SO\_REUSEPORT} che richiede che detta @@ -2835,12 +2840,14 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di 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}. +\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 @@ -2848,8 +2855,12 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di una opzione introdotta con i kernel della serie 2.2.x, ed è specifica di Linux. -\item[\const{IP\_ROUTER\_ALERT}] Questa è una opzione introdotta con i kernel - della serie 2.2.x, ed è specifica di Linux. +\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 + corrente. Può essere usata soltanto per socket di tipo raw. \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. È @@ -2859,10 +2870,11 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di 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 multicast vengano ricevuti anche - sulla stessa macchina da cui li si stanno inviando. Prende per - \param{optval} un intero usato come valore logico. +\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. In generale se si vuole che eventuali client possano ricevere i dati che si inviano occorre che questa funzionalità sia abilitata (come avviene di @@ -2870,15 +2882,17 @@ 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 - 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 \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). Per compatibilità è possibile utilizzare anche un argomento di tipo \struct{ip\_mreq}, una precedente versione di \struct{ip\_mreqn}, che @@ -2895,11 +2909,15 @@ ottenibile rispettivamente dai campi \var{ipi\_addr} e \var{ipi\_ifindex} di \end{figure} +\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\_DROP\_MEMBERSHIP}] - -\item[\const{IP\_MULTICAST\_IF}] +\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. \end{basedescript}