Aggiornamento data copyright
[gapil.git] / sockadv.tex
index 1fc196fb54164fd62ec29395ce27b5b5b97a3b6a..e8accfe77037815577e1bb968bb910afde17a9ed 100644 (file)
@@ -1,6 +1,6 @@
 %% sockadv.tex
 %%
 %% sockadv.tex
 %%
-%% Copyright (C) 2004-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2004-2011 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",
 %% 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",
@@ -8,6 +8,7 @@
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
 %% license is included in the section entitled "GNU Free Documentation
 %% License".
 %%
+
 \chapter{Socket avanzati}
 \label{cha:advanced_socket}
 
 \chapter{Socket avanzati}
 \label{cha:advanced_socket}
 
@@ -32,6 +33,8 @@ disponibili con i vari tipi di socket.
 Finora abbiamo trattato delle funzioni che permettono di inviare dati sul
 socket in forma semplificata. Se infatti si devono semplicemente ...
 
 Finora abbiamo trattato delle funzioni che permettono di inviare dati sul
 socket in forma semplificata. Se infatti si devono semplicemente ...
 
+% TODO trattare anche recvmmsg, introdotta con il kernel 2.3.33, vedi
+% http://kernelnewbies.org/Linux_2_6_33 
 
 
 \subsection{I messaggi ancillari}
 
 
 \subsection{I messaggi ancillari}
@@ -59,11 +62,46 @@ fig.~\ref{fig:sock_extended_err_struct}.
 
 
 
 
 
 
-\subsection{I dati \textit{out-of-band}}
+\subsection{I \textsl{dati urgenti} o \textit{out-of-band}}
 \label{sec:TCP_urgent_data}
 
 \label{sec:TCP_urgent_data}
 
-Una caratteristica speciale dei socket TCP è quella della presenza dei
-cosiddetti dati \textit{out-of-band} ...
+\itindbeg{out-of-band} 
+
+Una caratteristica particolare dei socket TCP è quella che consente di inviare
+all'altro capo della comunicazione una sorta di messaggio privilegiato, che si
+richiede che sia trattato il prima possibile. Si fa riferimento a questa
+funzionalità come all'invio dei cosiddetti \textsl{dati urgenti} (o
+\textit{urgent data}); talvolta essi chiamati anche dati \textit{out-of-band}
+poiché, come vedremo più avanti, possono essere letti anche al di fuori del
+flusso di dati normale.
+
+Come già accennato in sez.~\ref{sec:file_multiplexing} la presenza di dati
+urgenti viene rilevata in maniera specifica sia di \func{select} (con il
+\itindex{file~descriptor~set} \textit{file descriptor set} \param{exceptfds})
+che da \func{poll} (con la condizione \const{POLLRDBAND}).
+
+
+Le modalità di lettura dei dati urgenti sono due, la prima e più comune
+prevede l'uso di \func{recvmsg} con 
+
+
+% TODO aggiungere pezzo di codice per inviare dati urgenti all'echo server
+
+La seconda modalità di lettura prevede invece l'uso dell'opzione dei socket
+\const{SO\_OOBINLINE} (vedi sez.~\ref{sec:sock_generic_options}) che consente
+di ricevere i dati urgenti direttamente nel flusso dei dati del socket; in tal
+caso però si pone il problema di come distinguere i dati normali da quelli
+urgenti. Come già accennato in sez.~\ref{sec:sock_ioctl_IP} a questo scopo si
+può usare \func{ioctl} con l'operazione \const{SIOCATMARK}, che consente di
+sapere se si è arrivati o meno all'\textit{urgent mark}. 
+
+La procedura allora prevede che, una volta che si sia rilevata la presenza di
+dati urgenti, si ripeta la lettura ordinaria dal socket fintanto che
+\const{SIOCATMARK} non restituisce un valore diverso da zero; la successiva
+lettura restituirà i dati urgenti.
+
+
+\itindend{out-of-band} 
 
 
 \section{L'uso dell'I/O non bloccante}
 
 
 \section{L'uso dell'I/O non bloccante}
@@ -85,11 +123,12 @@ IP associate per i pacchetti associati ad un socket.  Vedremo qui il
 significato di tali opzioni e le modalità con cui esse possono essere
 utilizzate ed impostate.
 
 significato di tali opzioni e le modalità con cui esse possono essere
 utilizzate ed impostate.
 
+% LocalWords:  socket of multiplexing sez sendmsg recvmsg RECVERR kernel MSG
+% LocalWords:  ERRQUEUE sock err fig TCP dell'I setsockopt OPTIONS urgent poll
+% LocalWords:  select descriptor exceptfds POLLRDBAND OOBINLINE ioctl all' mark
+% LocalWords:  SIOCATMARK
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-
-% LocalWords:  socket of multiplexing sez sendmsg recvmsg RECVERR kernel MSG
-% LocalWords:  ERRQUEUE sock err fig TCP dell'I setsockopt OPTIONS