\hline
\hline
\const{IP\_OPTIONS} &$\bullet$&$\bullet$&&\texttt{void *}& %???
- Imposta o riceve le opzioni di IP.\\
+ imposta o riceve le opzioni di IP.\\
\const{IP\_PKTINFO} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Passa un messaggio di informazione.\\
+ passa un messaggio di informazione.\\
\const{IP\_RECVTOS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Passa un messaggio col campo TOS.\\
+ passa un messaggio col campo TOS.\\
\const{IP\_RECVTTL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Passa un messaggio col campo TTL.\\
+ passa un messaggio col campo TTL.\\
\const{IP\_RECVOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Passa un messaggio con le opzioni IP.\\
+ passa un messaggio con le opzioni IP.\\
\const{IP\_RETOPTS} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Passa un messaggio con le opzioni IP non trattate.\\
+ passa un messaggio con le opzioni IP non trattate.\\
\const{IP\_TOS} &$\bullet$&$\bullet$& &\texttt{int}&
- Imposta il valore del campo TOS.\\
+ imposta il valore del campo TOS.\\
\const{IP\_TTL} &$\bullet$&$\bullet$& &\texttt{int}&
- Imposta il valore del campo TTL.\\
+ imposta il valore del campo TTL.\\
\const{IP\_HDRINCL} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Passa l'intestazione di IP nei dati.\\
+ passa l'intestazione di IP nei dati.\\
\const{IP\_RECVERR} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Abilita la gestione degli errori.\\
+ abilita la gestione degli errori.\\
\const{IP\_MTU\_DISCOVER} &$\bullet$&$\bullet$& &\texttt{int}&
- Imposta il Path MTU Discovery.\\
+ imposta il Path MTU Discovery.\\
\const{IP\_MTU} &$\bullet$& & &\texttt{int}&
- Legge il valore attuale della MTU.\\
+ legge il valore attuale della MTU.\\
\const{IP\_ROUTER\_ALERT} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Imposta l'opzione \textit{IP router alert} sui pacchetti.\\
+ 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 \itindex{multicast} \textit{multicast}.\\
\const{IP\_MULTICAST\_LOOP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Controlla il reinvio a se stessi dei dati di \itindex{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}.\\
+ 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}.\\
+ 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}
+ imposta l'interfaccia locale di un socket \itindex{multicast}
\textit{multicast}.\\
\hline
\end{tabular}
è disponibile nella settima sezione delle pagine di manuale, che si può
consultare rispettivamente con \texttt{man 7 tcp} e \texttt{man 7 udp}; le
pagine di manuale però, alla stesura di questa sezione (Agosto 2006) sono
- alquanto incomplete.} Dato che questi protocolli sono entrambi trasportati
-su IP, oltre alle opzioni generiche di sez.~\ref{sec:sock_generic_options}
-saranno comunque disponibili anche le precedenti opzioni di
-sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in
- sez.~\ref{sec:sock_ipv4_options} si sono riportate le opzioni per IPv4, ma
- quelle per TCP e UDP sono le stesse anche quando si usa IPv6.}
+ alquanto incomplete.} Dato che questi due protocolli sono entrambi
+trasportati su IP,\footnote{qui si sottintende IPv4, ma le opzioni per TCP e
+ UDP sono le stesse anche quando si usa IPv6.} oltre alle opzioni generiche
+di sez.~\ref{sec:sock_generic_options} saranno comunque disponibili anche le
+precedenti opzioni di sez.~\ref{sec:sock_ipv4_options}.\footnote{in realtà in
+ sez.~\ref{sec:sock_ipv4_options} si sono riportate le opzioni per IPv4, al
+ solito qualora si stesse utilizzando IPv6 si potrebbero utilizzare le
+ opzioni di quest'ultimo.}
Il protocollo che supporta il maggior numero di opzioni è TCP; per poterle
utilizzare occorre specificare \const{SOL\_TCP} (o l'equivalente
-\const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si è
-riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_tcp}. Le
-costanti indicanti le opzioni del protocollo TCP e tutte le altre costanti ad
-esse collegate sono definite in \file{netinet/tcp.h}, ed accessibili
-includendo detto file.\footnote{in realtà questo è il file usato dalle
- librerie; la definizione delle opzioni effettivamente supportate da Linux si
- trova nel file \texttt{linux/tcp.h}, dal quale si sono estratte le costanti
- di tab.~\ref{tab:sock_opt_tcplevel}.}
+\const{IPPROTO\_TCP}) come valore per l'argomento \param{level}. Si sono
+riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcp} dove
+sono elencate le rispettive costanti da utilizzare come valore per l'argomento
+\param{optname}. Dette costanti e tutte le altre costanti e strutture
+collegate all'uso delle opzioni TCP sono definite in \file{netinet/tcp.h}, ed
+accessibili includendo detto file.\footnote{in realtà questo è il file usato
+ dalle librerie; la definizione delle opzioni effettivamente supportate da
+ Linux si trova nel file \texttt{linux/tcp.h}, dal quale si sono estratte le
+ costanti di tab.~\ref{tab:sock_opt_tcplevel}.}
\begin{table}[!htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|c|c|c|l|l|}
+ \begin{tabular}[c]{|l|c|c|c|l|p{7cm}|}
\hline
\textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
\textbf{Descrizione}\\
\hline
\hline
- \const{TCP\_NODELAY} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_MAXSEG} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_CORK} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_KEEPIDLE} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_KEEPINTVL} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_KEEPCNT} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_SYNCNT} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_LINGER2} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_INFO} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_QUICKACK} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{TCP\_CONGESTION} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
+ \const{TCP\_NODELAY} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
+ spedisce tutti i pacchetti il prima possibile.\\
+ \const{TCP\_MAXSEG} &$\bullet$&$\bullet$& &\texttt{int}&
+ valore della \itindex{Maximum~Segment~Size} MSS per i pacchetti in
+ uscita.\\
+ \const{TCP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
+ non invia frame parziali.\\
+ \const{TCP\_KEEPIDLE} &$\bullet$&$\bullet$& &\texttt{int}&
+ tempo in secondi prima di inviare un \textit{keepalive}.\\
+ \const{TCP\_KEEPINTVL} &$\bullet$&$\bullet$& &\texttt{int}&
+ tempo in secondi prima fra \textit{keepalive} successivi.\\
+ \const{TCP\_KEEPCNT} &$\bullet$&$\bullet$& &\texttt{int}&
+ numero massimo di \textit{keepalive} inviati.\\
+ \const{TCP\_SYNCNT} &$\bullet$&$\bullet$& &\texttt{int}&
+ numero massimo di ritrasmissioni del pacchetto SYN.\\
+ \const{TCP\_LINGER2} &$\bullet$&$\bullet$& &\texttt{int}&
+ tempo di vita in stato \texttt{FIN\_WAIT2}.\\
+ \const{TCP\_DEFER\_ACCEPT}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
+ ritorna da \func{accept} solo in presenza di dati.\\
+ \const{TCP\_WINDOW\_CLAMP}&$\bullet$&$\bullet$& &\texttt{int}&
+ valore della \textit{advertised window}.\\
+ \const{TCP\_INFO} &$\bullet$&? & &\struct{tcp\_info}&
+ raccoglie informazioni sul socket.\\
+ \const{TCP\_QUICKACK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
+ abilita la modalità \textit{quickack}.\\
+ \const{TCP\_CONGESTION} &$\bullet$&$\bullet$&? &\texttt{?}& %???
+ non ancora documentata.\\
\hline
\end{tabular}
\caption{Le opzioni per i socket TCP disponibili al livello
\label{tab:sock_opt_tcplevel}
\end{table}
-Le descrizioni di tab.~\ref{tab:sock_opt_tcplevel} sono estremamente
-sintetiche, una maggiore quantità di dettagli su queste opzioni è fornita nel
-seguente elenco:
+Le descrizioni riportata in tab.~\ref{tab:sock_opt_tcplevel} sono estremamente
+sintetiche, una maggiore quantità di dettagli e la spiegazione delle singole
+opzioni è fornita nel seguente elenco:
\begin{basedescript}{\desclabelwidth{3.0cm}\desclabelstyle{\nextlinelabel}}
-\item[\const{TCP\_NODELAY}]
-
-\item[\const{TCP\_MAXSEG}]
-
-\item[\const{TCP\_CORK}]
+\item[\const{TCP\_NODELAY}] il protocollo TCP prevede, per evitare la
+ trasmissione di tanti pacchetti piccoli, che comporta un utilizzo non
+ ottimale della banda disponibile, un meccanismo di bufferizzazione dei
+ pacchetti uscenti controllato da un apposito algoritmo (detto
+ \textsl{algoritmo di Nagle}, vedi sez.\ref{sez:tcp_protocol_xxx}).
+ Il comportamento normale prevede invece che i pacchetti siano accumulati
+ fintanto che non si raggiunge una quantità di dati considerata adeguata per
+ eseguire la trasmissione.
+
+ Impostando questa opzione si disabilita questo meccanismo ed i pacchetti
+ vengono inviati immediatamente qualunque sia la loro dimensione; l'opzione
+ viene sovrascritta dall'eventuale impostazione \const{TCP\_CORK} (che blocca
+ l'invio immediato), tuttavia quando la si abilita viene sempre forzato lo
+ scaricamento della coda di invio (con conseguente trasmissione di tutti i
+ pacchetti pendenti), anche qualora si fosse già abilitata \const{TCP\_CORK}.
+
+\item[\const{TCP\_MAXSEG}] permette di leggere e modificare il valore della
+ \itindex{Maximum~Segment~Size} MSS dei pacchetti uscenti, e se l'opzione è
+ impostata prima di stabilire la connessione, cambia anche il valore della
+ MSS annunciata all'altro capo della connessione. Se si specificano valori
+ maggiori della MTU questi verranno ignorati, inoltre TCP imporrà anche i
+ suoi limiti massimo e minimo per questo valore.
+
+\item[\const{TCP\_CORK}] quando questa opzione viene abilitata non vengono
+ inviati pacchetti di dati fintanto che essa non venga disabilitata; a quel
+ punto tutti i pacchetti rimasti in coda saranno inviati.
\item[\const{TCP\_KEEPINTVL}]
\textbf{Descrizione}\\
\hline
\hline
- \const{UDP\_CORK} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
- \const{UDP\_ENCAP} &$\bullet$&$\bullet$&&\texttt{}& %???
- .\\
+ \const{UDP\_CORK} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %???
+ accumula tutti i dati su un unico pacchetto.\\
+ \const{UDP\_ENCAP} &$\bullet$&$\bullet$&$\bullet$&\texttt{int}& %???
+ non documentata.\\
\hline
\end{tabular}
\caption{Le opzioni per i socket UDP disponibili al livello