\texttt{/proc/sys/net/core} e \texttt{tcp\_wmem} e \texttt{tcp\_rmem} in
\texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la
memoria effettivamente impiegata. Si tenga presente inoltre che le
- modifiche alle dimensioni dei buffer di ingresso e di uscita per poter
- essere effettive devono essere impostate prima della chiamata alle funzioni
+ modifiche alle dimensioni dei buffer di ingresso e di uscita, per poter
+ essere effettive, devono essere impostate prima della chiamata alle funzioni
\func{listen} o \func{connect}.
\item[\const{SO\_LINGER}] questa opzione controlla le modalità con cui viene
Se invece non viene ricevuta nessuna risposta (indice che la macchina non è
più raggiungibile) l'emissione dei messaggi viene ripetuta ad intervalli di 75
secondi per un massimo di 9 volte\footnote{entrambi questi valori possono
- essere opportunamente modificati a livello di sistema (cioè per tutti i
- socket) con gli opportuni parametri illustrati in sez.~\ref{sec:sock_sysctl}
- ed a livello di singolo socket con le opzioni \texttt{TCP\_KEEP*} di
+ essere modificati a livello di sistema (cioè per tutti i socket) con gli
+ opportuni parametri illustrati in sez.~\ref{sec:sock_sysctl} ed a livello di
+ singolo socket con le opzioni \texttt{TCP\_KEEP*} di
sez.~\ref{sec:sock_tcp_udp_options}.} (per un totale di 11 minuti e 15
secondi) dopo di che, se non si è ricevuta nessuna risposta, il socket viene
chiuso dopo aver impostato un errore di \errcode{ETIMEDOUT}. Qualora la
connessione si sia ristabilita e si riceva un successivo messaggio di risposta
-il ciclo riparte come se niente fosse avvenuto. Infine se invece si riceve
-come risposta un pacchetto ICMP di destinazione irraggiungibile (vedi
+il ciclo riparte come se niente fosse avvenuto. Infine se si riceve come
+risposta un pacchetto ICMP di destinazione irraggiungibile (vedi
sez.~\ref{sec:icmp_protocol_xxx}), verrà restituito l'errore corrispondente.
In generale questa opzione serve per individuare una caduta della connessione
\item[\const{TCP\_LINGER2}] imposta, in numero di secondi, il tempo di
sussistenza dei socket terminati nello stato \texttt{FIN\_WAIT2} (si ricordi
quanto visto in sez.~\ref{sec:TCP_conn_term}).\footnote{si tenga ben
- presente che questa opzione non ha nulla a che fare con la
+ presente che questa opzione non ha nulla a che fare con l'opzione
\const{SO\_LINGER} che abbiamo visto in sez.~\ref{sec:sock_options_main}.}
Questa opzione consente di sovrascrivere il valore globale impostato con la
\textit{sysctl} \texttt{tcp\_fin\_timeout} (vedi
una dimensione minima pari a \texttt{SOCK\_MIN\_RCVBUF/2}. Questa opzione
non deve essere utilizzata in codice che vuole essere portabile.
-\item[\const{TCP\_INFO}] permette di ricevere una serie di informazioni
- relative al socket che il kernel restituisce in una speciale struttura
+\item[\const{TCP\_INFO}] opzione, specifica di Linux, ma introdotta anche in
+ altri kernel (ad esempio FreeBSD) di controllare lo stato di un socket TCP
+ in user space. L'opzione restituisce in una speciale struttura
\struct{tcp\_info}, la cui definizione è riportata in
- fig.~\ref{fig:tcp_info_struct}.
+ fig.~\ref{fig:tcp_info_struct}, tutta una serie di dati relativi al socket.
\begin{figure}[!htb]
\footnotesize \centering
\label{fig:tcp_info_struct}
\end{figure}
-\item[\const{TCP\_QUICKACK}] abilita la modalità speciale \textit{quickack}.
+Con questa opzione diventa possibile ricevere una serie di informazioni
+relative al socket così da poter effettuare dei controlli, senza passare
+attraverso delle operazioni di lettura. Ad esempio si può verificare se un
+socket è stato chiuso con un codice come quello illustrato in
+fig.~\ref{fig:is_closing}.
-\item[\const{TCP\_CONGESTION}] Introdotta con il kernel 2.6.13.
+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/tcp_info.h}
+ \end{minipage}
+ \caption{Codice della funzione \texttt{is\_closing.c}, che controlla lo stato
+ di un socket TCP per verificare se si sta chiudendo..}
+ \label{fig:is_closing}
+\end{figure}
+
+\item[\const{TCP\_QUICKACK}] abilita la modalità speciale \textit{quickack},
+ in cui i pacchetti ACK vengono inviati immediatamente senza le attese
+ talvolta imposte dal normale funzionamento del protocollo TCP. Questa
+ opzione prende un valore logico, e non è permanente, nel senso che si limita
+ a forzare un passaggio da o verso la modalità \textit{quickack}, le
+ operazioni successive potrebbero a loro volta entrare o uscire da questa
+ modalità a seconda delle condizioni (ad esempio in presenza di timeout
+ ritardati per i pacchetti ACK) o del processamento dei dati.
+
+\item[\const{TCP\_CONGESTION}] Introdotta con il kernel 2.6.13, non
+ documentata.
\end{basedescript}
memoria (se maggiore di 128Mb) e ridotto a 128 qualora la memoria sia poca
(inferiore a 32Mb).\footnote{si raccomanda, qualora si voglia aumentare il
valore oltre 1024, di seguire la procedura citata nella pagina di manuale
- di TCP , e modificare il valore della costante \texttt{TCP\_SYNQ\_HSIZE}
+ di TCP, e modificare il valore della costante \texttt{TCP\_SYNQ\_HSIZE}
nel file \texttt{include/net/tcp.h} dei sorgenti del kernel, in modo che
- sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$, e
- poi ricompilare il kernel.}
+ sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$,
+ per poi ricompilare il kernel.}
\item[\texttt{tcp\_max\_tw\_buckets}]
\item[\texttt{tcp\_mem}]