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
\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
\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
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
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
Si noti come per la funzione sia del tutto irrilevante se la struttura
ritornata contiene indirizzi IPv6 o IPv4, in quanto si fa uso direttamente dei
dati relativi alle strutture degli indirizzi di \struct{addrinfo} che sono
-\textsl{opachi} rispetto all'uso della funzione \func{connect}.
+\index{tipo!opaco} 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
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
contiene i dati che specificano il valore dell'opzione che si vuole passare al
socket, mentre l'ultimo argomento \param{optlen},\footnote{questo argomento è
in realtà sempre di tipo \ctyp{int}, come era nelle \acr{libc4} e
- \acr{libc5}; l'uso di \ctyp{socklen\_t} è stato introdotto da POSIX (valgono
+ \acr{libc5}; l'uso di \type{socklen\_t} è stato introdotto da POSIX (valgono
le stesse considerazioni per l'uso di questo tipo di dato fatte in
sez.~\ref{sec:TCP_func_accept}) ed adottato dalle \acr{glibc}.} è la
dimensione in byte dei dati presenti all'indirizzo indicato da \param{optval}.
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
accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete.
\item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group}
- \textit{process group} a cui inviare i segnali \const{SIGIO} e
- \const{SIGURG} quando viene completata una operazione di I/O asincrono o
+ \textit{process group} a cui inviare i segnali \signal{SIGIO} e
+ \signal{SIGURG} quando viene completata una operazione di I/O asincrono o
arrivano dei dati urgenti \itindex{out-of-band} (\texttt{out-of-band}). Il
terzo argomento deve essere un puntatore ad una variabile di tipo
\type{pid\_t}; un valore positivo indica direttamente il \acr{pid} del
\item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket
relativamente all'eventuale processo o \itindex{process~group}
- \textit{process group} cui devono essere inviati i segnali \const{SIGIO} e
- \const{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
+ \textit{process group} cui devono essere inviati i segnali \signal{SIGIO} e
+ \signal{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un
puntatore ad una variabile di tipo \type{pid\_t}, con lo stesso significato.
Qualora non sia presente nessuna impostazione verrà restituito un valore
nullo.
\item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul
socket. Questo significa (vedi sez.~\ref{sec:file_asyncronous_operation})
- che verrà inviato il segnale di \const{SIGIO} (o quanto impostato con
+ che verrà inviato il segnale di \signal{SIGIO} (o quanto impostato con
\const{F\_SETSIG}, vedi sez.~\ref{sec:file_fcntl}) in caso di eventi di I/O
sul socket.
\end{basedescript}
\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
dell'interfaccia su cui si vuole operare (ad esempio \texttt{eth0},
\texttt{ppp0}, ecc.), e si inseriscono (o ricevono) i valori relativi alle
diversa caratteristiche e funzionalità nel secondo campo, che come si può
-notare è definito come una \ctyp{union} proprio in quanto il suo significato
+notare è definito come una \direct{union} proprio in quanto il suo significato
varia a secondo dell'operazione scelta.
Si tenga inoltre presente che alcune di queste operazioni (in particolare
\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}.}
\var{ifc\_req}. Qualora il buffer sia stato allocato come una stringa, il suo
indirizzo potrà essere fornito usando il campo \var{ifc\_buf}.\footnote{si
noti che l'indirizzo del buffer è definito in \struct{ifconf} con una
- \ctyp{union}, questo consente di utilizzare una delle due forme a piacere.}
+ \direct{union}, questo consente di utilizzare una delle due forme a piacere.}
La funzione restituisce nel buffer indicato una serie di strutture
\struct{ifreq} contenenti nel campo \var{ifr\_name} il nome dell'interfaccia e
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.