Convertiti (spero) tutti i prototipi delle funzioni al nuovo environment...
[gapil.git] / elemtcp.tex
index d3178839f56981b5b2cb2403be16ae75b37e9d97..5e5a69cd3c782f2cda80f1e40a864c79352e8d58 100644 (file)
@@ -35,7 +35,7 @@ verifica utilizzando il codice dei due precedenti esempi elementari
 \figref{fig:net_cli_code} e \figref{fig:net_serv_code}) che porta alla
 creazione di una connessione è la seguente:
  
 \figref{fig:net_cli_code} e \figref{fig:net_serv_code}) che porta alla
 creazione di una connessione è la seguente:
  
-\begin{itemize}
+\begin{enumerate}
 \item Il server deve essere preparato per accettare le connessioni in arrivo;
   il procedimento si chiama \textsl{apertura passiva} del socket (in inglese
   \textit{passive open}); questo viene fatto chiamando la sequenza di funzioni
 \item Il server deve essere preparato per accettare le connessioni in arrivo;
   il procedimento si chiama \textsl{apertura passiva} del socket (in inglese
   \textit{passive open}); questo viene fatto chiamando la sequenza di funzioni
@@ -71,7 +71,7 @@ creazione di una connessione 
   \texttt{SYN} del server inviando un \texttt{ACK}. Alla ricezione di
   quest'ultimo la funzione \texttt{accept} del server ritorna e la connessione
   è stabilita.
   \texttt{SYN} del server inviando un \texttt{ACK}. Alla ricezione di
   quest'ultimo la funzione \texttt{accept} del server ritorna e la connessione
   è stabilita.
-\end{itemize} 
+\end{enumerate} 
 
 Il procedimento viene chiamato \textit{three way handshake} dato che per
 realizzarlo devono essere scambiati tre segmenti.  In \nfig\ si è
 
 Il procedimento viene chiamato \textit{three way handshake} dato che per
 realizzarlo devono essere scambiati tre segmenti.  In \nfig\ si è
@@ -186,7 +186,7 @@ seguente:
 \item Dopo un certo tempo anche il secondo processo chiamerà la funzione
   \texttt{close} sul proprio socket, causando l'emissione di un altro segmento
   FIN. 
 \item Dopo un certo tempo anche il secondo processo chiamerà la funzione
   \texttt{close} sul proprio socket, causando l'emissione di un altro segmento
   FIN. 
-  
+
 \item L'altro capo della connessione riceverà il FIN conclusivo e risponderà
   con un ACK.
 \end{enumerate}
 \item L'altro capo della connessione riceverà il FIN conclusivo e risponderà
   con un ACK.
 \end{enumerate}
@@ -248,21 +248,21 @@ riferimento resta (FIXME citare lo Stevens); qui ci limiteremo a descrivere
 brevemente un semplice esempio di connessione e le transizioni che avvengono
 nei due casi appena citati (creazione e terminazione della connessione).
 
 brevemente un semplice esempio di connessione e le transizioni che avvengono
 nei due casi appena citati (creazione e terminazione della connessione).
 
-In assenza di connessione lo stato del TCP è \textsl{CLOSED}; quando una
+In assenza di connessione lo stato del TCP è \texttt{CLOSED}; quando una
 applicazione esegue una apertura attiva il TCP emette un SYN e lo stato
 applicazione esegue una apertura attiva il TCP emette un SYN e lo stato
-diventa \textsl{SYN\_SENT}; quando il TCP riceve la risposta del SYN$+$ACK
-emette un ACK e passa allo stato \textsl{ESTABLISHED}; questo è lo stato
+diventa \texttt{SYN\_SENT}; quando il TCP riceve la risposta del SYN$+$ACK
+emette un ACK e passa allo stato \texttt{ESTABLISHED}; questo è lo stato
 finale in cui avviene la gran parte del trasferimento dei dati.
 
 Dal lato server in genere invece il passaggio che si opera con l'apertura
 finale in cui avviene la gran parte del trasferimento dei dati.
 
 Dal lato server in genere invece il passaggio che si opera con l'apertura
