affronteremo la problematica dal lato client, di un qualunque programma che
necessita di compiere questa operazione.
-\begin{figure}[htb]
- \centering
- \includegraphics[width=11cm]{img/resolver}
+\begin{figure}[!htb]
+ \centering \includegraphics[width=11cm]{img/resolver}
\caption{Schema di funzionamento delle funzioni del \textit{resolver}.}
\label{fig:sock_resolver_schema}
\end{figure}
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/hostent.h}
\end{minipage}
\caption{La struttura \structd{hostent} per la risoluzione dei nomi a
il resto la funzione è identica a \func{gethostbyname}, ed identici sono i
suoi risultati.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/mygethost.c}
\end{minipage}
\normalsize
Richiede la risoluzione inversa di un indirizzo IP.
\bodydesc{La funzione restituisce l'indirizzo ad una struttura
- \struct{hostent} in caso di successo ed \const{NULL} in caso di errore.}
+ \struct{hostent} in caso di successo ed \val{NULL} in caso di errore.}
\end{functions}
In questo caso l'argomento \param{addr} dovrà essere il puntatore ad una
indirizzo IP.
\bodydesc{Entrambe le funzioni restituiscono l'indirizzo ad una struttura
- \struct{hostent} in caso di successo ed \const{NULL} in caso di errore.}
+ \struct{hostent} in caso di successo ed \val{NULL} in caso di errore.}
\end{functions}
Entrambe le funzioni supportano esplicitamente la scelta di una famiglia di
Risolvono il nome di un servizio nel rispettivo numero di porta e viceversa.
\bodydesc{Ritornano il puntatore ad una struttura \struct{servent} con i
- risultati in caso di successo, o \const{NULL} in caso di errore.}
+ risultati in caso di successo, o \val{NULL} in caso di errore.}
\end{functions}
Entrambe le funzioni prendono come ultimo argomento una stringa \param{proto}
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/servent.h}
\end{minipage}
\caption{La struttura \structd{servent} per la risoluzione dei nomi dei
\bodydesc{Le due funzioni \func{setservent} e \func{endservent} non
restituiscono nulla, \func{getservent} restituisce il puntatore ad una
- struttura \struct{servent} in caso di successo e \const{NULL} in caso di
+ struttura \struct{servent} in caso di successo e \val{NULL} in caso di
errore o fine del file.}
\end{functions}
può anche specificare il nome di una rete invece che di una singola macchina.
Il secondo argomento, \param{service}, specifica invece il nome del servizio
che si intende risolvere. Per uno dei due argomenti si può anche usare il
-valore \const{NULL}, nel qual caso la risoluzione verrà effettuata soltanto
+valore \val{NULL}, nel qual caso la risoluzione verrà effettuata soltanto
sulla base del valore dell'altro.
Il terzo argomento, \param{hints}, deve essere invece un puntatore ad una
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/addrinfo.h}
\end{minipage}
\caption{La struttura \structd{addrinfo} usata nella nuova interfaccia POSIX
\struct{addrinfo} della lista.
Ovviamente non è necessario dare dei suggerimenti in ingresso, ed usando
-\const{NULL} come valore per l'argomento \param{hints} si possono compiere
+\val{NULL} come valore per l'argomento \param{hints} si possono compiere
ricerche generiche. Se però si specifica un valore non nullo questo deve
puntare ad una struttura \struct{addrinfo} precedentemente allocata nella
quale siano stati opportunamente impostati i valori dei campi
\const{AI\_PASSIVE} & Viene utilizzato per ottenere un indirizzo in
formato adatto per una successiva chiamata a
\func{bind}. Se specificato quando si è usato
- \const{NULL} come valore per \param{node} gli
+ \val{NULL} come valore per \param{node} gli
indirizzi restituiti saranno inizializzati al
valore generico (\const{INADDR\_ANY} per IPv4 e
\const{IN6ADDR\_ANY\_INIT} per IPv6), altrimenti
validi. \\
\const{EAI\_NONAME} & Il nome a dominio o il servizio non sono noti,
viene usato questo errore anche quando si specifica
- il valore \const{NULL} per entrambi gli argomenti
+ il valore \val{NULL} per entrambi gli argomenti
\param{node} e \param{service}. \\
\const{EAI\_SERVICE} & Il servizio richiesto non è disponibile per il tipo
di socket richiesto, anche se può esistere per
socket o famiglie di indirizzi, è disponibile nel file \texttt{mygetaddr.c}
dei sorgenti allegati alla guida.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/mygetaddr.c}
\end{minipage}
\normalsize
\param{host} e \param{serv}, che dovranno essere state precedentemente
allocate per una lunghezza massima che deve essere specificata con gli altri
due argomenti \param{hostlen} e \param{servlen}. Si può, quando non si è
-interessati ad uno dei due, passare il valore \const{NULL} come argomento,
+interessati ad uno dei due, passare il valore \val{NULL} come argomento,
così che la corrispondente informazione non verrà richiesta. Infine l'ultimo
argomento \param{flags} è una maschera binaria i cui bit consentono di
impostare le modalità con cui viene eseguita la ricerca, e deve essere
dei sorgenti allegati alla guida, che contiene varie funzioni di utilità per
l'uso dei socket.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/sockconn.c}
\end{minipage}
\normalsize
dati relativi alle strutture degli indirizzi di \struct{addrinfo} che sono
\textsl{opachi} rispetto all'uso della funzione \func{connect}.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/TCP_echo_fifth.c}
\end{minipage}
\normalsize
consente di utilizzare come argomento del programma un nome a dominio al posto
dell'indirizzo numerico, e può utilizzare sia indirizzi IPv4 che IPv6.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/sockbind.c}
\end{minipage}
\normalsize
server in ascolto su uno solo dei possibili diversi indirizzi presenti su di
una macchina. Se non si vuole che la funzione esegua \func{bind} su un
indirizzo specifico, ma utilizzi l'indirizzo generico, occorrerà avere cura di
-passare un valore \const{NULL} come valore per l'argomento \var{host}; l'uso
+passare un valore \val{NULL} come valore per l'argomento \var{host}; l'uso
del valore \const{AI\_PASSIVE} serve ad ottenere il valore generico nella
rispettiva struttura degli indirizzi.
background, e può quindi scrivere gli errori direttamente sullo standard
error.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/TCP_echod_third.c}
\end{minipage}
\normalsize
poi l'opzione esprime una condizione logica, il valore è sempre un intero, ma
si dovrà usare un valore non nullo per abilitarla ed un valore nullo per
disabilitarla. Se invece l'opzione non prevede di dover ricevere nessun tipo
-di valore si deve impostare \param{optval} a \const{NULL}. Un piccolo numero
+di valore si deve impostare \param{optval} a \val{NULL}. Un piccolo numero
di opzioni però usano dei tipi di dati peculiari, è questo il motivo per cui
\param{optval} è stato definito come puntatore generico.
il client sull'altro capo non è più attivo o perché non è più in grado di
comunicare con il server via rete.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/TCP_echod_fourth.c}
\end{minipage}
\normalsize
socket, all'interno del file \texttt{SockUtils.c} dei sorgenti allegati alla
guida.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/sockbindopt.c}
\end{minipage}
\normalsize
valore, per cui in tal caso la successiva chiamata (\texttt{\small 13-17}) a
\func{setsockopt} attiverà l'opzione \const{SO\_REUSEADDR}.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/TCP_echod_fifth.c}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/linger.h}
\end{minipage}
\caption{La struttura \structd{linger} richiesta come valore dell'argomento
questa funzionalità,; al solito il codice completo è disponibile nei sorgenti
allegati.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/TCP_echo_sixth.c}
\end{minipage}
\normalsize
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/pktinfo.h}
\end{minipage}
\caption{La struttura \structd{pktinfo} usata dall'opzione
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/ip_mreqn.h}
\end{minipage}
\caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/tcp_info.h}
\end{minipage}
\caption{La struttura \structd{tcp\_info} contenente le informazioni sul
in fig.~\ref{fig:is_closing}, in cui si utilizza il valore del campo
\var{tcpi\_state} di \struct{tcp\_info} per controllare lo stato del socket.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/is_closing.c}
\end{minipage}
\caption{Codice della funzione \texttt{is\_closing.c}, che controlla lo stato
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/ifreq.h}
\end{minipage}
\caption{La struttura \structd{ifreq} utilizzata dalle \func{ioctl} per le
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/ifmap.h}
\end{minipage}
\caption{La struttura \structd{ifmap} utilizzata per leggere ed impostare i
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\textwidth}
\includestruct{listati/ifconf.h}
\end{minipage}
\caption{La struttura \structd{ifconf}.}
condizione in cui sono stati usati esattamente quel numero di byte.} avuta
una situazione di troncamento dei dati.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/iflist.c}
\end{minipage}
\caption{Il corpo principale del programma \texttt{iflist.c}.}
procedimento del \itindex{Maximum~Transfer~Unit} \textit{Path MTU discovery}
fallisce; dato che questo può avvenire a causa di router\footnote{ad
esempio se si scartano tutti i pacchetti ICMP, il problema è affrontato
- anche in sez.~1.4.4 di \cite{FwGL}.} o interfacce\footnote{ad esempio se i
+ anche in sez.~3.4.4 di \cite{SGL}.} o interfacce\footnote{ad esempio se i
due capi di un collegamento \textit{point-to-point} non si accordano sulla
- stessa MTU.} mal configurate è opportuno correggere le configurazioni,
+ stessa MTU.} mal configurati è opportuno correggere le configurazioni,
perché disabilitare globalmente il procedimento con questo parametro ha
pesanti ripercussioni in termini di prestazioni di rete.