\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/hostent.h}
\end{minipage}
\caption{La struttura \structd{hostent} per la risoluzione dei nomi a
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\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]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/addrinfo.h}
\end{minipage}
\caption{La struttura \structd{addrinfo} usata nella nuova interfaccia POSIX
separatamente in sez.~\ref{sec:sock_options_main}. Quello che segue è quindi
soltanto un elenco più dettagliato della breve descrizione di
tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{SO\_KEEPALIVE}] questa opzione abilita un meccanismo di verifica
della persistenza di una connessione associata al socket (ed è pertanto
approfondimento sul significato delle opzioni generiche più importanti.
-\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|(}
+\constbeg{SO\_KEEPALIVE}
\subsubsection{L'opzione \const{SO\_KEEPALIVE}}
La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di
connessione verrà pertanto eseguita o meno la sezione (\texttt{\small 14--17})
che esegue l'impostazione di \const{SO\_KEEPALIVE} sul socket connesso,
attivando il relativo comportamento.
-\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|)}
+\constend{SO\_KEEPALIVE}
-\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|(}
+\constbeg{SO\_REUSEADDR}
\subsubsection{L'opzione \const{SO\_REUSEADDR}}
La seconda opzione da approfondire è \const{SO\_REUSEADDR}, che consente di
primo programma a consentirlo, avendo usato fin dall'inizio
\const{SO\_REUSEADDR}.}
-% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
-
+\constend{SO\_REUSEADDR}
-\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|)}
+% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
-\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|(}
+\constbeg{SO\_LINGER}
\subsubsection{L'opzione \const{SO\_LINGER}}
La terza opzione da approfondire è \const{SO\_LINGER}; essa, come il nome
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/linger.h}
\end{minipage}
\caption{La struttura \structd{linger} richiesta come valore dell'argomento
Un esempio di questo comportamento si può abilitare nel nostro client del
servizio \textit{echo} utilizzando l'opzione \texttt{-r}; riportiamo in
fig.~\ref{fig:TCP_echo_sixth} la sezione di codice che permette di introdurre
-questa funzionalità,; al solito il codice completo è disponibile nei sorgenti
+questa funzionalità; al solito il codice completo è disponibile nei sorgenti
allegati.
\begin{figure}[!htbp]
completamento della trasmissione dei dati sul buffer.} pari al valore
specificato in \var{l\_linger}.
-\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|)}
+\constend{SO\_LINGER}
\begin{table}[!htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|c|c|c|l|l|}
+ \begin{tabular}[c]{|l|c|c|c|l|p{6cm}|}
\hline
\textbf{Opzione}&\texttt{get}&\texttt{set}&\textbf{flag}&\textbf{Tipo}&
\textbf{Descrizione}\\
Le descrizioni riportate in tab.~\ref{tab:sock_opt_iplevel} sono estremamente
succinte, una maggiore quantità di dettagli sulle varie opzioni è fornita nel
seguente elenco:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{IP\_OPTIONS}] l'opzione permette di impostare o leggere le
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/pktinfo.h}
\end{minipage}
\caption{La struttura \structd{pktinfo} usata dall'opzione
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/ip_mreqn.h}
\end{minipage}
\caption{La struttura \structd{ip\_mreqn} utilizzata dalle opzioni dei
tab.~\ref{tab:sock_opt_tcplevel} sono estremamente sintetiche ed indicative,
la spiegazione del funzionamento delle singole opzioni con una maggiore
quantità di dettagli è fornita nel seguente elenco:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
-
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{TCP\_NODELAY}] il protocollo TCP utilizza un meccanismo di
bufferizzazione dei dati uscenti, per evitare la trasmissione di tanti
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\textwidth}
\includestruct{listati/tcp_info.h}
\end{minipage}
\caption{La struttura \structd{tcp\_info} contenente le informazioni sul
\begin{table}[!htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|l|p{10cm}|}
+ \begin{tabular}[c]{|l|l|l|}
\hline
\textbf{Nome}&\textbf{Configurazione}&\textbf{Riferimento} \\
\hline
Ancora una volta le descrizioni contenute tab.~\ref{tab:sock_opt_udplevel}
sono un semplice riferimento, una maggiore quantità di dettagli sulle
caratteristiche delle opzioni citate è quello dell'elenco seguente:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{UDP\_CORK}] questa opzione ha l'identico effetto dell'analoga
\const{TCP\_CORK} vista in precedenza per il protocollo TCP, e quando
deve sempre essere passato come puntatore ad una variabile (o struttura)
precedentemente allocata. Le costanti che identificano le operazioni sono le
seguenti:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{SIOCGSTAMP}] restituisce il contenuto di una struttura
\struct{timeval} con la marca temporale dell'ultimo pacchetto ricevuto sul
socket, questa operazione può essere utilizzata per effettuare delle
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\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 \direct{union} proprio in quanto il suo significato
+notare è definito come una \dirct{union} proprio in quanto il suo significato
varia a secondo dell'operazione scelta.
Si tenga inoltre presente che alcune di queste operazioni (in particolare
richiedono i privilegi di amministratore o la \textit{capability}
\const{CAP\_NET\_ADMIN}, altrimenti si otterrà un errore di \errval{EPERM}.
Le costanti che identificano le operazioni disponibili sono le seguenti:
-\begin{basedescript}{\desclabelwidth{2.7cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{SIOCGIFNAME}] questa è l'unica operazione che usa il campo
\var{ifr\_name} per restituire un risultato, tutte le altre lo utilizzano
per indicare l'interfaccia sulla quale operare. L'operazione richiede che si
\begin{figure}[!htb]
\footnotesize \centering
- \begin{minipage}[c]{\textwidth}
+ \begin{minipage}[c]{0.80\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]{\textwidth}
+ \begin{minipage}[c]{0.80\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
- \direct{union}, questo consente di utilizzare una delle due forme a piacere.}
+ \dirct{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
illustrate nell'elenco seguente; il terzo argomento della funzione, gestito
come \textit{value result argument}, deve essere sempre il puntatore ad una
variabile di tipo \ctyp{int}:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{SIOCINQ}] restituisce la quantità di dati non ancora letti
presenti nel buffer di ricezione; il socket non deve essere in stato
\texttt{LISTEN}, altrimenti si avrà un errore di \errval{EINVAL}.
quelle indicate dalle costanti del seguente elenco; come per i socket TCP il
terzo argomento viene gestito come \textit{value result argument} e deve
essere un puntatore ad una variabile di tipo \ctyp{int}:
-\begin{basedescript}{\desclabelwidth{2.5cm}\desclabelstyle{\nextlinelabel}}
+\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
\item[\const{FIONREAD}] restituisce la dimensione in byte del primo pacchetto
in attesa di ricezione, o 0 qualora non ci sia nessun pacchetto.
\item[\const{TIOCOUTQ}] restituisce il numero di byte presenti nella coda di