X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=e72d2100e63e7d129b000d53abdcf38867809f47;hp=32f1c0f5a6adea4e730445b41ac35aafd0e773f3;hb=daacafbdd3ae5d8fa4b68ecdcc2a5c97fd5128b7;hpb=40b7e9c1b5e028582e15046f1b1982d3c8a22eeb diff --git a/socket.tex b/socket.tex index 32f1c0f..e72d210 100644 --- a/socket.tex +++ b/socket.tex @@ -421,7 +421,7 @@ segue le stesse regole; il campo \texttt{sin6\_flowinfo} in tre parti di cui i 24 bit inferiori indicano l'etichetta di flusso, i successivi 4 bit la priorità e gli ultimi 4 sono riservati; questi valori fanno riferimento ad alcuni campi specifici dell'header dei pacchetti IPv6 -(vedi \secref{sec:appA_ipv6}) ed il loro uso è sperimentale. +(vedi \secref{sec:IP_ipv6head}) ed il loro uso è sperimentale. Il campo \texttt{sin6\_addr} contiene l'indirizzo a 128 bit usato da IPv6, infine il campo \texttt{sin6\_scope\_id} è un campo introdotto con il kernel @@ -615,48 +615,59 @@ 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 \texttt{inet\_pton} e -\texttt{inet\_ntop} che possono convertire anche gli indirizzi IPv6 (secondo -lo schema in \nfig). 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}. +\texttt{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}. -\begin{figure}[htb] - \centering +% \begin{figure}[htb] +% \centering - \caption{Schema della rappresentazioni utilizzate dalle funzioni di - conversione \texttt{inet\_pton} e \texttt{inet\_ntop} } - \label{fig:sock_inet_conv_func} +% \caption{Schema della rappresentazioni utilizzate dalle funzioni di +% conversione \texttt{inet\_pton} e \texttt{inet\_ntop} } +% \label{fig:sock_inet_conv_func} -\end{figure} +% \end{figure} -Entrambe le funzioni accettano l'argomento \texttt{family} che indica il tipo -di indirizzo e può essere \texttt{AF\_INET} o \texttt{AF\_INET6}. Se la -famiglia indicata non è valida entrambe le funzioni ritornano un valore -negativo e settano la variabile \texttt{errno} al valore -\texttt{EAFNOSUPPORT}. I prototipi delle suddette funzioni sono i seguenti: +Entrambe le funzioni accettano l'argomento \texttt{af} che indica il tipo di +indirizzo e può essere \texttt{AF\_INET} o \texttt{AF\_INET6}. Se la famiglia +indicata non è valida entrambe le funzioni settano la variabile \texttt{errno} +al valore \texttt{EAFNOSUPPORT}. I prototipi delle suddette funzioni sono i +seguenti: \begin{prototype}{sys/socket.h} -{int inet\_pton(int family, const char *src, void *dest)} - Converte la stringa puntata da \texttt{src} nell'indirizzo binario da - memorizzare all'indirizzo puntato da \texttt{dest}, restituendo 0 in caso di - successo e 1 in caso di fallimento. + {int inet\_pton(int af, const char *src, void *addr\_ptr)} Converte la + stringa puntata da \texttt{src} nell'indirizzo IP da memorizzare + all'indirizzo puntato da \texttt{addr\_ptr}, la funzione restituisce un + valore positivo in caso di successo, e zero se la stringa non rappresenta un + indirizzo valido, e negativo se \var{af} specifica una famiglia di indirizzi + non valida. \end{prototype} \begin{prototype}{sys/socket.h} -{char *inet\_ntop(int family, const void *src, char *dest, size\_t len)} - Converte la struttura dell'indirizzo puntata da \texttt{src} in una stringa - che viene copiata nel buffer puntato dall'indirizzo \texttt{dest}; questo - deve essere preallocato dall'utente e la lunghezza deve essere almeno + {char *inet\_ntop(int af, const void *addr\_ptr, char *dest, size\_t len)} + Converte la struttura dell'indirizzo puntata da \texttt{addr\_ptr} in una + stringa che viene copiata nel buffer puntato dall'indirizzo \texttt{dest}; + questo deve essere preallocato dall'utente e la lunghezza deve essere almeno \texttt{INET\_ADDRSTRLEN} in caso di indirizzi IPv4 e \texttt{INET6\_ADDRSTRLEN} per indirizzi IPv6; la lunghezza del buffer deve comunque venire specificata attraverso il parametro \texttt{len}. - + La funzione restituisce un puntatore non nullo a \texttt{dest} in caso di successo e un puntatore nullo in caso di fallimento, in quest'ultimo caso viene settata la variabile \texttt{errno} con il valore \texttt{ENOSPC} in caso le dimensioni dell'indirizzo eccedano la lunghezza specificata da - \texttt{len}. + \texttt{len} o \macro{ENOAFSUPPORT} in caso \var{af} non sia una famiglia di + indirizzi valida. \end{prototype} +Gli indirizzi vengono cnovertiti da/alle rispettive strutture di indirizzo +(\var{struct in\_addr} per IPv4, e \var{struct in6\_addr} per IPv6), che +devono essere precedentemente allocate e passate attraverso il puntatore +\var{addr\_ptr}; il parametro \var{dest} di \func{inet\_ntop} non può essere +nullo e deve essere allocato precedentemente. + +Il formato usato per gli indirizzi in formato di presentazione è la notazione +\textit{dotted decimal} per IPv4 e quella descritta in +\secref{sec:IP_ipv6_notation} per IPv6. \section{Il comportamento delle funzioni di I/O} \label{sec:sock_io_behav}