-passiva è quello di portare il socket dallo stato \textsl{CLOSED} allo
-stato \textsl{LISTEN} in cui vengono accettate le connessioni.
+passiva è quello di portare il socket dallo stato \texttt{CLOSED} allo
+stato \texttt{LISTEN} in cui vengono accettate le connessioni.
 
 
-Dallo stato \textsl{ESTABLISHED} si può uscire in due modi; se un'applicazione
+Dallo stato \texttt{ESTABLISHED} si può uscire in due modi; se un'applicazione
 chiama la \texttt{close} prima di aver ricevuto un end of file (chiusura
 chiama la \texttt{close} prima di aver ricevuto un end of file (chiusura
-attiva) la transizione è verso lo stato \textsl{FIN\_WAIT\_1}; se invece
-l'applicazione riceve un FIN nello stato \textsl{ESTABLISHED} (chiusura
-passiva) la transizione è verso lo stato \textsl{CLOSE\_WAIT}.
+attiva) la transizione è verso lo stato \texttt{FIN\_WAIT\_1}; se invece
+l'applicazione riceve un FIN nello stato \texttt{ESTABLISHED} (chiusura
+passiva) la transizione è verso lo stato \texttt{CLOSE\_WAIT}.
 
 In \nfig\ è riportato lo schema dello scambio dei pacchetti che avviene per
 una un esempio di connessione, insieme ai vari stati che il protocollo viene
 
 In \nfig\ è riportato lo schema dello scambio dei pacchetti che avviene per
 una un esempio di connessione, insieme ai vari stati che il protocollo viene
@@ -292,7 +292,7 @@ risposta.
 Infine si ha lo scambio dei quattro segmenti che terminano la connessione
 secondo quanto visto in \secref{sec:TCPel_conn_term}; si noti che il capo della
 connessione che esegue la chiusura attiva entra nello stato
 Infine si ha lo scambio dei quattro segmenti che terminano la connessione
 secondo quanto visto in \secref{sec:TCPel_conn_term}; si noti che il capo della
 connessione che esegue la chiusura attiva entra nello stato
-\textsl{TIME\_WAIT} su cui torneremo fra poco.
+\texttt{TIME\_WAIT} su cui torneremo fra poco.
 
 È da notare come per effettuare uno scambio di due pacchetti (uno di richiesta
 e uno di risposta) il TCP necessiti di ulteriori otto segmenti, se invece si
 
 È da notare come per effettuare uno scambio di due pacchetti (uno di richiesta
 e uno di risposta) il TCP necessiti di ulteriori otto segmenti, se invece si
@@ -339,16 +339,16 @@ pi
 
 Ogni implementazione del TCP deve scegliere un valore per la MSL (l'RFC1122
 raccomanda 2 minuti, linux usa 30 secondi), questo comporta una durata dello
 
 Ogni implementazione del TCP deve scegliere un valore per la MSL (l'RFC1122
 raccomanda 2 minuti, linux usa 30 secondi), questo comporta una durata dello
-stato \textsl{TIME\_WAIT} che a seconda delle implementazioni può variare fra
+stato \texttt{TIME\_WAIT} che a seconda delle implementazioni può variare fra
 1 a 4 minuti.
 
 Lo stato \texttt{TIME\_WAIT} viene utilizzato dal protocollo per due motivi
 principali:
 1 a 4 minuti.
 
 Lo stato \texttt{TIME\_WAIT} viene utilizzato dal protocollo per due motivi
 principali:
-\begin{itemize}
+\begin{enumerate}
 \item implementare in maniera affidabile la terminazione della connessione
   in entrambe le direzioni.
 \item consentire l'eliminazione dei segmenti duplicati dalla rete. 
 \item implementare in maniera affidabile la terminazione della connessione
   in entrambe le direzioni.
 \item consentire l'eliminazione dei segmenti duplicati dalla rete. 
-\end{itemize}
+\end{enumerate}
 
 Il punto è che entrambe le ragioni sono importanti, anche se spesso si fa
 riferimento solo alla prima; ma è solo se si tiene conto della seconda che si
 
 Il punto è che entrambe le ragioni sono importanti, anche se spesso si fa
 riferimento solo alla prima; ma è solo se si tiene conto della seconda che si
@@ -636,8 +636,7 @@ ci si porr
 
 Il prototipo della funzione, definito in \texttt{sys/socket.h}, è il seguente:
 
 
 Il prototipo della funzione, definito in \texttt{sys/socket.h}, è il seguente:
 
-\begin{itemize}
-\item \texttt{int bind(int sockfd, const struct sockaddr *serv\_addr,
+\begin{prototype}{int bind(int sockfd, const struct sockaddr *serv\_addr,
     socklen\_t addrlen) }
   
   Il primo argomento è un file descriptor ottenuto da una precedente chiamata
     socklen\_t addrlen) }
   
   Il primo argomento è un file descriptor ottenuto da una precedente chiamata
