X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=elemtcp.tex;h=3c4b2169d1637903a2e7feefd4e2d8ec852e7d0b;hp=812da04d6f9759d58d9f10d1da1a4a95cc4f1fd8;hb=429f6e0da8fc282eb6611b6fe83fdf58ae8da611;hpb=c89b1a9dba4bc529ca2d7acbe56ca379006ecc83 diff --git a/elemtcp.tex b/elemtcp.tex index 812da04..3c4b216 100644 --- a/elemtcp.tex +++ b/elemtcp.tex @@ -13,7 +13,7 @@ connessione TCP. \label{sec:TCPel_connession} Prima di entrare nei dettagli delle funzioni usate nelle applicazioni che -utilizzano i sokcet TCP, è fondamentale spiegare alcune basi del funzionamento +utilizzano i socket TCP, è fondamentale spiegare alcune basi del funzionamento del TCP; la conoscenza del funzionamento del protocollo è infatti essenziale per capire il modello di programmazione ed il funzionamento delle API. @@ -327,8 +327,8 @@ La MSL sulla rete; questo tempo è limitato perché ogni pacchetto IP può essere ritrasmesso dai router un numero massimo di volte (detto \textit{hop limit}). Il numero di ritrasmissioni consentito è indicato dal campo TTL dell'header di -IP (per maggiori dettagli vedi \secref{sec:appA_xxx}), e viene decrementato ad -ogni passaggio da un router; quando si annulla il pacchetto viene scartato. +IP (per maggiori dettagli vedi \secref{sec:IP_xxx}), e viene decrementato +ad ogni passaggio da un router; quando si annulla il pacchetto viene scartato. Siccome il numero è ad 8 bit il numero massimo di ``salti'' è di 255, pertanto anche se il TTL (da \textit{time to live}) non è propriamente un limite sul tempo di vita, si stima che un pacchetto IP non possa restare nella rete per @@ -681,18 +681,21 @@ indirizzo di origine l'indirizzo di destinazione specificato dal SYN del client. Per specificare un indirizzo generico con IPv4 si usa il valore -\texttt{INADDR\_ANY}, il cui valore, come visto anche negli esempi precedenti +\macro{INADDR\_ANY}, il cui valore, come visto anche negli esempi precedenti è pari a zero, nell'esempio \figref{fig:net_serv_code} si è usata un'assegnazione immediata del tipo: -\begin{verbatim} - serv_add.sin_addr.s_addr = htonl(INADDR_ANY); /* connect from anywhere */ -\end{verbatim} -Si noti che si è usato \texttt{htonl} per assegnare il valore -\texttt{INADDR\_ANY}; benché essendo questo pari a zero il riordinamento sia -inutile; ma dato che tutte le costanti \texttt{INADDR\_} sono definite +\footnotesize +\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} + serv_add.sin_addr.s_addr = htonl(INADDR_ANY); /* connect from anywhere */ +\end{lstlisting} +\normalsize + +Si noti che si è usato \func{htonl} per assegnare il valore +\macro{INADDR\_ANY}; benché essendo questo pari a zero il riordinamento sia +inutile; ma dato che tutte le costanti \macro{INADDR\_} sono definite secondo l'ordinamento della macchina è buona norma usare sempre la funzione -\texttt{htonl}. +\macro{htonl}. L'esempio precedete funziona con IPv4 dato che l'indirizzo è rappresentabile anche con un intero a 32 bit; non si può usare lo stesso metodo con IPv6, @@ -702,12 +705,14 @@ assegnazione. Per questo nell'header \texttt{netinet/in.h} variabile \texttt{in6addr\_any} (dichiarata come \texttt{extern}, ed inizializzata dal sistema al valore \texttt{IN6ADRR\_ANY\_INIT}) che permette di effettuare una assegnazione del tipo: -\begin{verbatim} +\footnotesize +\begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} serv_add.sin6_addr = in6addr_any; /* connect from anywhere */ -\end{verbatim} +\end{lstlisting} +\normalsize -\subsection{La funzione \texttt{connect}} +\subsection{La funzione \func{connect}} \label{sec:TCPel_func_connect} La funzione \texttt{connect} è usata da un client TCP per stabilire la @@ -797,7 +802,7 @@ da errori o problemi nella chiamata della funzione sono le seguenti: \end{enumerate} Se si fa riferimento al diagramma degli stati del TCP riportato in -\figref{fig:appB:tcp_state_diag} la funzione \texttt{connect} porta un socket +\figref{fig:TCP_state_diag} la funzione \texttt{connect} porta un socket dallo stato \texttt{CLOSED} (lo stato iniziale in cui si trova un socket appena creato) prima allo stato \texttt{SYN\_SENT} e poi, al ricevimento del ACK, nello stato \texttt{ESTABLISHED}. Se invece la connessione fallisce il @@ -1024,8 +1029,8 @@ l'invio dei dati. \subsection{La funzione \texttt{close}} \label{sec:TCPel_func_close} -La funzione standard unix \texttt{close} (vedi \secref{sec:fileunix_close}) -che si usa sui file può essere usata con lo stesso effetto anche sui socket +La funzione standard unix \texttt{close} (vedi \secref{sec:file_close}) che si +usa sui file può essere usata con lo stesso effetto anche sui socket descriptor. L'azione standard di questa funzione quando applicata a socket è di marcarlo