Risistemati i prototipi delle funzioni, adesso dovrebbero essere un
[gapil.git] / elemtcp.tex
index effafc390a905613132ba6fac9bc933a45a56072..f092de0e8549674655f9287c5535aa8320fa5ba6 100644 (file)
@@ -640,17 +640,17 @@ ci si porr
   a \func{socket}, mentre il secondo e terzo argomento sono rispettivamente
   l'indirizzo (locale) del socket e la dimensione della struttura che lo
   contiene, secondo quanto già trattato in \secref{sec:sock_sockaddr}.
-
-  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:
+  
+  \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:
   \begin{errlist}
-  \item \macro{EBADF} il file descriptor non è valido.
-  \item \macro{EINVAL} il socket ha già un indirizzo assegnato.
-  \item \macro{ENOTSOCK} il file descriptor non è associato ad un socket.
-  \item \macro{EACCESS} si è cercato di usare una porta riservata senza
+  \item[\macro{EBADF}] il file descriptor non è valido.
+  \item[\macro{EINVAL}] il socket ha già un indirizzo assegnato.
+  \item[\macro{ENOTSOCK}] il file descriptor non è associato ad un socket.
+  \item[\macro{EACCESS}] si è cercato di usare una porta riservata senza
     sufficienti privilegi. 
-  \end{errlist}
+  \end{errlist}}
 \end{prototype}
 
 Con il TCP la chiamata \func{bind} permette di specificare l'indirizzo, la
@@ -686,7 +686,7 @@ un'assegnazione immediata del tipo:
 
 \footnotesize
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
-  serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
+    serv_add.sin_addr.s_addr = htonl(INADDR_ANY);   /* connect from anywhere */
 \end{lstlisting}
 \normalsize
 
@@ -706,9 +706,10 @@ Per questo nell'header \file{netinet/in.h} 
 \type{in6addr\_any} (dichiarata come \type{extern}, ed inizializzata dal
 sistema al valore \macro{IN6ADRR\_ANY\_INIT}) che permette di effettuare una
 assegnazione del tipo: 
+
 \footnotesize
 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
-   serv_add.sin6_addr = in6addr_any;   /* connect from anywhere */
+    serv_add.sin6_addr = in6addr_any;   /* connect from anywhere */
 \end{lstlisting}
 \normalsize
 
@@ -725,30 +726,28 @@ connessione con un server TCP, il prototipo della funzione 
   a \func{socket}, mentre il secondo e terzo argomento sono rispettivamente
   l'indirizzo e la dimensione della struttura che contiene l'indirizzo del
   socket, già descritta in \secref{sec:sock_sockaddr}.
-
-  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:
+  
+  \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:
   \begin{errlist}
-  \item \macro{EISCONN} il socket è già connesso.
-  \item \macro{ECONNREFUSED} non c'è nessuno in ascolto sull'indirizzo remoto.
-  \item \macro{ETIMEDOUT} si è avuto timeout durante il tentativo di
+  \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{EADDRINUSE} l'indirizzo locale è in uso.
-  \item \macro{EINPROGRESS} il socket è non bloccante e la connessione non
+  \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
+  \item[\macro{EALREADY}] il socket è non bloccante 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
+  \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.
-  \item \macro{EACCESS, EPERM} si è tentato di eseguire una connessione ad un
+  \item[\macro{EACCESS, EPERM}] si è tentato di eseguire una connessione ad un
     indirizzo broadcast senza che il socket fosse stato abilitato per il
     broadcast.
   \end{errlist}
   altri errori possibili sono: \macro{EFAULT}, \macro{EBADF},
-  \macro{ENOTSOCK}.
+  \macro{ENOTSOCK}, \macro{EISCONN} e \macro{EADDRINUSE}.}
 \end{prototype}
 
 La struttura dell'indirizzo deve essere inizializzata con l'indirizzo IP e il
@@ -828,16 +827,16 @@ man page 
   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
   \macro{SOCK\_STREAM} o \macro{SOCK\_SEQPACKET}.
-
-  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:
+  
+  \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 \macro{EBADF} l'argomento \var{sockfd} non è un file descriptor
+  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item \macro{ENOTSOCK} l'argomento \var{sockfd} non è un socket.
-  \item \macro{EOPNOTSUPP} il socket è di un tipo che non supporta questa
+  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\macro{EOPNOTSUPP}] il socket è di un tipo che non supporta questa
     operazione.
