+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
+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, epsresso dalla costante
+\const{RES\_DEFAULT}, è definito come:
+\includecodesnip{listati/resolv_option_def.c}
+
+Non tratteremo il significato degli altri campi non essendovi necessità di
+modificarli direttamente; gran parte di essi sono infatti impostati dal
+contenuto dei file di configurazione, mentre le funzionalità controllate da
+alcuni di esse possono essere modificate con l'uso delle opportune variabili
+di ambiente come abbiamo visto per \texttt{LOCALDOMAIN}. In particolare con
+\texttt{RES\_RETRY} si soprassiede il valore del campo \var{retry} che
+controlla quante volte viene ripetuto il tentativo di connettersi ad un server
+DNS prima di dichiarare fallimento; il valore di default è 4, un valore nullo
+significa bloccare l'uso del DNS. Infine con \texttt{RES\_TIMEOUT} si
+soprassiede il valore del campo \var{retrans},\footnote{preimpostato al valore
+ della omonima costante \const{RES\_TIMEOUT} di \file{resolv.h}.} che è il
+valore preso come base (in numero di secondi) per definire la scadenza di una
+richiesta, ciascun tentativo di richiesta fallito viene ripetuto raddoppianto
+il tempo di scadenza per il numero massimo di volte stabilito da
+\texttt{RES\_RETRY}.
+
+La funzione di interrogazione principale è \funcd{res\_query}, che serve ad
+eseguire una richiesta ad un server DNS per un nome a dominio
+\textsl{completamente specificato} (quello che si chiama FQDN, \textit{Fully
+ Qualified Domain Name}); il suo prototipo è:
+
+\begin{functions}
+\headdecl{netinet/in.h}
+\headdecl{arpa/nameser.h}
+\headdecl{resolv.h}
+\funcdecl{int res\_query(const char *dname, int class, int type,
+ unsigned char *answer, int anslen)}
+
+ Esegue una interrogazione al DNS.
+
+\bodydesc{La funzione restituisce un valore positivo pari alla lunghezza dei
+ dati scritti nel buffer \param{answer} in caso di successo e -1 in caso di
+ errore.}
+\end{functions}
+
+La funzione esegue una interrogazione ad un server DNS relativa al nome da
+risolvere passato nella stringa indirizzata da \param{dname}, inoltre deve
+essere specificata la classe di indirizzi in cui eseguire la ricerca con
+\param{class}, ed il tipo di \textit{resource record} che si vuole ottenere
+con \param{type}. Il risultato della ricerca verrà scritto nel buffer di
+lunghezza \param{anslen} puntato da \param{answer} che si sarà opportunamente
+allocato in precedenza.
+
+
+Una seconda funzione di ricerca, analoga a \func{res\_query}, che prende gli
+stessi argomenti, ma che esegue l'interrogazione con le funzionalità
+addizionali previste dalle due opzioni \const{RES\_DEFNAMES} e
+\const{RES\_DNSRCH}, è \funcd{res\_search}, il cui prototipo è:
+\begin{functions}
+\headdecl{netinet/in.h}
+\headdecl{arpa/nameser.h}
+\headdecl{resolv.h}
+\funcdecl{int res\_search(const char *dname, int class, int type,
+ unsigned char *answer, int anslen)}
+
+ Esegue una interrogazione al DNS.
+
+ \bodydesc{La funzione restituisce un valore positivo pari alla lunghezza dei
+ dati scritti nel buffer \param{answer} in caso di successo e -1 in caso di
+ errore.}
+\end{functions}
+
+In sostanza la funzione ripete una serie di chiamate a \func{res\_query}
+aggiungendo al nome contenuto nella stringa \param{dname} il dominio di
+default da cercare, fermandosi non appena trova un risultato. Il risultato di
+entrambe le funzioni viene scritto nel formato opportuno (che sarà diverso a
+seconda del tipo di record richiesto) nel buffer di ritorno; sarà compito del
+programma (o di altre funzioni) estrarre i relativi dati, esistono una serie
+di funzioni interne usate per la scansione di questi dati, per chi fosse
+interessato una trattazione dettagliata è riportata nel quattordicesimo
+capitolo di \cite{DNSbind}.
+
+Le classi di indirizzi supportate da un server DNS sono tre, ma di queste in
+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
+ \const{C\_CSNET} per la omonima rete, ma è stata dichiarata obsoleta.}
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|p{8cm}|}
+ \hline
+ \textbf{Costante} & \textbf{Significato} \\
+ \hline
+ \hline
+ \const{C\_IN} & indirizzi internet, in pratica i soli utilizzati oggi.\\
+ \const{C\_HS} & indirizzi \textit{Hesiod}, utilizzati solo al MIT, oggi
+ completamente estinti. \\
+ \const{C\_CHAOS}& indizzi per la rete \textit{Chaosnet}, un'altra rete
+ sperimentale nata al MIT. \\
+ \const{C\_ANY} & indica un indirizzo di classe qualunque.\\
+ \hline
+ \end{tabular}
+ \caption{Costanti identificative delle classi di indirizzi per l'argomento
+ \param{class} di \func{res\_query}.}
+ \label{tab:DNS_address_class}
+\end{table}
+
+Come accennato le tipologie di dati che sono mantenibili su un server DNS sono
+diverse, ed a ciascuna di essa corriponde un diverso tipo di \textit{resource
+ record}. L'elenco delle costanti\footnote{ripreso dai file di dichiarazione
+ \file{arpa/nameser.h} e \file{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)
+hanno gli stessi nomi usati per identificare i record nei file di zona di
+BIND,\footnote{BIND, acronimo di \textit{Berkley Internet Name Domain}, è una
+ implementazione di un server DNS, ed, essendo utilizzata nella stragrande
+ maggioranza dei casi, fa da rifererimento; i dati relativi ad un certo
+ dominio (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 normalmente sono anche usati come nomi per indicare i record.
+
+\begin{table}[!htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|l|}
+ \hline
+ \textbf{Costante} & \textbf{Significato} \\
+ \hline
+ \hline
+ \const{T\_A} & indirizzo di una stazione.\\
+ \const{T\_NS} & server DNS autoritativo per il dominio richiesto.\\
+ \const{T\_MD} & destinazione per la posta elettronica.\\
+ \const{T\_MF} & redistributore per la posta elettronica.\\
+ \const{T\_CNAME} & nome canonico.\\
+ \const{T\_SOA} & inzio di una zona di autorità.\\
+ \const{T\_MB} & nome a dominio di una casella di posta.\\
+ \const{T\_MG} & nome di un membro di un gruppo di posta.\\
+ \const{T\_MR} & nome di un cambiamento di nome per la posta.\\
+ \const{T\_NULL} & record nullo.\\
+ \const{T\_WKS} & servizio noto.\\
+ \const{T\_PTR} & risoluzione inversa di un indirizzo numerico.\\
+ \const{T\_HINFO} & informazione sulla stazione.\\
+ \const{T\_MINFO} & informazione sulla casella di posta.\\
+ \const{T\_MX} & server cui instradare la posta per il dominio.\\
+ \const{T\_TXT} & stringhe di testo (libere).\\
+ \const{T\_RP} & nome di un responsabile (\textit{responsible person}).\\
+ \const{T\_AFSDB} & database per una cella AFS.\\
+ \const{T\_X25} & indirizzo di chiamata per X.25.\\
+ \const{T\_ISDN} & indirizzo di chiamata per ISDN.\\
+ \const{T\_RT} & router.\\
+ \const{T\_NSAP} & indirizzo NSAP.\\
+ \const{T\_NSAP\_PTR}& risoluzione inversa per NSAP (deprecato).\\
+ \const{T\_SIG} & firma digitale di sicurezza.\\
+ \const{T\_KEY} & chiave per firma.\\
+ \const{T\_PX} & corrispondenza per la posta X.400.\\
+ \const{T\_GPOS} & posizione grografica.\\
+ \const{T\_AAAA} & indirizzo IPv6.\\
+ \const{T\_LOC} & informazione di collocazione.\\
+ \const{T\_NXT} & dominio successivo.\\
+ \const{T\_EID} & identificatore di punto conclusivo.\\
+ \const{T\_NIMLOC}& posizionatore \textit{nimrod}.\\
+ \const{T\_SRV} & servizio.\\
+ \const{T\_ATMA} & indirizzo ATM.\\
+ \const{T\_NAPTR} & puntatore ad una \textit{naming authority} .\\
+ \const{T\_TSIG} & firma di transazione.\\
+ \const{T\_IXFR} & trasferimento di zona incrementale.\\
+ \const{T\_AXFR} & trasferimento di zona di autorità.\\
+ \const{T\_MAILB} & trasferimento di record di caselle di posta.\\
+ \const{T\_MAILA} & trasferimento di record di server di posta.\\
+ \const{T\_ANY} & valore generico.\\
+ \hline
+ \end{tabular}
+ \caption{Costanti identificative del tipo di record per l'argomento
+ \param{type} di \func{res\_query}.}
+ \label{tab:DNS_record_type}
+\end{table}