Aggiunte seteuid, setreuid, setresuid
[gapil.git] / socket.tex
index e0057fd3bd8fc20126605cec1b49035e4ac20713..9a1018bfe447419f78b339c3f44c173f6ede087d 100644 (file)
@@ -552,16 +552,18 @@ numero. Il caso opposto, in cui si parte dal bit meno significativo 
 per lo stesso motivo \textit{big endian}.
 
 La \textit{endianess} di un computer dipende essenzialmente dalla architettura
-hardware usata; Intel e Digital usano il little endian, Motorola, IBM, Sun
-(sostanzialmente tutti gli altri) usano il big endian. Il formato della rete è
-anch'esso big endian, quello del bus PCI è little endian, quello del bus VME è
-big endian. 
+hardware usata; Intel e Digital usano il \textit{little endian}, Motorola,
+IBM, Sun (sostanzialmente tutti gli altri) usano il \textit{big endian}. Il
+formato della rete è anch'esso \textit{big endian}, altri esempi sono quello
+del bus PC, che è \textit{little endian}, o quello del bus VME che è
+\textit{big endian}.
 
 Esistono poi anche dei processori che possono scegliere il tipo di formato
-all'avvio e alcuni, come il PowerPC o l'Intel i860, possono pure passare da un
-tipo di ordinamento all'altro con una specifica istruzione; in ogni caso in
-Linux l'ordinamento è definito dall'architettura e anche se questi cambiamenti
-sono possibili anche dopo che il sistema è avviato, non vengono mai eseguiti.
+all'avvio e alcuni che, come il PowerPC o l'Intel i860, possono pure passare
+da un tipo di ordinamento all'altro con una specifica istruzione. In ogni caso
+in Linux l'ordinamento è definito dall'architettura e dopo l'avvio del sistema
+resta sempre lo stesso, anche quando il processore permetterebbe di eseguire
+questi cambiamenti.
 
 \subsection{Le funzioni per il riordinamento}
 \label{sec:sock_func_ord}
@@ -596,16 +598,17 @@ funzioni sono:
   Converte l'intero a 16 bit \var{netshort} dal formato della rete a quello
   della macchina.
 \end{prototype}
-I nomi sono assegnati usando la lettera $n$ come mnemonico per indicare
-l'ordinamento usato sulla rete (da \textit{network order}) e la lettera $h$
-come mnemonico per l'ordinamento usato sulla macchina locale (da \textit{host
-  order}), mentre le lettere $s$ e $l$ stanno ad indicare i tipi di dato
-(\type{long} o \type{short}, riportati anche dai prototipi).
+I nomi sono assegnati usando la lettera \func{n} come mnemonico per indicare
+l'ordinamento usato sulla rete (da \textit{network order}) e la lettera
+\func{h} come mnemonico per l'ordinamento usato sulla macchina locale (da
+\textit{host order}), mentre le lettere \func{s} e \func{l} stanno ad indicare
+i tipi di dato (\type{long} o \type{short}, riportati anche dai prototipi).
 
-Usando queste funzioni si ha la conversione automatica (nel caso pure la
-macchina sia in big endian queste funzioni sono definite come macro che non
-fanno nulla); esse vanno sempre utilizzate per assicurare la portabilità del
-codice su tutte le architetture.
+Usando queste funzioni si ha la conversione automatica: nel caso in cui la
+macchina che si sta usando abbia una architettura \textit{big endian} queste
+funzioni sono definite come macro che non fanno nulla. Per questo motivo vanno
+sempre utilizzate, anche quando potrebbero non essere necessarie, in modo da
+assicurare la portabilità del codice su tutte le architetture.
 
 
 \subsection{Le funzioni \func{inet\_aton}, \func{inet\_addr} e 
@@ -620,16 +623,16 @@ Le prime tre funzioni di manipolazione riguardano la conversione degli
 indirizzi IPv4 da una stringa in cui il numero di IP è espresso secondo la
 cosiddetta notazione \textit{dotted-decimal}, (cioè nella forma
 \texttt{192.160.0.1}) al formato binario (direttamente in \textit{network
-  order}) e viceversa; in questo caso si usa la lettera $a$ come mnemonico per
-indicare la stringa. Dette funzioni sono:
+  order}) e viceversa; in questo caso si usa la lettera \func{a} come
+mnemonico per indicare la stringa. Dette funzioni sono:
 \begin{prototype}{arpa/inet.h}
-  {int inet\_aton(const char *src, struct in\_addr *dest)} Converte la stringa
-  puntata da \var{src} nell'indirizzo binario da memorizzare all'indirizzo
-  puntato da \var{dest}, restituendo 0 in caso di successo e 1 in caso di
-  fallimento (è espressa in questa forma in modo da poterla usare direttamente
-  con il puntatore usato per passare la struttura degli indirizzi). Se usata
-  con \var{dest} inizializzato a \macro{NULL} effettua la validazione
-  dell'indirizzo.
+  {int inet\_aton(const char *src, struct in\_addr *dest)} 
+  Converte la stringa puntata da \var{src} nell'indirizzo binario da
+  memorizzare all'indirizzo puntato da \var{dest}, restituendo 0 in caso di
+  successo e 1 in caso di fallimento (è espressa in questa forma in modo da
+  poterla usare direttamente con il puntatore usato per passare la struttura
+  degli indirizzi). Se usata con \var{dest} inizializzato a \macro{NULL}
+  effettua la validazione dell'indirizzo.
 \end{prototype}
 \begin{prototype}{arpa/inet.h}{in\_addr\_t inet\_addr(const char *strptr)}
   Restituisce l'indirizzo a 32 bit in network order a partire dalla stringa
