Iniziato a scrivere qualcosa sui socket UDP, e fatta una figura.
[gapil.git] / othersock.tex
index 1f1023553f71a92485f197a8838a2df6272aed9f..d7bc4c0e520f533aa96d408f139a64e35651097f 100644 (file)
@@ -19,7 +19,59 @@ capitolo gli altri tipi di socket,
 \section{I socket UDP}
 \label{sec:UDP_socket}
 
 \section{I socket UDP}
 \label{sec:UDP_socket}
 
-Dopo i socket TCP i socket più utilizzati sono i socket UDP. 
+Dopo i socket TCP i socket più utilizzati nella programmazione di rete sono i
+socket UDP; protocolli diffusi come NFS o il DNS usano principalmente questo
+tipo di socket. Tratteremo in questa sezione le loro caratteristiche
+principali e le modalità per il loro utilizzo.
+
+
+\subsection{Le caratteristiche di un socket UDP}
+\label{sec:UDP_characteristics}
+
+Come illustrato in \secref{sec:net_udp} UDP è un protocollo molto semplice che
+non supporta le connessioni e non è affidabile: i dati vengono inviati in
+forma di pacchetti, e non ne è assicurata né la effettiva ricezione né
+l'odinamento.
+
+Questo significa che a differenza dei socket TCP i socket UDP non supportano
+una comunicazione di tipo \textit{stream} in cui si ha a disposizione un
+flusso continuo di dati che può essere letto un po' alla volta, ma di tipo
+\textit{datagram}, in cui i dati arrivano in singoli blocchi che devono essere
+letti integralmente.
+
+Questo diverso comportamento significa anche che i socket UDP, pur restando
+nella famiglia \const{PF\_INET}\footnote{o \const{PF\_INET6} qualora si usasse
+  invece il protocollo IPv6.} devono essere aperti quando si usa la funzione
+\func{socket} (si riveda quanto illustrato a suo tempo in
+\tabref{tab:sock_sock_valid_combinations}) utilizzando come valore per il tipo
+di socket \const{SOCK\_DGRAM}.
+
+Questa differenza comporta ovviamente il fatto che anche le modalità con cui
+si usano i socket UDP sono completamente diverse rispetto ai socket TCP, ed in
+particolare non esistendo il concetto di connessione non esiste il meccanismo
+del \textit{three way handshake} nè quello di stati del protocollo, in realtà
+tutto quello che avviene nella comunicazione attraverso dei socket UDP è la
+trasmissione di un pacchetto da un client ad un server o viceversa, secondo lo
+schema illustrato in \figref{fig:UDP_packet-exchange}.
+
+\begin{figure}[htb]
+  \centering
+  \includegraphics[width=10cm]{img/udp_connection}  
+  \caption{Lo schema di interscambio dei pacchetti per una comunicazione via
+     UDP.}
+  \label{fig:UDP_packet-exchange}
+\end{figure}
+
+Anche se UDP è completamente diverso rispetto a TCP resta identica 
+
+
+
+\subsection{Le funzioni \func{sendto} e \func{recvfrom}}
+\label{sec:UDP_sendto_recvfrom}
+
+Come accennato le due funzioni principali usate per la trasmissione di dati
+attraverso i socket UDP, ma in generale attraverso qualunque socket che
+preveda una comunicazione a pacchetti, sono \func{sendto} e \func{recvfrom}.
 
 
 \section{I socket \textit{Unix domain}}
 
 
 \section{I socket \textit{Unix domain}}