X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=tcpsock.tex;h=cec4ca845ad8e4e0bce5597e13b92c2ed6744120;hp=7dcdaf1ea5579bd16a542bfb088c064b5dfd8bd2;hb=406973e35011347c3812c671511ce738378a525b;hpb=c474f4307db945bc45287edd0ea4c2c29374d0ee diff --git a/tcpsock.tex b/tcpsock.tex index 7dcdaf1..cec4ca8 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -3,7 +3,7 @@ %% Copyright (C) 2000-2004 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 "Prefazione", +%% Free Software Foundation; with the Invariant Sections being "Un preambolo", %% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the %% license is included in the section entitled "GNU Free Documentation %% License". @@ -1302,7 +1302,7 @@ arrivati alla fine del file (per i socket questo significa in genere che l'altro capo è stato chiuso, e quindi non sarà più possibile leggere niente) e pertanto si ritorna senza aver concluso la lettura di tutti i byte richiesti. Entrambe le funzioni restituiscono 0 in caso di successo, ed un -valore negativo in caso di errore, \texttt{FullRead} restituisce il numero di +valore negativo in caso di errore, \func{FullRead} restituisce il numero di byte non letti in caso di end-of-file prematuro. @@ -1316,9 +1316,9 @@ nell'\href{http://www.ietf.org/rfc/rfc867.txt}{RFC~867}, che restituisce l'ora locale della macchina a cui si effettua la richiesta, e che è assegnato alla porta 13. -In fig.~\ref{fig:TCP_daytime_client_code} è riportata la sezione principale del -codice del nostro client. Il sorgente completo del programma -(\file{TCP\_daytime.c}, che comprende il trattamento delle opzioni ed una +In fig.~\ref{fig:TCP_daytime_client_code} è riportata la sezione principale +del codice del nostro client. Il sorgente completo del programma +(\texttt{TCP\_daytime.c}, che comprende il trattamento delle opzioni ed una funzione per stampare un messaggio di aiuto) è allegato alla guida nella sezione dei codici sorgente e può essere compilato su una qualunque macchina GNU/Linux. @@ -1418,7 +1418,8 @@ elementare, che sia anche in grado di rispondere al precedente client. Come primo esempio realizzeremo un server iterativo, in grado di fornire una sola risposta alla volta. Il codice del programma è nuovamente mostrato in fig.~\ref{fig:TCP_daytime_iter_server_code}, il sorgente completo -(\file{TCP\_iter\_daytimed.c}) è allegato insieme agli altri file degli esempi. +(\texttt{TCP\_iter\_daytimed.c}) è allegato insieme agli altri file degli +esempi. \begin{figure}[!htbp] \footnotesize \centering @@ -1515,8 +1516,8 @@ In fig.~\ref{fig:TCP_daytime_cunc_server_code} codice, in cui si sono tralasciati il trattamento delle opzioni e le parti rimaste invariate rispetto al precedente esempio (cioè tutta la parte riguardante l'apertura passiva del socket). Al solito il sorgente completo del -server, nel file \file{TCP\_cunc\_daytimed.c}, è allegato insieme ai sorgenti -degli altri esempi. +server, nel file \texttt{TCP\_cunc\_daytimed.c}, è allegato insieme ai +sorgenti degli altri esempi. \begin{figure}[!htb] \footnotesize \centering @@ -1652,11 +1653,11 @@ output. \label{sec:TCP_echo_client} Il codice della prima versione del client per il servizio \textit{echo}, -disponibile nel file \file{TCP\_echo\_first.c}, è riportato in +disponibile nel file \texttt{TCP\_echo\_first.c}, è riportato in fig.~\ref{fig:TCP_echo_client_1}. Esso ricalca la struttura del precedente client per il servizio \textit{daytime} (vedi -sez.~\ref{sec:TCP_daytime_client}), e la prima parte (\texttt{\small 10--27}) è -sostanzialmente identica, a parte l'uso di una porta diversa. +sez.~\ref{sec:TCP_daytime_client}), e la prima parte (\texttt{\small 10--27}) +è sostanzialmente identica, a parte l'uso di una porta diversa. \begin{figure}[!htb] \footnotesize \centering @@ -1733,11 +1734,11 @@ illustriamo immediatamente. \subsection{Il server \textit{echo}: prima versione} \label{sec:TCPsimp_server_main} -La prima versione del server, contenuta nel file \file{TCP\_echod\_first.c}, è -riportata in fig.~\ref{fig:TCP_echo_server_first_code}. Come abbiamo fatto per -il client anche il server è stato diviso in un corpo principale, costituito -dalla funzione \code{main}, che è molto simile a quello visto nel precedente -esempio per il server del servizio \textit{daytime} di +La prima versione del server, contenuta nel file \texttt{TCP\_echod\_first.c}, +è riportata in fig.~\ref{fig:TCP_echo_server_first_code}. Come abbiamo fatto +per il client anche il server è stato diviso in un corpo principale, +costituito dalla funzione \code{main}, che è molto simile a quello visto nel +precedente esempio per il server del servizio \textit{daytime} di sez.~\ref{sec:TCP_daytime_cunc_server}, e da una funzione ausiliaria \code{ServEcho} che si cura della gestione del servizio. @@ -2097,8 +2098,8 @@ riscrittura parziale del server, la nuova versione di questo, in cui si sono introdotte una serie di nuove opzioni che ci saranno utili per il debug, è mostrata in fig.~\ref{fig:TCP_echo_server_code_second}, dove si sono riportate la sezioni di codice modificate nella seconda versione del programma, il -codice completo di quest'ultimo si trova nel file \file{TCP\_echod\_second.c} -dei sorgenti allegati alla guida. +codice completo di quest'ultimo si trova nel file +\texttt{TCP\_echod\_second.c} dei sorgenti allegati alla guida. La prima modifica effettuata è stata quella di introdurre una nuova opzione a riga di comando, \texttt{-c}, che permette di richiedere il comportamento @@ -2979,7 +2980,7 @@ caso di nuovo il client non suppone che il programma server non venga terminato correttamente, ma si blocchi tutto senza la possibilità di avere l'emissione di un segmento FIN che segnala la terminazione della connessione. Di nuovo fintanto che la -connessione non si riattiva )con il riavvio della macchina del server) il +connessione non si riattiva (con il riavvio della macchina del server) il client non è in grado di fare altro che accettare dell'input e tentare di inviarlo. La differenza in questo caso è che non appena la connessione ridiventa attiva i dati verranno sì trasmessi, ma essendo state perse tutte le @@ -3141,12 +3142,12 @@ tutti i dati e della terminazione effettiva della connessione. \label{fig:TCP_ClientEcho} \end{figure} -Si è allora riportato in fig.~\ref{fig:TCP_ClientEcho} la versione finale della -nostra funzione \func{ClientEcho}, in grado di gestire correttamente l'intero -flusso di dati fra client e server. Il codice completo del client, +Si è allora riportato in fig.~\ref{fig:TCP_ClientEcho} la versione finale +della nostra funzione \func{ClientEcho}, in grado di gestire correttamente +l'intero flusso di dati fra client e server. Il codice completo del client, comprendente la gestione delle opzioni a riga di comando e le istruzioni per -la creazione della connessione, si trova nel file \file{TCP\_echo.c}, -distribuito coi sorgenti allegati alla guida. +la creazione della connessione, si trova nel file +\texttt{TCP\_echo\_fourth.c}, distribuito coi sorgenti allegati alla guida. La nuova versione è molto simile alla precedente di fig.~\ref{fig:TCP_ClientEcho_third}; la prima differenza è l'introduzione @@ -3437,10 +3438,11 @@ ma la struttura del programma resta sostanzialmente la stessa. In fig.~\ref{fig:TCP_PollEchod} è riportata la sezione principale della nuova versione del server, la versione completa del codice è riportata nel file -\file{poll\_echod.c} dei sorgenti allegati alla guida. Al solito nella figura -si sono tralasciate la gestione delle opzioni, la creazione del socket in -ascolto, la cessione dei privilegi e le operazioni necessarie a far funzionare -il programma come demone, privilegiando la sezione principale del programma. +\texttt{poll\_echod.c} dei sorgenti allegati alla guida. Al solito nella +figura si sono tralasciate la gestione delle opzioni, la creazione del socket +in ascolto, la cessione dei privilegi e le operazioni necessarie a far +funzionare il programma come demone, privilegiando la sezione principale del +programma. Come per il precedente server basato su \func{select} il primo passo (\texttt{\small 2--8}) è quello di inizializzare le variabili necessarie. Dato