X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=elemtcp.tex;h=1678559a0c6ab31a1347fba1550b2a088d767f60;hp=7ba25a084091451abc34ab419a2dc93fb23bb543;hb=247c7ba624f39b283f9e85816c0616348f39c1b6;hpb=486c2be2a052783e6dec09bc288c76ecaa4f21e6 diff --git a/elemtcp.tex b/elemtcp.tex index 7ba25a0..1678559 100644 --- a/elemtcp.tex +++ b/elemtcp.tex @@ -60,8 +60,8 @@ creazione di una connessione \item il server deve dare ricevuto (l'\textit{acknowledge}) del SYN del client, inoltre anche il server deve inviare il suo SYN al client (e trasmettere il suo numero di sequenza iniziale) questo viene fatto - ritrasmettendo un singolo segmento in cui entrambi i flag SYN ACK e sono - settati. + ritrasmettendo un singolo segmento in cui sono impostati entrambi i flag SYN + ACK. \item una volta che il client ha ricevuto l'acknowledge dal server la funzione \func{connect} ritorna, l'ultimo passo è dare dare il ricevuto del SYN del @@ -100,7 +100,7 @@ segmento. Il numero di sequenza di ciascun segmento viene calcolato a partire da un \textsl{numero di sequenza iniziale} generato in maniera casuale del kernel all'inizio della connessione e trasmesso con il SYN; l'acknowledgement di -ciascun segmento viene effettuato dall'altro capo della connessione settando +ciascun segmento viene effettuato dall'altro capo della connessione impostando il flag ACK e restituendo nell'apposito campo dell'header un \textit{acknowledge number}) pari al numero di sequenza che il ricevente si aspetta di ricevere con il pacchetto successivo; dato che il primo pacchetto @@ -642,8 +642,8 @@ ci si porr contiene, secondo quanto già trattato in \secref{sec:sock_sockaddr}. \bodydesc{La funzione restituisce zero in caso di successo e -1 per un - errore; in caso di errore la variabile \var{errno} viene settata secondo i - seguenti codici di errore: + errore; in caso di errore la variabile \var{errno} viene impostata secondo + i seguenti codici di errore: \begin{errlist} \item[\macro{EBADF}] il file descriptor non è valido. \item[\macro{EINVAL}] il socket ha già un indirizzo assegnato. @@ -728,17 +728,19 @@ connessione con un server TCP, il prototipo della funzione socket, già descritta in \secref{sec:sock_sockaddr}. \bodydesc{La funzione restituisce zero in caso di successo e -1 per un - errore, in caso di errore la variabile \var{errno} viene settata secondo i - seguenti codici di errore: + errore, in caso di errore la variabile \var{errno} viene impostata secondo + i seguenti codici di errore: \begin{errlist} \item[\macro{ECONNREFUSED}] non c'è nessuno in ascolto sull'indirizzo remoto. \item[\macro{ETIMEDOUT}] si è avuto timeout durante il tentativo di connessione. \item[\macro{ENETUNREACH}] la rete non è raggiungibile. - \item[\macro{EINPROGRESS}] il socket è non bloccante e la connessione non - può essere conclusa immediatamente. - \item[\macro{EALREADY}] il socket è non bloccante e un tentativo precedente - di connessione non si è ancora concluso. + \item[\macro{EINPROGRESS}] il socket è non bloccante (vedi + \secref{sec:file_noblocking}) e la connessione non può essere conclusa + immediatamente. + \item[\macro{EALREADY}] il socket è non bloccante (vedi + \secref{sec:file_noblocking}) e un tentativo precedente di connessione non + si è ancora concluso. \item[\macro{EAGAIN}] non ci sono più porte locali libere. \item[\macro{EAFNOSUPPORT}] l'indirizzo non ha una famiglia di indirizzi corretta nel relativo campo. @@ -769,11 +771,11 @@ seguenti: invece ripete l'emissione del SYN ad intervalli di 30 secondi per un numero di volte che può essere stabilito dall'utente sia con una opportuna \func{sysctl} che attraverso il filesystem \file{/proc} scrivendo il valore - voluto in \file{/proc/sys/net/ipv4/tcp\_syn\_retries}. Il valore di default + voluto in \file{/proc/sys/net/ipv4/tcp\_syn\_retries}. Il valore predefinito per la ripetizione dell'invio è di 5 volte, che comporta un timeout dopo circa 180 secondi. % -% Le informazioni su tutte le opzioni settabili via /proc stanno in +% Le informazioni su tutte le opzioni impostabili via /proc stanno in % Linux/Documentation/networking/ip-sysctl.txt % \item Il client riceve come risposta al SYN un RST significa che non c'è @@ -944,7 +946,7 @@ viene messo in attesa. Il prototipo della funzione \bodydesc{La funzione restituisce un numero di socket descriptor positivo in caso di successo e -1 in caso di errore, nel qual caso la variabile - \var{errno} viene settata ai seguenti valori: + \var{errno} viene impostata ai seguenti valori: \begin{errlist} \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor @@ -952,8 +954,9 @@ viene messo in attesa. Il prototipo della funzione \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket. \item[\macro{EOPNOTSUPP}] il socket è di un tipo che non supporta questa operazione. - \item[\macro{EAGAIN} o \macro{EWOULDBLOCK}] il socket è stato settato come - non bloccante, e non ci sono connessioni in attesa di essere accettate. + \item[\macro{EAGAIN} o \macro{EWOULDBLOCK}] il socket è stato impostato come + non bloccante (vedi \secref{sec:file_noblocking}), e non ci sono + connessioni in attesa di essere accettate. \item[\macro{EPERM}] Le regole del firewall non consentono la connessione. \item[\macro{ENOBUFS, ENOMEM}] questo spesso significa che l'allocazione della memoria è limitata dai limiti sui buffer dei socket, non dalla @@ -999,10 +1002,11 @@ prima connessione completa (estratta dalla relativa coda, vedi socket \var{sockfd}. Quest'ultimo (detto \textit{listening socket}) è quello creato all'inizio e messo in ascolto con \func{listen}, e non viene toccato dalla funzione. Se non ci sono connessioni pendenti da accettare la funzione -mette in attesa il processo\footnote{a meno che non si sia settato il socket - per essere non-bloccante, nel qual caso ritorna con l'errore \macro{EAGAIN}. - Torneremo su questa modalità di operazione in - \secref{sec:xxx_sock_noblock}.} fintanto che non ne arriva una. +mette in attesa il processo\footnote{a meno che non si sia imopstato il socket + per essere non bloccante (vedi \secref{sec:file_noblocking}), nel qual caso + ritorna con l'errore \macro{EAGAIN}. Torneremo su questa modalità di + operazione in \secref{sec:xxx_sock_noblock}.} fintanto che non ne arriva +una. Il meccanismo di funzionamento di \func{accept} è essenziale per capire il funzionamento di un server: in generale infatti c'è sempre un solo socket in