-  \end{errlist}
+  \end{errlist}}
 \end{prototype}
 
 
@@ -936,27 +935,27 @@ effettuare la comunicazione. Se non ci sono connessioni completate il processo
 viene messo in attesa. Il prototipo della funzione è il seguente:
 \begin{prototype}{sys/socket.h}
 {int accept(int sockfd, struct sockaddr *addr, socklen\_t *addrlen)} 
-  La funzione estrae la prima connessione relativa al socket \var{sockfd}
+  Estrae la prima connessione relativa al socket \var{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.
  
-  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:
+  \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:
 
   \begin{errlist}
-  \item \macro{EBADF} l'argomento \var{sockfd} non è un file descriptor
+  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item \macro{ENOTSOCK} l'argomento \var{sockfd} non è un socket.
-  \item \macro{EOPNOTSUPP} il socket è di un tipo che non supporta questa
+  \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
+  \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{EPERM} Le regole del firewall non consentono la connessione.
-  \item \macro{ENOBUFS, ENOMEM} .  Questo spesso significa che l'allocazione
+  \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
     memoria di sistema.
   \end{errlist}
@@ -964,7 +963,7 @@ viene messo in attesa. Il prototipo della funzione 
   socket come: \macro{EMFILE}, \macro{EINVAL}, \macro{ENOSR}, \macro{ENOBUFS},
   \macro{EFAULT}, \macro{EPERM}, \macro{ECONNABORTED},
   \macro{ESOCKTNOSUPPORT}, \macro{EPROTONOSUPPORT}, \macro{ETIMEDOUT},
-  \macro{ERESTARTSYS}.
+  \macro{ERESTARTSYS}.}
 \end{prototype}
 
 La funzione può essere usata solo con socket che supportino la connessione
@@ -1185,19 +1184,21 @@ certo socket; la prima restituisce l'indirizzo locale, la seconda quello
 remoto. 
 
 \begin{prototype}{sys/socket.h}
-{int getsockname(int sockfd, struct sockaddr * name, socklen\_t * namelen)}
+  {int getsockname(int sockfd, struct sockaddr * name, socklen\_t * namelen)}
+  Legge l'indirizzo locale del socket \param{sockfd} nella struttura
+  \param{name}.
 
-  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:
+\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 \macro{EBADF} l'argomento \var{sockfd} non è un file descriptor
+  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item \macro{ENOTSOCK} l'argomento \var{sockfd} non è un socket.
-  \item \macro{ENOBUFS} non ci sono risorse sufficienti nel sistema per
+  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\macro{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
     eseguire l'operazione.
-  \item \macro{EFAULT} l'argomento \var{name} punta al di fuori dello
+  \item[\macro{EFAULT}] l'argomento \var{name} punta al di fuori dello
     spazio di indirizzi del processo.
-  \end{errlist}
+  \end{errlist}}
 \end{prototype}
 
 La funzione \func{getsockname} si usa tutte le volte che si vuole avere
@@ -1213,20 +1214,22 @@ chiamata dopo il completamento di una connessione sul socket restituito da
 quella connessione.
 
 \begin{prototype}{sys/socket.h}
-{int getpeername(int sockfd, struct sockaddr * name, socklen\_t * namelen)}
-
-  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:
+  {int getpeername(int sockfd, struct sockaddr * name, socklen\_t * namelen)}
+  Legge l'indirizzo remoto del socket \param{sockfd} nella struttura
+  \param{name}.
+  
+  \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 \macro{EBADF} l'argomento \var{sockfd} non è un file descriptor
+  \item[\macro{EBADF}] l'argomento \var{sockfd} non è un file descriptor
     valido.
-  \item \macro{ENOTSOCK} l'argomento \var{sockfd} non è un socket.
-  \item \macro{ENOTCONN} il socket non è connesso.
-  \item \macro{ENOBUFS} non ci sono risorse sufficienti nel sistema per
+  \item[\macro{ENOTSOCK}] l'argomento \var{sockfd} non è un socket.
+  \item[\macro{ENOTCONN}] il socket non è connesso.
+  \item[\macro{ENOBUFS}] non ci sono risorse sufficienti nel sistema per
     eseguire l'operazione.
-  \item \macro{EFAULT} l'argomento \var{name} punta al di fuori dello
+  \item[\macro{EFAULT}] l'argomento \var{name} punta al di fuori dello
     spazio di indirizzi del processo.
-  \end{errlist}
+  \end{errlist}}
 \end{prototype}