X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=tcpsock.tex;h=5951a91107a872bde436424df1adaa7ce8cfe96a;hp=6f7ca7d97d87ed8dad47a2892c3d7b093fbfcf2a;hb=26f7a8bb19c6cb198c213757a97b6ac79e40db4b;hpb=5e9607e62d03da3360bd27146e788a89a0820ab9 diff --git a/tcpsock.tex b/tcpsock.tex index 6f7ca7d..5951a91 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -1,6 +1,6 @@ %% tcpsock.tex %% -%% Copyright (C) 2000-2018 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2019 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 "Un preambolo", @@ -355,7 +355,7 @@ comune trovare domande su come sia possibile evitare che un'applicazione resti in questo stato lasciando attiva una connessione ormai conclusa; la risposta è che non deve essere fatto, ed il motivo cercheremo di spiegarlo adesso. -\itindex{Maximum~Segment~Lifetime} +\itindbeg{Maximum~Segment~Lifetime~(MSL)} Come si è visto nell'esempio precedente (vedi fig.~\ref{fig:TCP_conn_example}) \texttt{TIME\_WAIT} è lo stato finale in cui il capo di una connessione che esegue la chiusura attiva resta prima di passare alla chiusura definitiva @@ -374,6 +374,7 @@ router; quando si annulla il pacchetto viene scartato. Siccome il numero è ad TTL (da \textit{time to live}) non è propriamente un limite sul tempo, sulla sua base si può stimare che un pacchetto IP non possa restare nella rete per più un certo numero di secondi, che costituisce la MSL. +\itindend{Maximum~Segment~Lifetime~(MSL)} Ogni realizzazione del TCP deve scegliere un valore per la MSL; l'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} raccomanda 2 minuti, @@ -1682,7 +1683,7 @@ descriptor non si è annullato. Infatti subito dopo la creazione del socket \var{list\_fd} ha una referenza, e lo stesso vale per \var{conn\_fd} dopo il ritorno di \func{accept}, ma dopo la \func{fork} i descrittori vengono duplicati nel padre e nel figlio per cui -entrambi i socket si trovano con due referenze. Questo fa si che quando il +entrambi i socket si trovano con due referenze. Questo fa sì che quando il padre chiude \var{sock\_fd} esso resta con una referenza da parte del figlio, e sarà definitivamente chiuso solo quando quest'ultimo, dopo aver completato le sue operazioni, chiamerà (\texttt{\small 45}) la funzione \func{close}. @@ -1848,7 +1849,7 @@ scriverli su \file{stdout}. Quando si concluderà l'invio di dati mandando un \textit{end-of-file} sullo \textit{standard input} si avrà il ritorno di \func{fgets} con un puntatore -nullo (si riveda quanto spiegato in sez.~\ref{sec:file_line_io}) e la +nullo (si riveda quanto spiegato in sez.~\ref{sec:file_unformatted_io}) e la conseguente uscita dal ciclo; al che la subroutine ritorna ed il nostro programma client termina. @@ -2087,8 +2088,8 @@ tab.~\ref{tab:proc_proc_states}). Se a questo punto si inizia a scrivere qualcosa sul client non sarà trasmesso niente fintanto che non si preme il tasto di a capo (si ricordi quanto detto -in sez.~\ref{sec:file_line_io} a proposito dell'I/O su terminale). Solo -allora \func{fgets} ritornerà ed il client scriverà quanto immesso dal +in sez.~\ref{sec:file_unformatted_io} a proposito dell'I/O su terminale). +Solo allora \func{fgets} ritornerà ed il client scriverà quanto immesso dal terminale sul socket, per poi passare a rileggere quanto gli viene inviato all'indietro dal server, che a sua volta sarà inviato sullo \textit{standard output}, che nel caso ne provoca l'immediata stampa a video. @@ -2958,7 +2959,7 @@ pronto per la scrittura sono le seguenti: errori pendenti su un socket usando l'opzione \const{SO\_ERROR}. \end{itemize*} -Infine c'è una sola condizione che fa si che \func{select} ritorni segnalando +Infine c'è una sola condizione che fa sì che \func{select} ritorni segnalando che un socket (che sarà riportato nel terzo insieme di file descriptor) ha una condizione di eccezione pendente, e cioè la ricezione sul socket di \textsl{dati urgenti} (o \textit{out-of-band}), una caratteristica specifica @@ -2975,7 +2976,7 @@ Lo scopo dei due valori di soglia per i buffer di ricezione e di invio è quello di consentire maggiore flessibilità nell'uso di \func{select} da parte dei programmi, se infatti si sa che una applicazione non è in grado di fare niente fintanto che non può ricevere o inviare una certa quantità di dati, si -possono utilizzare questi valori per far si che \func{select} ritorni solo +possono utilizzare questi valori per far sì che \func{select} ritorni solo quando c'è la certezza di avere dati a sufficienza.\footnote{questo tipo di controllo è utile di norma solo per la lettura, in quanto in genere le operazioni di scrittura sono già controllate dall'applicazione, che sa