Iniziato a scrivere qualcosa sui socket UDP, e fatta una figura.
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 29 Feb 2004 01:48:13 +0000 (01:48 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 29 Feb 2004 01:48:13 +0000 (01:48 +0000)
html/gapil.html
html/stampa.html
html/stato.html [new file with mode: 0644]
img/udp_connection.dia [new file with mode: 0644]
othersock.tex
socket.tex
tcpsock.tex

index 98f16e50c2d1de7b3aa2772b248f499967c56ab3..de524ac9b25ffdd275743942331d07f1611b89d0 100644 (file)
              </font>
            </a> 
          </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  href="stato.html">
+             <font face="sans-serif">
+               <b>Stato</b>
+             </font>
+           </a> 
+         </td>
          <td align="center" bgcolor="#dddddd">
            <a target="_parent"  href="stampa.html">
              <font face="sans-serif">
            </p>
          </td>
        </tr> 
-       <tr>
-         <td width="130" valign="top">
-           <b>
-             <font color="#0000aa">
-               Disponibilità
-             </font>
-           </b>
-         </td>
-         <td bgcolor="lightblue"> 
-
-             <b>GaPiL</b> nasce come libro e come tale la versione di
-             riferimento è quella in PDF, accessibile nella sezione <a
-             href="stampa.html"> <font face="sans-serif"> <b>Download</b>
-             </font></a>. Grazie all'opera di Mirko Maischberger abbiamo
-             anche una bellissima versione HTML, accessibile nella sezione <a
-             href="http://www.lilik.it/~mirko/gapil/gapil.html"> <font
-             face="sans-serif"> <b>online</b></font></a>, finalmente
-             all'altezza della versione stampabile.
-         </td>
-       </tr>
-       <tr>
-         <td width="130" valign="top">
-           <b>
-             <font color="#0000aa">
-               Stato
-             </font>
-           </b>
-         </td>
-         <td bgcolor="lightblue"> <b>GaPiL</b> è in continua evoluzione ma
-           alcune parti hanno raggiunto una "stabilità" sufficiente (nel
-           senso che le ho riviste, le ritengo abbastanza complete, e non
-           sono stato capace di accorgermi degli errori che ci ho lasciato)
-           altre sono da rivedere, altre sono solo parzialmente accennate. La
-           situazione attuale è la seguente:
-           <table width="600" cellspacing="5">
-             <tbody>
-               <tr>
-                 <td valign="top"> <b> Cap. 1 </b> </td>
-                 <td valign="top"> Introduzione </td> 
-                 <td valign="top"> quasi completo e parzialmente revisionato
-                 </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 2-3 </b> </td>
-                 <td valign="top"> Gestione dei processi </td>
-                 <td valign="top"> quasi completi e parzialmente revisionati
-                 </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 4-7 </b> </td>
-                 <td valign="top"> Gestione base dei file </td>
-                 <td valign="top"> quasi completi e parzialmente revisionati
-                 </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 8 </b> </td>               
-                 <td valign="top"> Sistema, parametri, errori</td> 
-                 <td valign="top"> quasi completo, da revisionare</td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 9 </b> </td>
-                 <td valign="top"> Segnali</td> 
-                 <td valign="top"> quasi completo, da revisionare </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 10 </b> </td>
-                 <td valign="top"> Sessioni e terminali</td> 
-                 <td valign="top"> sessioni complete, da revisionare, 
-                   terminali quasi completi. </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 11 </b> </td>
-                 <td valign="top"> Gestione avanzata dei file</td> 
-                 <td valign="top"> 
-                   I/O non bloccante, asincrono, memory
-                   mapped completo, da revisionare, file locking
-                   completo, da revisionare.  
-                 </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 12 </b> </td>
-                 <td valign="top"> IPC </td> 
-                 <td valign="top"> pipe, fifo e code, semafori, 
-                   memoria condivisa, tecniche alternative completi, da
-                   revisionare, IPC POSIX quasi completo. 
-                 </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 13 </b> </td>
-                 <td valign="top"> Introduzione alla rete</td> 
-                 <td valign="top"> completo, da revisionare </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 14 </b> </td>
-                 <td valign="top"> I socket</td> 
-                 <td valign="top"> completo, da revisionare. Manca la
-                 trattazione di eventuali ulteriori famiglie. </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Cap. 15-16 </b> </td>
-                 <td valign="top"> I socket TCP </td> 
-                 <td valign="top"> socket TCP elementari completo, da
-                   revisionare. Socket TCP avanzati appena iniziato,
-                   in fase di stesura.
-
-                 </td>
-               </tr>
-               <tr>
-                 <td valign="top"> <b> Appendici </b> </td>
-                 <td valign="top"> I protocolli, gli errori, ecc.</td> 
-                 <td valign="top"> Materiale messo insieme alla
-                 rinfusa, e da rivedere da zero.
-                 </td>
-               </tr>
-             </tbody>
-           </table>
-           <p>
-             <b> Versione corrente:</b> 499 pagine.
-           </p>
-         </td>
-       </tr>
        <tr>
          <td width="130" valign="top">
            <b>
index a1b9a4f37835e7bfaa3b10993245a1fa1c23775d..02f6e82a940b48aae09bf889d2197cc918181528 100644 (file)
              </font>
            </a> 
          </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  href="stato.html">
+             <font face="sans-serif">
+               <b>Stato</b>
+             </font>
+           </a> 
+         </td>
          <td align="center" bgcolor="#dddddd">
            <a target="_parent"  href="stampa.html">
              <font face="sans-serif">
diff --git a/html/stato.html b/html/stato.html
new file mode 100644 (file)
index 0000000..af8c623
--- /dev/null
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="iso-8859-1"?> 
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="it">
+  <head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+    <title>GaPiL -- Guida alla Programmazione in Linux</title>
+    <meta name="author" content="Simone Piccardi" />
+    <meta name="title" content="Guida alla Programmazione in Linux" />
+    <meta name="description" content="Un manuale di programmazione avanzata in
+      Linux" />
+    <meta name="keywords" content="programmazione, programmazione linux, 
+      POSIX, programmazione avanzata "/>
+    <style type="text/css">
+<!--
+ a {text-decoration: none;}
+ td {font-family: sans-serif}
+-->
+    </style>
+  </head>
+  <body link="mediumslateblue" vlink="mediumblue" alink="red" bgcolor="white">
+
+    <table cellspacing="0" cellpadding="0" border="0" width="800">
+      <tbody>
+       <tr>
+         <td width="170" align="center">
+           <img src="gapil.png" width="160" border="0" />
+         </td>
+         <td valign="bottom" align="left" bgcolor="white">
+           <table cellspacing="0">
+             <tr>
+               <td>
+                 <font face="sans-serif" size="+4" 
+                   color="darkred" style="font-size: 22pt"> 
+                   <b>Guida alla Programmazione in Linux</b> 
+                   <br />
+                     <font color="midnightblue">
+                       <b>Simone Piccardi</b>
+                     </font>
+                 </font>
+               </td>
+             </tr>
+           </table>
+         </td>
+       </tr>
+      </tbody>
+    </table>
+
+    <table width="790" cellspacing="0" cellpadding="3" border="0">
+      <tbody>
+       <tr>
+         <td width="164" align="center" >
+         </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  href="index.html">
+             <font face="sans-serif">
+               <b>Home</b>
+             </font>
+           </a> 
+         </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  href="stato.html">
+             <font face="sans-serif">
+               <b>Stato</b>
+             </font>
+           </a> 
+         </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  href="stampa.html">
+             <font face="sans-serif">
+               <b>Download</b>
+             </font>
+           </a> 
+         </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  
+             href="http://www.lilik.it/~mirko/gapil/gapil.html">
+             <font face="sans-serif" color="darkred">
+               <b>Versione online</b>
+             </font>
+           </a>
+         </td>
+         <td align="center" bgcolor="#dddddd">
+           <a target="_parent"  
+             href="http://cvs.firenze.linux.it/cgi-bin/viewcvs.cgi/gapil/?cvsroot=misc">
+             <font face="sans-serif">
+               <b>CVS</b>
+             </font>
+           </a>
+         </td>
+       </tr>
+      </tbody>
+    </table>
+
+<!-- CUT HERE -->
+    <table width="800" cellspacing="10" cellpadding="10" border="0">
+      <tbody>
+       <tr>
+         <td width="130" valign="top">
+           <b>
+             <font color="#0000aa">
+               Disponibilità
+             </font>
+           </b>
+         </td>
+         <td bgcolor="lightblue"> 
+
+             <b>GaPiL</b> nasce come libro e come tale la versione di
+             riferimento è quella in PDF, accessibile nella sezione <a
+             href="stampa.html"> <font face="sans-serif"> <b>Download</b>
+             </font></a>. Grazie all'opera di Mirko Maischberger abbiamo
+             anche una bellissima versione HTML, accessibile nella sezione <a
+             href="http://www.lilik.it/~mirko/gapil/gapil.html"> <font
+             face="sans-serif"> <b>online</b></font></a>, finalmente
+             all'altezza della versione stampabile.
+         </td>
+       </tr>
+       <tr>
+         <td width="130" valign="top">
+           <b>
+             <font color="#0000aa">
+               Stato
+             </font>
+           </b>
+         </td>
+         <td bgcolor="lightblue"> <b>GaPiL</b> è in continua evoluzione ma
+           alcune parti hanno raggiunto una "stabilità" sufficiente (nel
+           senso che le ho riviste, le ritengo abbastanza complete, e non
+           sono stato capace di accorgermi degli errori che ci ho lasciato)
+           altre sono da rivedere, altre sono solo parzialmente accennate. La
+           situazione attuale è la seguente:
+           <table width="600" cellspacing="5">
+             <tbody>
+               <tr>
+                 <td valign="top"> <b> Cap. 1 </b> </td>
+                 <td valign="top"> Introduzione </td> 
+                 <td valign="top"> quasi completo e parzialmente revisionato
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 2-3 </b> </td>
+                 <td valign="top"> Gestione dei processi </td>
+                 <td valign="top"> quasi completi e parzialmente revisionati
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 4-7 </b> </td>
+                 <td valign="top"> Gestione base dei file </td>
+                 <td valign="top"> quasi completi e parzialmente revisionati
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 8 </b> </td>               
+                 <td valign="top"> Sistema, parametri, errori</td> 
+                 <td valign="top"> quasi completo, da revisionare</td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 9 </b> </td>
+                 <td valign="top"> Segnali</td> 
+                 <td valign="top"> quasi completo, da revisionare </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 10 </b> </td>
+                 <td valign="top"> Sessioni e terminali</td> 
+                 <td valign="top"> sessioni complete, da revisionare, 
+                   terminali quasi completi. </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 11 </b> </td>
+                 <td valign="top"> Gestione avanzata dei file</td> 
+                 <td valign="top"> 
+                   I/O multiplexing e I/O non bloccante parzialmente rivisti,
+                   I/O asincrono da aggiornare, memory
+                   mapped completo, da revisionare, file locking
+                   completo, da revisionare.  
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 12 </b> </td>
+                 <td valign="top"> IPC </td> 
+                 <td valign="top"> pipe, fifo e code, semafori, 
+                   memoria condivisa, tecniche alternative completi, da
+                   revisionare, code di messaggi e memoria condivisa POSIX 
+                   quasi completi, semafori POSIX da fare.
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 13 </b> </td>
+                 <td valign="top"> Introduzione alla rete</td> 
+                 <td valign="top"> completo, da revisionare </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 14 </b> </td>
+                 <td valign="top"> I socket</td> 
+                 <td valign="top"> completo, da revisionare. Manca la
+                 trattazione di eventuali ulteriori famiglie di socket. 
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 15 </b> </td>
+                 <td valign="top"> I socket TCP </td> 
+                 <td valign="top"> Completo, da
+                   revisionare.
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 16 </b> </td>
+                 <td valign="top"> Altri socket </td> 
+                 <td valign="top"> Due placeholder per socket UDP ed unix
+                     domain, completamente da fare.
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 17 </b> </td>
+                 <td valign="top"> Gestione dei socket </td> 
+                 <td valign="top"> Due placeholder per la gestione degli
+                     indirizzi e le opzioni dei socket, completamente da fare.
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Cap. 18 </b> </td>
+                 <td valign="top"> Socket avanzati </td> 
+                 <td valign="top"> Due placeholder per socket TCP e UDP
+                   avanzati, completamente da fare.
+                 </td>
+               </tr>
+               <tr>
+                 <td valign="top"> <b> Appendici </b> </td>
+                 <td valign="top"> I protocolli, gli errori, ecc.</td> 
+                 <td valign="top"> Materiale messo insieme alla
+                 rinfusa, e da rivedere totalmente.
+                 </td>
+               </tr>
+             </tbody>
+           </table>
+           <p>
+             <b> Versione corrente:</b> 507 pagine.
+           </p>
+         </td>
+       </tr>
+       </tr>
+     </tbody>
+    </table>
+<!-- CUT HERE -->
+  </body>
+</html>
diff --git a/img/udp_connection.dia b/img/udp_connection.dia
new file mode 100644 (file)
index 0000000..c681fab
Binary files /dev/null and b/img/udp_connection.dia differ
index 1f1023553f71a92485f197a8838a2df6272aed9f..d7bc4c0e520f533aa96d408f139a64e35651097f 100644 (file)
@@ -19,7 +19,59 @@ capitolo gli altri tipi di 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}}
index 23d920650c241368332836c625463b012019c52d..5426a0d77cbfbcf56775abd2eb0749760a02bf24 100644 (file)
@@ -261,9 +261,9 @@ seguenti costanti:
   altro socket. I dati vengono ricevuti e trasmessi come un flusso continuo di
   byte (da cui il nome \textit{stream}).
 \item[\const{SOCK\_DGRAM}] Viene usato per trasmettere pacchetti di dati
