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 è
%% 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
\centering
\includegraphics[width=10cm]{img/esp_option}
\caption{Schema di pacchetto crittografato.}
- \label{tab:ESP_criptopack}
+ \label{fig:ESP_criptopack}
\end{figure}
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
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}
\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.}
\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
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.
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
\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
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}
\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
\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
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 è
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
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
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. È
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
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
\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}