In questo caso l'argomento \param{addr} dovrà essere il puntatore ad una
appropriata struttura contenente il valore dell'indirizzo IP (o IPv6) che si
-vuole risolvere. L'uso del tipo \type{char *} per questo argomento è storico,
-il dato dovrà essere fornito in una struttura \struct{in\_addr}\footnote{si
- ricordi che, come illustrato in fig.~\ref{fig:sock_sa_ipv4_struct}, questo
- in realtà corrisponde ad un numero intero, da esprimere comunque in
- \textit{network order}, non altrettanto avviene però per \var{in6\_addr},
- pertanto è sempre opportuno inizializzare questi indirizzi con
- \func{inet\_pton} (vedi sez.~\ref{sec:sock_conv_func_gen}).} per un
-indirizzo IPv4 ed una struttura \struct{in6\_addr} per un indirizzo IPv6,
-mentre in \param{len} se ne dovrà specificare la dimensione (rispettivamente 4
-o 16), infine l'argomento \param{type} indica il tipo di indirizzo e dovrà
-essere o \const{AF\_INET} o \const{AF\_INET6}.
+vuole risolvere. L'uso del tipo \texttt{char *} per questo argomento è
+storico, il dato dovrà essere fornito in una struttura
+\struct{in\_addr}\footnote{si ricordi che, come illustrato in
+ fig.~\ref{fig:sock_sa_ipv4_struct}, questo in realtà corrisponde ad un
+ numero intero, da esprimere comunque in \textit{network order}, non
+ altrettanto avviene però per \struct{in6\_addr}, pertanto è sempre opportuno
+ inizializzare questi indirizzi con \func{inet\_pton} (vedi
+ sez.~\ref{sec:sock_conv_func_gen}).} per un indirizzo IPv4 ed una struttura
+\struct{in6\_addr} per un indirizzo IPv6, mentre in \param{len} se ne dovrà
+specificare la dimensione (rispettivamente 4 o 16), infine l'argomento
+\param{type} indica il tipo di indirizzo e dovrà essere o \const{AF\_INET} o
+\const{AF\_INET6}.
La funzione restituisce, in caso di successo, un puntatore ad una struttura
\struct{hostent}, solo che in questo caso la ricerca viene eseguita
\textbf{Informazione}&\multicolumn{3}{|c|}{\textbf{Funzioni}}\\
\hline
\hline
- indirizzo&\func{sethostent}&\func{gethostent}&\func{endhostent} \\
- servizio &cd te\func{setservent}&\func{getservent}&\func{endservent}\\
- rete &\func{setnetent}&\func{getnetent}&\func{endnetent}\\
+ indirizzo &\func{sethostent} &\func{gethostent} &\func{endhostent} \\
+ servizio &\func{setservent} &\func{getservent} &\func{endservent}\\
+ rete &\func{setnetent} &\func{getnetent} &\func{endnetent}\\
protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\
\hline
\end{tabular}
\const{EAI\_SYSTEM} & c'è stato un errore di sistema, si può controllare
\var{errno} per i dettagli. \\
% \hline
-% estensioni GNU, trovarne la documentazione
+% TODO estensioni GNU, trovarne la documentazione
% \const{EAI\_INPROGRESS}& richiesta in corso. \\
% \const{EAI\_CANCELED}& la richiesta è stata cancellata.\\
% \const{EAI\_NOTCANCELED}& la richiesta non è stata cancellata. \\
consente però di impostare il timout per l'uso di \func{connect}, per avere
il quale si può ricorrere a questa opzione.
-% verificare con un programma di test
+% TODO verificare il timeout con un programma di test
\item[\const{SO\_SNDTIMEO}] l'opzione permette di impostare un tempo massimo
sulle operazioni di scrittura su un socket, ed usa gli stessi valori di
\item[\const{SO\_DEBUG}] questa opzione abilita il debugging delle operazioni
dei socket; l'opzione utilizza per \param{optval} un intero usato come
valore logico, e può essere utilizzata solo da un processo con i privilegi
- di amministratore (in particolare con la \textit{capability}
- \const{CAP\_NET\_ADMIN}). L'opzione necessita inoltre dell'opportuno
- supporto nel kernel;\footnote{deve cioè essere definita la macro di
- preprocessore \macro{SOCK\_DEBUGGING} nel file \file{include/net/sock.h}
- dei sorgenti del kernel, questo è sempre vero nei kernel delle serie
- superiori alla 2.3, per i kernel delle serie precedenti invece è
- necessario aggiungere a mano detta definizione; è inoltre possibile
- abilitare anche il tracciamento degli stati del TCP definendo la macro
- \macro{STATE\_TRACE} in \file{include/net/tcp.h}.} quando viene
- abilitata una serie di messaggi con le informazioni di debug vengono inviati
- direttamente al sistema del kernel log.\footnote{si tenga presente che il
- comportamento è diverso da quanto avviene con BSD, dove l'opzione opera
- solo sui socket TCP, causando la scrittura di tutti i pacchetti inviati
- sulla rete su un buffer circolare che viene letto da un apposito
- programma, \cmd{trpt}.}
+ di amministratore (in particolare con la \itindex{capabilities}
+ \textit{capability} \const{CAP\_NET\_ADMIN}). L'opzione necessita inoltre
+ dell'opportuno supporto nel kernel;\footnote{deve cioè essere definita la
+ macro di preprocessore \macro{SOCK\_DEBUGGING} nel file
+ \file{include/net/sock.h} dei sorgenti del kernel, questo è sempre vero
+ nei kernel delle serie superiori alla 2.3, per i kernel delle serie
+ precedenti invece è necessario aggiungere a mano detta definizione; è
+ inoltre possibile abilitare anche il tracciamento degli stati del TCP
+ definendo la macro \macro{STATE\_TRACE} in \file{include/net/tcp.h}.}
+ quando viene abilitata una serie di messaggi con le informazioni di debug
+ vengono inviati direttamente al sistema del kernel log.\footnote{si tenga
+ presente che il comportamento è diverso da quanto avviene con BSD, dove
+ l'opzione opera solo sui socket TCP, causando la scrittura di tutti i
+ pacchetti inviati sulla rete su un buffer circolare che viene letto da un
+ apposito programma, \cmd{trpt}.}
\item[\const{SO\_REUSEADDR}] questa opzione permette di eseguire la funzione
\func{bind} su indirizzi locali che siano già in uso da altri socket;
valori del campo \textit{type of service} (noto come TOS, vedi
sez.~\ref{sec:IP_header}) per i pacchetti uscenti. Per impostare una
priorità al di fuori dell'intervallo di valori fra 0 e 6 sono richiesti i
- privilegi di amministratore con la capability \const{CAP\_NET\_ADMIN}.
+ privilegi di amministratore con la \itindex{capabilities} capability
+ \const{CAP\_NET\_ADMIN}.
\item[\const{SO\_ERROR}] questa opzione riceve un errore presente sul socket;
può essere utilizzata soltanto con \func{getsockopt} e prende per
approfondimento sul significato delle opzioni generiche più importanti.
-\index{costante!{\tt SO\_KEEPALIVE}|(}
+\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|(}
\subsubsection{L'opzione \const{SO\_KEEPALIVE}}
La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di
necessariamente ad una reale conclusione della connessione, il problema
potrebbe anche essere dovuto ad un problema di routing che perduri per un
tempo maggiore di quello impiegato nei vari tentativi di ritrasmissione del
-\textit{keep-alive} (anche se questa non è una una condizione molto
-probabile).
+\textit{keep-alive} (anche se questa non è una condizione molto probabile).
Come esempio dell'utilizzo di questa opzione introduciamo all'interno del
nostro server per il servizio \textit{echo} la nuova opzione \texttt{-k} che
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!{\tt SO\_KEEPALIVE}|)}
+\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|)}
-\index{costante!{\tt SO\_REUSEADDR}|(}
+
+\index{costante!{SO\_REUSEADDR}@{{\tt {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}.}
-\index{costante!{\tt SO\_REUSEADDR}|)}
+\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|)}
-\index{costante!{\tt SO\_LINGER}|(}
+\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|(}
\subsubsection{L'opzione \const{SO\_LINGER}}
La terza opzione da approfondire è \const{SO\_LINGER}; essa, come il nome
completamento della trasmissione dei dati sul buffer.} pari al valore
specificato in \var{l\_linger}.
-\index{costante!{\tt SO\_LINGER}|)}
+\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|)}