@@ -648,15 +647,14 @@ Il prototipo della funzione, definito in \texttt{sys/socket.h}, 
   La funzione restituisce zero in caso di successo e -1 per un errore, in caso
   di errore. La variabile \texttt{errno} viene settata secondo i seguenti
   codici di errore:
   La funzione restituisce zero in caso di successo e -1 per un errore, in caso
   di errore. La variabile \texttt{errno} viene settata secondo i seguenti
   codici di errore:
-  \begin{itemize}
+  \begin{errlist}
   \item \texttt{EBADF} Il file descriptor non è valido.
   \item \texttt{EINVAL} Il socket ha già un indirizzo assegnato.
   \item \texttt{ENOTSOCK} Il file descriptor non è associato ad un socket.
   \item \texttt{EACCESS} Si è cercato di usare un indirizzo riservato senza
     essere root. 
   \item \texttt{EBADF} Il file descriptor non è valido.
   \item \texttt{EINVAL} Il socket ha già un indirizzo assegnato.
   \item \texttt{ENOTSOCK} Il file descriptor non è associato ad un socket.
   \item \texttt{EACCESS} Si è cercato di usare un indirizzo riservato senza
     essere root. 
-  \end{itemize}
-
-\end{itemize}
+  \end{errlist}
+\end{prototype}
 
 Con il TCP la chiamata \texttt{bind} permette di specificare l'indirizzo, la
 porta, entrambi o nessuno dei due. In genere i server utilizzano una porta
 
 Con il TCP la chiamata \texttt{bind} permette di specificare l'indirizzo, la
 porta, entrambi o nessuno dei due. In genere i server utilizzano una porta
@@ -718,8 +716,7 @@ La funzione \texttt{connect} 
 connessione con un server TCP, il prototipo della funzione, definito in
 \texttt{sys/socket.h}, è il seguente:
 
 connessione con un server TCP, il prototipo della funzione, definito in
 \texttt{sys/socket.h}, è il seguente:
 
-\begin{itemize}
-\item \texttt{int connect(int sockfd, const struct sockaddr *serv\_addr,
+\begin{prototype}{int connect(int sockfd, const struct sockaddr *serv\_addr,
     socklen\_t addrlen) }
   
   Il primo argomento è un file descriptor ottenuto da una precedente chiamata
     socklen\_t addrlen) }
   
   Il primo argomento è un file descriptor ottenuto da una precedente chiamata
@@ -730,7 +727,7 @@ connessione con un server TCP, il prototipo della funzione, definito in
   La funzione restituisce zero in caso di successo e -1 per un errore, in caso
   di errore. La variabile \texttt{errno} viene settata secondo i seguenti
   codici di errore:
   La funzione restituisce zero in caso di successo e -1 per un errore, in caso
   di errore. La variabile \texttt{errno} viene settata secondo i seguenti
   codici di errore:
-  \begin{itemize}
+  \begin{errlist}
   \item \texttt{EBADF} Il file descriptor non è valido.
   \item \texttt{EFAULT} L'indirizzo della struttura di indirizzi è al di fuori
     dello spazio di indirizzi dell'utente.
   \item \texttt{EBADF} Il file descriptor non è valido.
   \item \texttt{EFAULT} L'indirizzo della struttura di indirizzi è al di fuori
     dello spazio di indirizzi dell'utente.
@@ -751,8 +748,8 @@ connessione con un server TCP, il prototipo della funzione, definito in
   \item \texttt{EACCESS, EPERM} Si è tentato di eseguire una connessione ad un
     indirizzo broacast senza che il socket fosse stato abilitato per il
     broadcast.
   \item \texttt{EACCESS, EPERM} Si è tentato di eseguire una connessione ad un
     indirizzo broacast senza che il socket fosse stato abilitato per il
     broadcast.
-  \end{itemize}
-\end{itemize}
+  \end{errlist}
+\end{prototype}
 
 La struttura dell'indirizzo deve essere inizializzata con l'indirizzo IP e il
 numero di porta del server a cui ci si vuole connettere, come mostrato
 
 La struttura dell'indirizzo deve essere inizializzata con l'indirizzo IP e il
 numero di porta del server a cui ci si vuole connettere, come mostrato