X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=tcpsock.tex;h=b13c16dd008674252539a5685288e362a2c80aec;hp=ad5e2056685f04fe939aae1bc1db38698ac35c62;hb=bba36f6db6e48de4fd97f8a1aa15a0d82558e776;hpb=d429b57bfd2108e922838756d4909251065a41f4 diff --git a/tcpsock.tex b/tcpsock.tex index ad5e205..b13c16d 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -2581,15 +2581,15 @@ successivo, per tentare di ristabilire la connessione. Il risultato finale qui dipende dall'implementazione dello stack TCP, e nel caso di Linux anche dall'impostazione di alcuni dei parametri di sistema che si trovano in \file{/proc/sys/net/ipv4}, che ne controllano il comportamento: -in questo caso in particolare da \file{tcp\_retries2}. Questo parametro -infatti specifica il numero di volte che deve essere ritentata la -ritrasmissione di un pacchetto nel mezzo di una connessione prima di riportare -un errore di timeout. Il valore preimpostato è pari a 15, il che -comporterebbe 15 tentativi di ritrasmissione, ma nel nostro caso le cose sono -andate diversamente, dato che le ritrasmissioni registrate da \cmd{tcpdump} -sono solo 8; inoltre l'errore riportato all'uscita del client non è stato -\errcode{ETIMEDOUT}, come dovrebbe essere in questo caso, ma -\errcode{EHOSTUNREACH}. +in questo caso in particolare da \file{tcp\_retries2} (vedi +sez.~\ref{sec:sock_sysctl}). Questo parametro infatti specifica il numero di +volte che deve essere ritentata la ritrasmissione di un pacchetto nel mezzo di +una connessione prima di riportare un errore di timeout. Il valore +preimpostato è pari a 15, il che comporterebbe 15 tentativi di ritrasmissione, +ma nel nostro caso le cose sono andate diversamente, dato che le +ritrasmissioni registrate da \cmd{tcpdump} sono solo 8; inoltre l'errore +riportato all'uscita del client non è stato \errcode{ETIMEDOUT}, come dovrebbe +essere in questo caso, ma \errcode{EHOSTUNREACH}. Per capire l'accaduto continuiamo ad analizzare l'output di \cmd{tcpdump}: esso ci mostra che a un certo punto i tentativi di ritrasmissione del @@ -2700,7 +2700,7 @@ riportando appunto come errore \errcode{ECONNRESET}. Occorre precisare che se si vuole che il client sia in grado di accorgersi del crollo del server anche quando non sta effettuando uno scambio di dati, è possibile usare una impostazione speciale del socket (ci torneremo in -sez.~\ref{sec:TCP_sock_options}) che provvede all'esecuzione di questo +sez.~\ref{sec:sock_generic_options}) che provvede all'esecuzione di questo controllo. \section{L'uso dell'I/O multiplexing} @@ -2748,8 +2748,8 @@ pronto per la lettura sono le seguenti: sufficiente a superare il valore di una \textsl{soglia di basso livello} (il cosiddetto \textit{low watermark}). Questo valore è espresso in numero di byte e può essere impostato con l'opzione del socket \const{SO\_RCVLOWAT} - (tratteremo le opzioni dei socket in sez.~\ref{sec:TCP_sock_options}); il - suo valore di default è 1 per i socket TCP e UDP. In questo caso una + (tratteremo l'uso di questa opzione in sez.~\ref{sec:sock_generic_options}); + il suo valore di default è 1 per i socket TCP e UDP. In questo caso una operazione di lettura avrà successo e leggerà un numero di byte maggiore di zero. \item il lato in lettura della connessione è stato chiuso; si è cioè ricevuto @@ -2761,7 +2761,7 @@ pronto per la lettura sono le seguenti: \item c'è stato un errore sul socket. In questo caso una operazione di lettura non si bloccherà ma restituirà una condizione di errore (ad esempio \func{read} restituirà -1) e imposterà la variabile \var{errno} al relativo - valore. Vedremo in sez.~\ref{sec:TCP_sock_options} come sia possibile + valore. Vedremo in sez.~\ref{sec:sock_generic_options} come sia possibile estrarre e cancellare errori pendenti su un socket usando l'opzione \const{SO\_ERROR}. \item quando si sta utilizzando un \textit{listening socket} ed ci sono delle @@ -2782,8 +2782,9 @@ pronto per la scrittura sono le seguenti: valore della \textsl{soglia di basso livello} in scrittura ed inoltre o il socket è già connesso o non necessita (ad esempio è UDP) di connessione. Il valore della soglia è espresso in numero di byte e può essere impostato con - l'opzione del socket \const{SO\_SNDLOWAT}; il suo valore di default è 2048 - per i socket TCP e UDP. In questo caso una operazione di scrittura non si + l'opzione del socket \const{SO\_SNDLOWAT} (trattata in + sez.~\ref{sec:sock_generic_options}); il suo valore di default è 2048 per i + socket TCP e UDP. In questo caso una operazione di scrittura non si bloccherà e restituirà un valore positivo pari al numero di byte accettati dal livello di trasporto. \item il lato in scrittura della connessione è stato chiuso. In questo caso @@ -2791,7 +2792,7 @@ pronto per la scrittura sono le seguenti: \item c'è stato un errore sul socket. In questo caso una operazione di scrittura non si bloccherà ma restituirà una condizione di errore ed imposterà opportunamente la variabile \var{errno}. Vedremo in - sez.~\ref{sec:TCP_sock_options} come sia possibile estrarre e cancellare + sez.~\ref{sec:sock_generic_options} come sia possibile estrarre e cancellare errori pendenti su un socket usando l'opzione \const{SO\_ERROR}. \end{itemize*}