\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
con l'invio di un segmento FIN all'altro capo della connessione.} In questo
caso all'invio del messaggio di \textit{keep-alive} si otterrà come risposta
un segmento RST che indica che l'altro capo non riconosce più l'esistenza
-della connessione ed il socket verrà chiuso riportanto un errore di
+della connessione ed il socket verrà chiuso riportando un errore di
\errcode{ECONNRESET}.
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 una funzione analoga a quella illustrata in
+fig.~\ref{fig:is_closing}, in cui si usa il campo \var{tcpi\_state} di
+\struct{tcp\_info} per controllare lo stato del socket.
-\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 o disabilita 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 al momento della chiamata un passaggio da o verso la
+ modalità \textit{quickack}; le operazioni successive potrebbero a loro volta
+ entrare o uscire da questa modalità a seconda del processo interno del
+ protocollo o dalle condizioni della connessione (ad esempio in presenza di
+ timeout ritardati per i pacchetti ACK).
+
+\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}]
%%% End:
% LocalWords: quest'ultime neigh dev weight cong mod somaxconn Di SIOCINQ DoS
% LocalWords: Documentation SIOCATMARK SIOCOUTQ FIONREAD TIOCOUTQ Denial work
-% LocalWords: netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer
+% LocalWords: netfilter scheduler mark ARP DHCP BOOTP RARP nonlocal sniffer is
% LocalWords: linux NODELAY MAXSEG CORK KEEPIDLE KEEPINTVL KEEPCNT SYNCNT INFO
% LocalWords: DEFER ACCEPT WINDOW CLAMP QUICKACK CONGESTION ENCAP urgent MSS
% LocalWords: Segment SYN accept advertised window info quickack Nagle ifreq
% LocalWords: ifr ppp union EPERM SIOCGIFNAME dell' interface index IFF NOARP
% LocalWords: SIOCGIFINDEX SIOCGIFFLAGS POINTOPOINT RUNNING PROMISC NOTRAILERS
-% LocalWords: ALLMULTI bundle PORTSEL ifmap AUTOMEDIA DYNAMIC SIOCSIFFLAGS
+% LocalWords: ALLMULTI bundle PORTSEL ifmap AUTOMEDIA DYNAMIC SIOCSIFFLAGS way
% LocalWords: SIOCGIFMETRIC SIOCSIFMETRIC SIOCGIFMTU SIOCSIFMTU SIOCGIFHWADDR
-% LocalWords: SIOCSIFHWADDR SIOCSIFHWBROADCAST SIOCGIFMAP SIOCSIFMAP
-% LocalWords: SIOCADDMULTI SIOCDELMULTI SIOCGIFTXQLEN SIOCSIFTXQLEN
-% LocalWords: SIOCSIFNAME SIOCGIFCONF
+% LocalWords: SIOCSIFHWADDR SIOCSIFHWBROADCAST SIOCGIFMAP SIOCSIFMAP sendfile
+% LocalWords: SIOCADDMULTI SIOCDELMULTI SIOCGIFTXQLEN SIOCSIFTXQLEN three syn
+% LocalWords: SIOCSIFNAME SIOCGIFCONF handshake retries MIN FreeBSD closing Mb
+% LocalWords: abort overflow adv win app bic convergence dsack ecn fack frto
+% LocalWords: intvl probes latency orphans l'ACK SYNQ HSIZE tw buckets mem rfc
+% LocalWords: orphan reordering collapse sack stdurg synack syncookies recycle
+% LocalWords: timestamps scaling vegas avoid westwood