%% tcpsock.tex
%%
-%% Copyright (C) 2000-2007 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2010 Simone Piccardi. Permission is granted to
%% copy, distribute and/or modify this document under the terms of the GNU Free
%% Documentation License, Version 1.1 or any later version published by the
%% Free Software Foundation; with the Invariant Sections being "Un preambolo",
spostare a sinistra il valore della finestra annunciata inserito nel
pacchetto). Con Linux è possibile indicare al kernel di far negoziare il
fattore di scala in fase di creazione di una connessione tramite la
- \textit{sysctl} \texttt{tcp\_window\_scaling} (vedi
- sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa
+ \textit{sysctl} \itindex{TCP~window~scaling} \texttt{tcp\_window\_scaling}
+ (vedi sez.~\ref{sec:sock_ipv4_sysctl}).\footnote{per poter usare questa
funzionalità è comunque necessario ampliare le dimensioni dei buffer di
ricezione e spedizione, cosa che può essere fatta sia a livello di sistema
- con le opportune \textit{sysctl} (vedi sez.~\ref{sec:sock_ipv4_sysctl}) che
- a livello di singoli socket con le relative opzioni (vedi
+ con le opportune \textit{sysctl} (vedi sez.~\ref{sec:sock_ipv4_sysctl})
+ che a livello di singoli socket con le relative opzioni (vedi
sez.~\ref{sec:sock_tcp_udp_options}).}
\item \textit{timestamp option}, è anche questa una nuova opzione necessaria
che viene dato alle connessioni caratterizzate da alta velocità o da ritardi
elevati. In ogni caso Linux supporta pienamente entrambe le opzioni.
+
\subsection{La terminazione della connessione}
\label{sec:TCP_conn_term}
chiusura attiva. Nella sequenza indicata i dati verrebbero persi, dato che si
è chiuso il socket dal lato che esegue la chiusura attiva; esistono tuttavia
situazioni in cui si vuole poter sfruttare questa possibilità, usando una
-procedura che è chiamata \textit{half-close}; torneremo su questo aspetto e su
-come utilizzarlo in sez.~\ref{sec:TCP_shutdown}, quando parleremo della
-funzione \func{shutdown}.
+procedura che è chiamata \itindex{half-close} \textit{half-close}; torneremo
+su questo aspetto e su come utilizzarlo in sez.~\ref{sec:TCP_shutdown}, quando
+parleremo della funzione \func{shutdown}.
La emissione del FIN avviene quando il socket viene chiuso, questo però non
avviene solo per la chiamata esplicita della funzione \func{close}, ma anche
Authority}) ma l'elenco viene costantemente aggiornato e pubblicato su
internet (una versione aggiornata si può trovare all'indirizzo
\href{http://www.iana.org/assignments/port-numbers}
-{\texttt{http://www.iana.org/assignments/port-numbers}}); inoltre in un
+{\textsf{http://www.iana.org/assignments/port-numbers}}); inoltre in un
sistema unix-like un analogo elenco viene mantenuto nel file
\conffile{/etc/services}, con la corrispondenza fra i vari numeri di porta ed
il nome simbolico del servizio. I numeri sono divisi in tre intervalli:
implementazioni.
In Linux il significato di questo valore è cambiato a partire dal kernel 2.2
-per prevenire l'attacco chiamato \textit{syn flood}. Questo si basa
-sull'emissione da parte dell'attaccante di un grande numero di pacchetti SYN
-indirizzati verso una porta, forgiati con indirizzo IP fasullo\footnote{con la
- tecnica che viene detta \textit{ip spoofing}.} così che i SYN$+$ACK vanno
-perduti e la coda delle connessioni incomplete viene saturata, impedendo di
-fatto ulteriori connessioni.
+per prevenire l'attacco chiamato \index{SYN~flood} \textit{SYN flood}. Questo
+si basa sull'emissione da parte dell'attaccante di un grande numero di
+pacchetti SYN indirizzati verso una porta, forgiati con indirizzo IP
+fasullo\footnote{con la tecnica che viene detta \textit{ip spoofing}.} così
+che i SYN$+$ACK vanno perduti e la coda delle connessioni incomplete viene
+saturata, impedendo di fatto ulteriori connessioni.
Per ovviare a questo il significato del \param{backlog} è stato cambiato a
indicare la lunghezza della coda delle connessioni complete. La lunghezza
\func{fgets} ritornerà ed il client scriverà quanto immesso sul socket, per
poi passare a rileggere quanto gli viene inviato all'indietro dal server, che
a sua volta sarà inviato sullo standard output, che nel caso ne provoca
-l'immediatamente stampa a video.
+l'immediata stampa a video.
\subsection{La conclusione normale}
sappiamo che la funzione ritorna quando uno o più dei file descriptor messi
sotto controllo è pronto per la relativa operazione.
-
-
In quell'occasione non abbiamo però definito cosa si intende per pronto,
infatti per dei normali file, o anche per delle pipe, la condizione di essere
pronti per la lettura o la scrittura è ovvia; invece lo è molto meno nel caso
\item[\macro{SHUT\_WR}] chiude il lato in scrittura del socket, non sarà più
possibile scrivere dati su di esso. Nel caso di socket TCP la chiamata causa
l'emissione di un segmento FIN, secondo la procedura chiamata
- \textit{half-close}. Tutti i dati presenti nel buffer di scrittura prima
- della chiamata saranno inviati, seguiti dalla sequenza di chiusura
- illustrata in sez.~\ref{sec:TCP_conn_term}.
+ \itindex{half-close} \textit{half-close}. Tutti i dati presenti nel buffer
+ di scrittura prima della chiamata saranno inviati, seguiti dalla sequenza di
+ chiusura illustrata in sez.~\ref{sec:TCP_conn_term}.
\item[\macro{SHUT\_RDWR}] chiude sia il lato in lettura che quello in
scrittura del socket. È equivalente alla chiamata in sequenza con
\macro{SHUT\_RD} e \macro{SHUT\_WR}.
anche a questo server le considerazioni finali di
sez.~\ref{sec:TCP_serv_select}.
+
+
+
+\subsection{I/O multiplexing con \func{epoll}}
+\label{sec:TCP_serv_epoll}
+
+Da fare.
+
% TODO fare esempio con epoll