X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=e20c38800ce3e087de70946678e1a2854d80be31;hp=32f1c0f5a6adea4e730445b41ac35aafd0e773f3;hb=d99b4995b23505a9afde30adf3a716aa7a55f0e9;hpb=66765a9be9a61085dd00abd92d99a24b23dc844b diff --git a/socket.tex b/socket.tex index 32f1c0f..e20c388 100644 --- a/socket.tex +++ b/socket.tex @@ -268,7 +268,7 @@ in \nfig: \begin{figure}[!htbp] \footnotesize - \begin{lstlisting}{} + \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} struct sockaddr { sa_family_t sa_family; /* address family: AF_xxx */ char sa_data[14]; /* address (protocol-specific) */ @@ -345,7 +345,7 @@ conforme allo standard POSIX.1g. \begin{figure}[!htbp] \footnotesize - \begin{lstlisting}{} + \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} struct sockaddr_in { sa_family_t sin_family; /* address family: AF_INET */ u_int16_t sin_port; /* port in network byte order */ @@ -397,7 +397,7 @@ struttura degli indirizzi \begin{figure}[!htbp] \footnotesize - \begin{lstlisting}{} + \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} struct sockaddr_in6 { u_int16_t sin6_family; /* AF_INET6 */ u_int16_t sin6_port; /* port number */ @@ -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 @@ -444,7 +444,7 @@ definita nel file di header \texttt{sys/un.h}. \begin{figure}[!htbp] \footnotesize - \begin{lstlisting}{} + \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} #define UNIX_PATH_MAX 108 struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ @@ -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}