-  (\textit{datagram}) di lunghezza massima fissata indirizzati singolarmente,
-  Non esiste una connessione e la trasmissione è effettuata in maniera non
-  affidabile.
+  (\textit{datagram}) di lunghezza massima prefissata, indirizzati
+  singolarmente. Non esiste una connessione e la trasmissione è effettuata in
+  maniera non affidabile.
 \item[\const{SOCK\_SEQPACKET}] Provvede un canale di trasmissione di dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati possono vengono trasmessi per pacchetti di dimensione
index 71c3b6507ebe4e4a27b69b5e8ecb0834d2d3e7b8..5ddcd161825b1513a9e7491d657567625a044e9a 100644 (file)
 \chapter{I socket TCP}
 \label{cha:TCP_socket}
 
-In questo capitolo iniziamo ad approfondire la conoscenza dei socket TCP,
-iniziando con una descrizione delle principali caratteristiche del
-funzionamento di una connessione TCP.  Tratteremo poi le varie funzioni che
-servono alla creazione di una connessione fra un server elementare ed il suo
-client, fornendo poi alcuni esempi di applicazione elementare, e finiremo
-prendendo in esame l'uso dell'I/O multiplexing.
-
+In questo capitolo tratteremo le basi dei socket TCP, iniziando con una
+descrizione delle principali caratteristiche del funzionamento di una
+connessione TCP; vedremo poi le varie funzioni che servono alla creazione di
+una connessione fra client e server, fornendo alcuni esempi elementari, e
+finiremo prendendo in esame l'uso dell'I/O multiplexing.
 
 
 \section{Il funzionamento di una connessione TCP}