X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=2e34e78d3bdeaaa3bab7428c8740310ecc3b36ec;hp=b93fc88769434110aeb39cd8f5acfbd921d54f23;hb=853abb8180764f5c24c9338164c4479c4d94ba2a;hpb=fd86592a845b5f76ad43ba2374ca0b798ffca595 diff --git a/socket.tex b/socket.tex index b93fc88..2e34e78 100644 --- a/socket.tex +++ b/socket.tex @@ -90,8 +90,8 @@ avviene, in certi casi essa pu con un solo partner come per una telefonata; altri casi possono prevedere una comunicazione come per lettera, in cui si scrive l'indirizzo su ogni pacchetto, altri ancora una comunicazione \textit{broadcast} come per la -radio, in cui i pacchetti vengono emessi su appositi ``canali'' dove chiunque -si collega possa riceverli. +radio, in cui i pacchetti vengono emessi su appositi ``\textsl{canali}'' dove +chiunque si collega possa riceverli. É chiaro che ciascuno di questi stili comporta una modalità diversa di gestire la comunicazione, ad esempio se è inaffidabile occorrerà essere in grado di @@ -113,7 +113,7 @@ La creazione di un socket avviene attraverso l'uso della funzione \funcd{socket}; questa restituisce un \textit{file descriptor}\footnote{del tutto analogo a quelli che si ottengono per i file di dati e le pipe, descritti in \secref{sec:file_fd}.} che serve come riferimento al socket; il -suo protototipo è: +suo prototipo è: \begin{prototype}{sys/socket.h}{int socket(int domain, int type, int protocol)} Apre un socket. @@ -677,9 +677,9 @@ mnemonico per indicare la stringa. Dette funzioni sono \funcd{inet\_addr}, \bodydesc{Tutte queste le funzioni non generano codice di errore.} \end{functions} -La prima funcione, \func{inet\_addr}, restituisce l'indirizzo a 32 bit in +La prima funzione, \func{inet\_addr}, restituisce l'indirizzo a 32 bit in network order (del tipo \type{in\_addr\_t}) a partire dalla stringa passata -nellargomento \param{strptr}. In caso di errore (quando la stringa non esprime +nell'argomento \param{strptr}. In caso di errore (quando la stringa non esprime un indirizzo valido) restituisce invece il valore \const{INADDR\_NONE} che tipicamente sono trentadue bit a uno. Questo però comporta che la stringa \texttt{255.255.255.255}, che pure è un indirizzo valido, non può essere usata @@ -691,7 +691,7 @@ nell'indirizzo binario che viene memorizzato nell'opportuna struttura \struct{in\_addr} (si veda \secref{fig:sock_sa_ipv4_struct}) situata all'indirizzo dato dall'argomento \param{dest} (è espressa in questa forma in modo da poterla usare direttamente con il puntatore usato per passare la -struttura degli indirizzi). La funzione restituesce 0 in caso di successo e 1 +struttura degli indirizzi). La funzione restituisce 0 in caso di successo e 1 in caso di fallimento. Se usata con \param{dest} inizializzato a \val{NULL} effettua la validazione dell'indirizzo. @@ -743,7 +743,7 @@ un valore positivo in caso di successo, e zero se la stringa non rappresenta un indirizzo valido, e negativo se \param{af} specifica una famiglia di indirizzi non valida. -La sedonda funzione è \funcd{inet\_ntop} che converte un indirizzo in una +La seconda funzione è \funcd{inet\_ntop} che converte un indirizzo in una stringa; il suo prototipo è: \begin{prototype}{sys/socket.h} {char *inet\_ntop(int af, const void *addr\_ptr, char *dest, size\_t len)} @@ -751,7 +751,7 @@ stringa; il suo prototipo \bodydesc{La funzione restituisce un puntatore non nullo alla stringa convertita in caso di successo e \val{NULL} in caso di fallimento, nel - qual caso \var{errno} assume i valor: + qual caso \var{errno} assume i valori: \begin{errlist} \item[\errcode{ENOSPC}] le dimensioni della stringa con la conversione dell'indirizzo eccedono la lunghezza specificata da \param{len}. @@ -817,7 +817,7 @@ riveda quanto detto in \secref{sec:ipc_pipes}). \begin{lstlisting}{} #include -ssize_t SockRead(int fd, void *buf, size_t count) +ssize_t FullRead(int fd, void *buf, size_t count) { size_t nleft; ssize_t nread; @@ -839,17 +839,17 @@ ssize_t SockRead(int fd, void *buf, size_t count) return (count - nleft); } \end{lstlisting} - \caption{Funzione \func{SockRead}, legge \var{count} byte da un socket } - \label{fig:sock_SockRead_code} + \caption{Funzione \func{FullRead}, legge \var{count} byte da un socket } + \label{fig:sock_FullRead_code} \end{figure} Per questo motivo, seguendo l'esempio di W. R. Stevens in \cite{UNP1}, si sono -definite due funzioni \func{SockRead} e \func{SockWrite} che eseguono la +definite due funzioni \func{FullRead} e \func{FullWrite} 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 byte -specificato; il sorgente è riportato in \figref{fig:sock_SockRead_code} e -\figref{fig:sock_SockWrite_code} ed è disponibile fra i sorgenti allegati alla -guida nei files \file{SockRead.c} e \file{SockWrite.c}. +specificato; il sorgente è riportato in \figref{fig:sock_FullRead_code} e +\figref{fig:sock_FullWrite_code} ed è disponibile fra i sorgenti allegati alla +guida nei files \file{FullRead.c} e \file{FullWrite.c}. \begin{figure}[htb] \centering @@ -857,7 +857,7 @@ guida nei files \file{SockRead.c} e \file{SockWrite.c}. \begin{lstlisting}{} #include -ssize_t SockWrite(int fd, const void *buf, size_t count) +ssize_t FullWrite(int fd, const void *buf, size_t count) { size_t nleft; ssize_t nwritten; @@ -877,8 +877,8 @@ ssize_t SockWrite(int fd, const void *buf, size_t count) return (count); } \end{lstlisting} - \caption{Funzione \func{SockWrite}, scrive \var{count} byte su un socket.} - \label{fig:sock_SockWrite_code} + \caption{Funzione \func{FullWrite}, scrive \var{count} byte su un socket.} + \label{fig:sock_FullWrite_code} \end{figure} Come si può notare le funzioni ripetono la lettura/scrittura in un ciclo fino