L'esistenza di vari tipi di informazioni è un altro dei motivi per cui il
\textit{resolver} prevede, oltre a quelle relative alla semplice risoluzione
dei nomi, un insieme di funzioni specifiche dedicate all'interrogazione di un
-server DNS, tutte nella forma \texttt{res\_}\textsl{\texttt{nome}}.
-Tradizionalmente la prima di queste funzioni è \funcd{res\_init}, il cui
-prototipo è:
+server DNS, tutte nella forma \texttt{res\_}\textsl{\texttt{nome}}. La prima
+di queste funzioni è \funcd{res\_init}, il cui prototipo è:
\begin{funcproto}{
\fhead{netinet/in.h}
definito un dominio di default sarà usato quello associato con l'indirizzo
locale (ma questo può essere sovrascritto con l'uso della variabile di
ambiente \envvar{LOCALDOMAIN}). In genere non è necessario eseguire questa
-funzione direttamente in quanto viene automaticamente chiamata la prima volta
-che si esegue una delle altre.
+funzione esplicitamente, in quanto viene automaticamente chiamata la prima
+volta che si esegue una qualunque delle altre.
Le impostazioni e lo stato del \textit{resolver} inizializzati da
\func{res\_init} vengono mantenuti in una serie di variabili raggruppate nei
-campi di una apposita struttura \var{\_res} usata da tutte queste
-funzioni. Essa viene definita in \headfiled{resolv.h} ed è utilizzata
-internamente alle funzioni essendo definita come variabile globale; questo
-consente anche di accedervi direttamente all'interno di un qualunque
-programma, una volta che la sia opportunamente dichiarata come:
+campi di una apposita struttura. Questa struttura viene definita in
+\headfiled{resolv.h} e mantenuta nella variabile globale \var{\_res}, che
+viene utilizzata internamente da tutte le funzioni dell'interfaccia. Questo
+consente anche di accedere direttamente al contenuto della variabile
+all'interno di un qualunque programma, una volta che la sia opportunamente
+dichiarata con:
\includecodesnip{listati/resolv_option.c}
-Dato che l'uso di una variabile globale rende tutte le funzioni classiche non
-rientranti, con l'uscita di BIND 8.2 è stata introdotta una nuova interfaccia
-in cui tutte le nuove funzioni (il cui nome è ottenuto apponendo una
-``\texttt{n}'' al nome di quella tradizionale nella forma
-\texttt{res\_n\textsl{nome}}). Tutte le nuove funzioni prendono un primo
-argomento aggiuntivo, \param{statep}, che punti ad una struttura dello stesso
-tipo, che verrà usato per mantenere lo stato del \textit{resolver} e potrà
-essere usata senza problemi anche con programmi \textit{multithread}. Anche
-in questo caso per poterlo utilizzare occorrerà una opportuna dichiarazione
-del tipo di dato con:
+Dato che l'uso di una variabile globale rende tutte le funzioni
+dell'interfaccia classica non rientranti, queste sono state deprecate in
+favore di una nuova interfaccia in cui esse sono state sostituite da
+altrettante nuove funzioni, il cui nome è ottenuto apponendo una
+``\texttt{n}'' al nome di quella tradizionale (cioè nella forma
+\texttt{res\_n\textsl{nome}}). Tutte le nuove funzioni sono identiche alle
+precedenti, ma hanno un primo argomento aggiuntivo, \param{statep}, puntatore
+ad una struttura dello stesso tipo di \var{\_res}. Questo consente di usare
+una variabile locale per mantenere lo stato del \textit{resolver}, rendendo le
+nuove funzioni rientranti. In questo caso per poter utilizzare il nuovo
+argomento occorrerà una opportuna dichiarazione del relativo tipo di dato con:
\includecodesnip{listati/resolv_newoption.c}
-e la nuova funzione che utilizzata per inizializzare il \textit{resolver} (che
-come la precedente viene chiamata automaticamente dalle altre funzioni) è
-\funcd{res\_ninit} il cui prototipo è:
+
+Così la nuova funzione utilizzata per inizializzare il \textit{resolver} (che
+come la precedente viene chiamata automaticamente da tutte altre funzioni) è
+\funcd{res\_ninit}, ed il suo prototipo è:
\begin{funcproto}{
\fhead{netinet/in.h}
\end{funcproto}
Indipendentemente da quale versione delle funzioni si usino, tutti i campi
-della struttura sono ad uso interno, e vengono usualmente inizializzate da
-\func{res\_init} o \func{res\_ninit} in base al contenuto dei file di
-configurazione e ad una serie di valori di default. L'unico campo che può
-essere utile modificare è \var{\_res.options}, una maschera binaria che
-contiene una serie di bit di opzione che permettono di controllare il
-comportamento del \textit{resolver}.
+della struttura (\var{\_res} o la variabile puntata da \param{statep}) sono ad
+uso interno, e vengono usualmente inizializzate da \func{res\_init} o
+\func{res\_ninit} in base al contenuto dei file di configurazione e ad una
+serie di valori di default. L'unico campo che può essere utile modificare è
+\var{\_res.options} (o l'equivalente della variabile puntata
+da\param{statep}), una maschera binaria che contiene una serie di bit che
+esprimono le opzioni che permettono di controllare il comportamento del
+\textit{resolver}.
\begin{table}[htb]
\centering
\constd{RES\_AAONLY} & Accetta solo risposte autoritative.\\
\constd{RES\_USEVC} & Usa connessioni TCP per contattare i server
invece che l'usuale UDP.\\
- \constd{RES\_PRIMARY} & Interroga soltanto server DNS primari.
- \\
+ \constd{RES\_PRIMARY} & Interroga soltanto server DNS primari.\\
\constd{RES\_IGNTC} & Ignora gli errori di troncamento, non ritenta la
richiesta con una connessione TCP.\\
\constd{RES\_RECURSE} & Imposta il bit che indica che si desidera
contengono cioè un ``\texttt{.}'').\\
\constd{RES\_STAYOPEN} & Usato con \const{RES\_USEVC} per mantenere
aperte le connessioni TCP fra interrogazioni
- diverse. \\
+ diverse.\\
\constd{RES\_DNSRCH} & Se attivo \func{res\_search} esegue le ricerche
di nomi di macchine nel dominio corrente o nei
domini ad esso sovrastanti.\\
Per utilizzare questa funzionalità per modificare le impostazioni direttamente
da programma occorrerà impostare un opportuno valore per questo campo ed
-invocare esplicitamente \func{res\_init}, dopo di che le altre funzioni
-prenderanno le nuove impostazioni. Le costanti che definiscono i vari bit di
-questo campo, ed il relativo significato sono illustrate in
+invocare esplicitamente \func{res\_init} o \func{res\_ninit}, dopo di che le
+altre funzioni prenderanno le nuove impostazioni. Le costanti che definiscono
+i vari bit di questo campo, ed il relativo significato sono illustrate in
tab.~\ref{tab:resolver_option}; trattandosi di una maschera binaria un valore
deve essere espresso con un opportuno OR aritmetico di dette costanti; ad
esempio il valore di default delle opzioni, espresso dalla costante
pratica oggi viene utilizzata soltanto quella degli indirizzi internet; le
costanti che identificano dette classi, da usare come valore per l'argomento
\param{class} delle precedenti funzioni, sono riportate in
-tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realtà anche una classe
- \constd{C\_CSNET} per la omonima rete, ma è stata dichiarata obsoleta.}
+tab.~\ref{tab:DNS_address_class} (esisteva in realtà anche una classe
+\constd{C\_CSNET} per la omonima rete, ma è stata dichiarata obsoleta).
\begin{table}[htb]
\centering
Come accennato le tipologie di dati che sono mantenibili su un server DNS sono
diverse, ed a ciascuna di essa corrisponde un diverso tipo di \textit{resource
record}. L'elenco delle costanti, ripreso dai file di dichiarazione
- \headfiled{arpa/nameser.h} e \headfiled{arpa/nameser\_compat.h}, che
+\headfiled{arpa/nameser.h} e \headfiled{arpa/nameser\_compat.h}, che
definiscono i valori che si possono usare per l'argomento \param{type} per
specificare il tipo di \textit{resource record} da richiedere è riportato in
tab.~\ref{tab:DNS_record_type}; le costanti (tolto il \texttt{T\_} iniziale)
(cioè i suoi \textit{resource record} vengono mantenuti in quelli che sono
usualmente chiamati \textsl{file di zona}, e in essi ciascun tipo di dominio
è identificato da un nome che è appunto identico a quello delle costanti di
- tab.~\ref{tab:DNS_record_type} senza il \texttt{T\_} iniziale.} e che
+ tab.~\ref{tab:DNS_record_type} senza il \texttt{T\_} iniziale.} e che
normalmente sono anche usati come nomi per indicare i record.
\begin{table}[!htb]
Come accennato in caso di successo le due funzioni di richiesta restituiscono
il risultato della interrogazione al server, in caso di insuccesso l'errore
-invece viene segnalato da un valore di ritorno pari a -1, ma in questo caso,
+invece viene segnalato da un valore di ritorno pari a $-1$, ma in questo caso,
non può essere utilizzata la variabile \var{errno} per riportare un codice di
errore, in quanto questo viene impostato per ciascuna delle chiamate al
sistema utilizzate dalle funzioni del \textit{resolver}, non avrà alcun