%% 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".
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
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 \texttt{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
il traffico nella suddivisione fra dati normali e prioritari. In generale
pertanto:
\begin{itemize}
-\item i dati trasmessi su un socket vengono considerati traffico normale,
- pertanto vengono rilevati da una selezione con \const{POLLIN} o
- \const{POLLRDNORM}.
+\item i dati inviati su un socket vengono considerati traffico normale,
+ pertanto vengono rilevati alla loro ricezione sull'altro capo da una
+ selezione effettuata con \const{POLLIN} o \const{POLLRDNORM};
\item i dati \textit{out-of-band} su un socket TCP vengono considerati
traffico prioritario e vengono rilevati da una condizione \const{POLLIN},
\const{POLLPRI} o \const{POLLRDBAND}.
viene considerato traffico normale, pertanto viene rilevato da una
condizione \const{POLLIN} o \const{POLLRDNORM}, ma una conseguente chiamata
a \func{read} restituirà 0.
+\item la disponibilità di spazio sul socket per la scrittura di dati viene
+ segnalata con una condizione \const{POLLOUT}.
+\item quando uno dei due capi del socket chiude un suo lato della connessione
+ con \func{shutdown} si riceve una condizione di \const{POLLHUP}.
\item la presenza di un errore sul socket (sia dovuta ad un segmento RST che a
timeout) viene considerata traffico normale, ma viene segnalata anche dalla
condizione \const{POLLERR}.