@@ -640,10 +643,10 @@ indicare la stringa. Dette funzioni sono:
   generalmente deprecata in favore della precedente.
 \end{prototype}  
 \begin{prototype}{arpa/inet.h}{char *inet\_ntoa(struct in\_addr addrptr)}
-  Converte il valore a 32 bit dell'indirizzo (espresso in network order)
-  restituendo il puntatore alla stringa che contiene l'espressione in formato
-  dotted decimal. Si deve tenere presente che la stringa risiede in memoria
-  statica, per cui questa funzione non è rientrante.
+  Converte il valore a 32 bit dell'indirizzo (espresso in \textit{network
+    order}) restituendo il puntatore alla stringa che contiene l'espressione
+  in formato dotted decimal. Si deve tenere presente che la stringa risiede in
+  memoria statica, per cui questa funzione non è rientrante.
 \end{prototype}
 
 
@@ -653,8 +656,9 @@ indicare la stringa. Dette funzioni sono:
 Le tre funzioni precedenti sono limitate solo ad indirizzi IPv4, per questo
 motivo è preferibile usare le due nuove funzioni \func{inet\_pton} e
 \func{inet\_ntop} che possono convertire anche gli indirizzi IPv6. Anche in
-questo caso le lettere $n$ e $p$ sono degli mnemonici per ricordare il tipo di
-conversione effettuata e stanno per \textit{presentation} e \textit{numeric}.
+questo caso le lettere \func{n} e \func{p} sono degli mnemonici per ricordare
+il tipo di conversione effettuata e stanno per \textit{presentation} e
+\textit{numeric}.
 
 % \begin{figure}[htb]
 %   \centering  
@@ -763,16 +767,16 @@ ssize_t SockRead(int fd, void *buf, size_t count)
     return (count - nleft);
 }  
   \end{lstlisting}
-  \caption{Funzione \texttt{SockRead}, legge $n$ bytes da un socket }
+  \caption{Funzione \func{SockRead}, legge \var{count} bytes da un socket }
   \label{fig:sock_SockRead_code}
 \end{figure}
 
 Per questo motivo seguendo l'esempio di W. R. Stevens si sono definite due
-funzioni \texttt{SockRead} e \texttt{SockWrite} che eseguono la lettura da un
+funzioni \func{SockRead} e \func{SockWrite} che eseguono la lettura da un
 socket tenendo conto di questa caratteristica, ed in grado di ritornare dopo
 avere letto o scritto esattamente il numero di bytes specificato; il sorgente
 è riportato in \curfig\ e \nfig\ ed è disponibile fra i sorgenti allegati alla
-guida nei files \texttt{SockRead.c} e \texttt{SockWrite.c}.
+guida nei files \file{SockRead.c} e \file{SockWrite.c}.
 
 \begin{figure}[htb]
   \centering
@@ -800,19 +804,19 @@ ssize_t SockWrite(int fd, const void *buf, size_t count)
     return (count);
 }  
   \end{lstlisting}
-  \caption{Funzione \texttt{SockWrite}, scrive $n$ bytes su un socket }
+  \caption{Funzione \func{SockWrite}, scrive \var{count} bytes su un socket }
   \label{fig:sock_SockWrite_code}
 \end{figure}
 
-Come si può notare le funzioni ripetono la lettura/scrittura in un loop fino
+Come si può notare le funzioni ripetono la lettura/scrittura in un ciclo fino
 all'esaurimento del numero di bytes richiesti, in caso di errore viene
-controllato se questo è \texttt{EINTR} (cioè un'interruzione della system call
+controllato se questo è \macro{EINTR} (cioè un'interruzione della system call
 dovuta ad un segnale), nel qual caso l'accesso viene ripetuto, altrimenti
-l'errore viene ritornato interrompendo il loop. 
+l'errore viene ritornato interrompendo il ciclo.
 
-Nel caso della lettura se il numero di bytes letti è zero significa che è
+Nel caso della lettura, se il numero di bytes letti è zero, significa che si è
 arrivati alla fine del file e pertanto si ritorna senza aver concluso la
-lettura di tutti i bytes richiesti. 
+lettura di tutti i bytes richiesti.
 
 
 
@@ -830,7 +834,7 @@ In \nfig\ 
 elementare per il servizio \textit{daytime}, un servizio standard che
 restituisce l'ora locale della macchina a cui si effettua la richiesta.
 
-\begin{figure}[!htbp]
+\begin{figure}[!htb]
   \footnotesize
   \begin{lstlisting}{}
 #include <sys/types.h>   /* predefined types */
@@ -929,7 +933,7 @@ Dato il funzionamento di TCP la risposta potr
 di 26 byte (come avverrà senz'altro nel caso in questione) ma potrebbe anche
 arrivare in 26 pacchetti di un byte.  Per questo nel caso generale non si può
 mai assumere che tutti i dati arrivino con una singola lettura, pertanto
-quest'ultima deve essere effettuata in un loop in cui si continui a leggere
+quest'ultima deve essere effettuata in un ciclo in cui si continui a leggere
 fintanto che la funzione \func{read} non ritorni uno zero (che significa che
 l'altro capo ha chiuso la connessione) o un numero minore di zero (che
 significa un errore nella connessione).
@@ -1049,7 +1053,7 @@ che viene chiamato \textit{connected descriptor} che 
 dalla successiva chiamata alla \func{write} per scrivere la risposta al
 client, una volta che si è opportunamente (\texttt{\small 48--49}) costruita
 la stringa con la data da trasmettere. Completata la trasmissione il nuovo
-socket viene chiuso (\texttt{\small 54}).  Il tutto è inserito in un loop
+socket viene chiuso (\texttt{\small 54}).  Il tutto è inserito in un ciclo
 infinito (\texttt{\small 42--55}) in modo da poter ripetere l'invio della data
 ad una successiva connessione.