Inserite nuove macro per la indicizzazione della definizione delle funzioni
[gapil.git] / elemtcp.tex
index 1db669a29c80a1770eec1cff7c0ea1ed5067c510..f59308a68ad1ca52eef5b765c9086c420621e5df 100644 (file)
@@ -644,7 +644,7 @@ Useremo questo schema anche per l'esempio di reimplementazione del servizio
 \subsection{La funzione \func{bind}}
 \label{sec:TCPel_func_bind}
 
-La funzione \func{bind} assegna un indirizzo locale ad un socket. È usata
+La funzione \funcd{bind} assegna un indirizzo locale ad un socket. È usata
 cioè per specificare la prima parte dalla socket pair. Viene usata sul lato
 server per specificare la porta (e gli eventuali indirizzi locali) su cui poi
 ci si porrà in ascolto. Il prototipo della funzione è il seguente:
@@ -739,7 +739,7 @@ con una struttura, perch
 costante come operando a destra in una assegnazione.
 
 Per questo motivo nell'header \file{netinet/in.h} è definita una variabile
-\type{in6addr\_any} (dichiarata come \ctyp{extern}, ed inizializzata dal
+\const{in6addr\_any} (dichiarata come \direct{extern}, ed inizializzata dal
 sistema al valore \const{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
 assegnazione del tipo:
 
@@ -751,7 +751,7 @@ serv_add.sin6_addr = in6addr_any;   /* connect from anywhere */
 \subsection{La funzione \func{connect}}
 \label{sec:TCPel_func_connect}
 
-La funzione \func{connect} è usata da un client TCP per stabilire la
+La funzione \funcd{connect} è usata da un client TCP per stabilire la
 connessione con un server TCP, il prototipo della funzione è il seguente:
 \begin{prototype}{sys/socket.h}
 {int connect(int sockfd, const struct sockaddr *servaddr, socklen\_t addrlen)}
@@ -853,7 +853,7 @@ necessario effettuare una \func{bind}.
 \subsection{La funzione \func{listen}}
 \label{sec:TCPel_func_listen}
 
-La funzione \func{listen} è usata per usare un socket in modalità passiva,
+La funzione \funcd{listen} è usata per usare un socket in modalità passiva,
 cioè, come dice il nome, per metterlo in ascolto di eventuali connessioni; in
 sostanza l'effetto della funzione è di portare il socket dallo stato
 \texttt{CLOSED} a quello \texttt{LISTEN}. In genere si chiama la funzione in
@@ -866,20 +866,20 @@ pagina di manuale 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore. I codici di errore restituiti in \var{errno} sono i seguenti:
   \begin{errlist}
-  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \param{sockfd} non è un file descriptor
     valido.
-  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{ENOTSOCK}] l'argomento \param{sockfd} non è un socket.
   \item[\errcode{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
     operazione.
   \end{errlist}}
 \end{prototype}
 
-La funzione pone il socket specificato da \var{sockfd} in modalità passiva e
+La funzione pone il socket specificato da \param{sockfd} in modalità passiva e
 predispone una coda per le connessioni in arrivo di lunghezza pari a
-\var{backlog}. La funzione si può applicare solo a socket di tipo
+\param{backlog}. La funzione si può applicare solo a socket di tipo
 \const{SOCK\_STREAM} o \const{SOCK\_SEQPACKET}.
 
-Il parametro \var{backlog} indica il numero massimo di connessioni pendenti
+L'argomento \param{backlog} indica il numero massimo di connessioni pendenti
 accettate; se esso viene ecceduto il client al momento della richiesta della
 connessione riceverà un errore di tipo \errcode{ECONNREFUSED}, o se il
 protocollo, come accade nel caso del TCP, supporta la ritrasmissione, la
@@ -910,7 +910,7 @@ processo chiama la funzione \func{accept} (vedi
 complete è passata al programma, o, se la coda è vuota, il processo viene
 posto in attesa e risvegliato all'arrivo della prima connessione completa.
 
-Storicamente il valore del parametro \var{backlog} era corrispondente al
+Storicamente il valore del parametro \param{backlog} era corrispondente al
 massimo valore della somma del numero di entrate possibili per ciascuna di
 dette code. Stevens riporta che BSD ha sempre applicato un fattore di 1.5 al
 valore, e provvede una tabella con i risultati ottenuti con vari kernel,
@@ -924,7 +924,7 @@ indirizzati verso una porta forgiati con indirizzo IP fasullo\footnote{con la
 perduti e la coda delle connessioni incomplete viene saturata, impedendo di
 fatto ulteriori connessioni.
 
-Per ovviare a questo il significato del \var{backlog} è stato cambiato a
+Per ovviare a questo il significato del \param{backlog} è stato cambiato a
 indicare la lunghezza della coda delle connessioni complete. La lunghezza
 della coda delle connessioni incomplete può essere ancora controllata usando
 la \func{sysctl} o scrivendola direttamente in
@@ -932,7 +932,7 @@ la \func{sysctl} o scrivendola direttamente in
 protezione dei syncookies però (con l'opzione da compilare nel kernel e da
 attivare usando \file{/proc/sys/net/ipv4/tcp\_syncookies}) questo valore
 viene ignorato e non esiste più un valore massimo.  In ogni caso in Linux il
-valore di \var{backlog} viene troncato ad un massimo di \const{SOMAXCONN}
+valore di \param{backlog} viene troncato ad un massimo di \const{SOMAXCONN}
 se è superiore a detta costante (che di default vale 128).
 
 La scelta storica per il valore di questo parametro è di 5, e alcuni vecchi
@@ -967,7 +967,7 @@ trasparente dal protocollo TCP.
 \subsection{La funzione \func{accept}}
 \label{sec:TCPel_func_accept}
 
-La funzione \func{accept} è chiamata da un server TCP per gestire la
+La funzione \funcd{accept} è chiamata da un server TCP per gestire la
 connessione una volta che sia stato completato il three way handshake, la
 funzione restituisce un nuovo socket descriptor su cui si potrà operare per
 effettuare la comunicazione. Se non ci sono connessioni completate il processo
@@ -982,9 +982,9 @@ viene messo in attesa. Il prototipo della funzione 
     \var{errno} viene impostata ai seguenti valori:
 
   \begin{errlist}
-  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \param{sockfd} non è un file descriptor
     valido.
-  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{ENOTSOCK}] l'argomento \param{sockfd} non è un socket.
   \item[\errcode{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
     operazione.
   \item[\errcode{EAGAIN} o \errcode{EWOULDBLOCK}] il socket è stato impostato
@@ -1002,12 +1002,12 @@ viene messo in attesa. Il prototipo della funzione 
   \errval{ERESTARTSYS}.}
 \end{prototype}
 
-Estrae la prima connessione relativa al socket \var{sockfd} in attesa sulla
+Estrae la prima connessione relativa al socket \param{sockfd} in attesa sulla
 coda delle connessioni complete, che associa ad nuovo socket con le stesse
-caratteristiche di \var{sockfd} (restituito dalla funzione stessa).  Il socket
-originale non viene toccato. Nella struttura \var{addr} e nella variabile
-\var{addrlen} vengono restituiti indirizzo e relativa lunghezza del client che
-si è connesso.
+caratteristiche di \param{sockfd} (restituito dalla funzione stessa).  Il
+socket originale non viene toccato. Nella struttura \param{addr} e nella
+variabile \param{addrlen} vengono restituiti indirizzo e relativa lunghezza del
+client che si è connesso.
 
 La funzione può essere usata solo con socket che supportino la connessione
 (cioè di tipo \const{SOCK\_STREAM}, \const{SOCK\_SEQPACKET} o
@@ -1026,20 +1026,20 @@ socket flag come \const{O\_NONBLOCK}, che devono essere rispecificati volta
 volta, questo è un comportamento diverso rispetto a quanto accade con BSD e
 deve essere tenuto in conto per scrivere programmi portabili.
 
-I due argomenti \var{cliaddr} e \var{addrlen} (si noti che quest'ultimo
-è passato per indirizzo per avere indietro il valore) sono usati per ottenere
+I due argomenti \param{cliaddr} e \param{addrlen} (si noti che quest'ultimo è
+passato per indirizzo per avere indietro il valore) sono usati per ottenere
 l'indirizzo del client da cui proviene la connessione. Prima della chiamata
-\var{addrlen} deve essere inizializzato alle dimensioni della struttura il
-cui indirizzo è passato come argomento in \var{cliaddr}, al ritorno della
-funzione \var{addrlen} conterrà il numero di byte scritti dentro
-\var{cliaddr}. Se questa informazione non interessa basterà inizializzare a
+\param{addrlen} deve essere inizializzato alle dimensioni della struttura il
+cui indirizzo è passato come argomento in \param{cliaddr}, al ritorno della
+funzione \param{addrlen} conterrà il numero di byte scritti dentro
+\param{cliaddr}. Se questa informazione non interessa basterà inizializzare a
 \val{NULL} detti puntatori.
 
 Se la funzione ha successo restituisce il descrittore di un nuovo socket
 creato dal kernel (detto \textit{connected socket}) a cui viene associata la
 prima connessione completa (estratta dalla relativa coda, vedi
 \secref{sec:TCPel_func_listen}) che il client TCP ha effettuato verso il
-socket \var{sockfd}. Quest'ultimo (detto \textit{listening socket}) è quello
+socket \param{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 imopstato il socket
@@ -1222,10 +1222,9 @@ chiusa.
 \subsection{Le funzioni \func{getsockname} e \func{getpeername}}
 \label{sec:TCPel_get_names}
 
-Queste due funzioni vengono usate per ottenere la socket pair associata ad un
-certo socket; la prima restituisce l'indirizzo locale, la seconda quello
-remoto. 
-
+Queste due funzioni vengono usate per ottenere i dati realtivi alla socket
+pair associata ad un certo socket; la prima è \funcd{getsockname} e
+restituisce l'indirizzo locale; il suo prototipo è:
 \begin{prototype}{sys/socket.h}
   {int getsockname(int sockfd, struct sockaddr * name, socklen\_t * namelen)}
   Legge l'indirizzo locale del socket \param{sockfd} nella struttura
@@ -1234,28 +1233,30 @@ remoto.
 \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
   errore. I codici di errore restituiti in \var{errno} sono i seguenti:
   \begin{errlist}
-  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \param{sockfd} non è un file descriptor
     valido.
-  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{ENOTSOCK}] l'argomento \param{sockfd} non è un socket.
   \item[\errcode{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
     eseguire l'operazione.
-  \item[\errcode{EFAULT}] l'argomento \var{name} punta al di fuori dello
+  \item[\errcode{EFAULT}] l'argomento \param{name} punta al di fuori dello
     spazio di indirizzi del processo.
   \end{errlist}}
 \end{prototype}
 
-La funzione \func{getsockname} si usa tutte le volte che si vuole avere
-l'indirizzo locale di un socket; ad esempio può essere usata da un client (che
-usualmente non chiama \func{bind}) per ottenere numero IP e porta locale
-associati al socket restituito da una \func{connect}, o da un server che ha
-chiamato \func{bind} su un socket usando 0 come porta locale per ottenere il
-numero di porta effimera assegnato dal kernel. 
+La funzione si usa tutte le volte che si vuole avere l'indirizzo locale di un
+socket; ad esempio può essere usata da un client (che usualmente non chiama
+\func{bind}) per ottenere numero IP e porta locale associati al socket
+restituito da una \func{connect}, o da un server che ha chiamato \func{bind}
+su un socket usando 0 come porta locale per ottenere il numero di porta
+effimera assegnato dal kernel.
 
 Inoltre quando un server esegue una \func{bind} su un indirizzo generico, se
 chiamata dopo il completamento di una connessione sul socket restituito da
 \func{accept}, restituisce l'indirizzo locale che il kernel ha assegnato a
 quella connessione.
 
+Tutte le volte che si vuole avere l'indirizzo remoto di un socket si usa la
+funzione \funcd{getpeername}, il cui prototipo è:
 \begin{prototype}{sys/socket.h}
   {int getpeername(int sockfd, struct sockaddr * name, socklen\_t * namelen)}
   Legge l'indirizzo remoto del socket \param{sockfd} nella struttura
@@ -1264,21 +1265,17 @@ quella connessione.
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore. I codici di errore restituiti in \var{errno} sono i seguenti:
   \begin{errlist}
-  \item[\errcode{EBADF}] l'argomento \var{sockfd} non è un file descriptor
+  \item[\errcode{EBADF}] l'argomento \param{sockfd} non è un file descriptor
     valido.
-  \item[\errcode{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\errcode{ENOTSOCK}] l'argomento \param{sockfd} non è un socket.
   \item[\errcode{ENOTCONN}] il socket non è connesso.
   \item[\errcode{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
     eseguire l'operazione.
-  \item[\errcode{EFAULT}] l'argomento \var{name} punta al di fuori dello
+  \item[\errcode{EFAULT}] l'argomento \param{name} punta al di fuori dello
     spazio di indirizzi del processo.
   \end{errlist}}
 \end{prototype}
 
-
-La funzione \func{getpeername} si usa tutte le volte che si vuole avere
-l'indirizzo remoto di un socket. 
-
 Ci si può chiedere a cosa serva questa funzione dato che dal lato client
 l'indirizzo remoto è sempre noto quando si esegue la \func{connect} mentre
 dal lato server si possono usare, come si è fatto nell'esempio precedente, i