+informazioni, in pratica costituisce il meccanismo principale con cui vengono
+risolti i nomi a dominio. Per questo motivo esistono una serie di funzioni di
+libreria che servono specificamente ad esseguire delle interrogazioni verso un
+server DNS, funzioni che poi vengono utilizzate per realizzare le funzioni
+generiche di libreria usate anche dal sistema del \textit{resolver}.
+
+Il sistema del DNS è in sostanza di un database distribuito organizzato in
+maniera gerarchica, la manutenzione dei dati è mantenuta in tanti server
+distinti ciascuno dei quali si occupa della risoluzione del proprio
+\textsl{dominio}; i nomi a dominio sono poi organizzati in una struttura ad
+albero analoga a quella dell'albero dei file in un sistema unix-like, con
+domini di primo livello (come i \texttt{.org}), secondo livello (come
+\texttt{.truelite.it}), ecc. In questo caso le separazioni sono fra i vari
+livelli sono definite dal carattere ``\texttt{.}'' ed i nomi devono essere
+risolti da destra verso sinistra. Il meccanismo funziona con il criterio della
+\textsl{delegazione}, un server responsabile per un dominio di primo livello
+può delegare la risoluzione degli indirizzi per un suo dominio di secondo
+livello ad un altro server, il quale a sua volta potrà delegare la risoluzione
+di un eventuale sottodominio di terzo livello ad un altro server ancora.
+
+In realtà un server DNS contiene comunque una serie di altre informazioni;
+ciascuna voce nel database viene chiamata \textit{resource record}, e può
+contenere diverse informazioni; in genere i \textit{resource record} vengono
+classificati per la \textsl{classe di indirizzi} cui i dati contenuti fanno
+riferimento, e per il \textsl{tipo} di questi ultimi. Oggigiorno i dati
+mantenuti nei server DNS sono sostanzialmente relativi soltanto ad indirizzi
+internet, per cui in pratica c'è soltanto una classe di indirizzi utilizzata,
+i dati invece possono essere di vario tipo, uno dei quali è appunto la
+corrispondenza fra nome a dominio e numero IP.
+
+L'esistenza di vari tipi di informazioni ottenibili da un server DNS è
+un'altro dei motivi per cui il \textit{resolver} prevede un insieme di
+funzioni dedicato rispetto a quelle della semplice risoluzione dei nomi; la
+prima di queste è \funcd{res\_init}, il cui prototipo è:
+\begin{functions}
+\headdecl{netinet/in.h}
+\headdecl{arpa/nameser.h}
+\headdecl{resolv.h}
+\funcdecl{int res\_init(void)}
+
+Inizializza il sistema del \textit{resolver}.
+
+\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+ errore.}
+\end{functions}
+
+La funzione legge il contenuto dei file di configurazione per impostare il
+dominio di default, gli indirizzi dei server DNS da contattare e l'ordine
+delle ricerche; se non sono specificati server verrà utilizzato l'indirizzo
+locale, e se non è definito un dominio di default sarà usato quello associato
+con l'indirizzo locale. In genere si deve eseguire questa funzione prima di
+chiamare tutte le altre.
+
+Le impostazioni del resolver e lo stato del sistema vengono mantenute in una
+serie di variabili globali contenuti in una apposita struttura interna,
+definita in \file{resolv.h}, che può essere acceduta una volta che la si
+dichiara con:
+\includecodesnip{listati/resolv_option.c}
+
+Tutti i campi della struttura sono ad uso interno, l'unico che può essere
+utile modificare è il campo \var{\_res.options}, che è una maschera binaria
+che permette di controllare il comportamento del resolver, modificandone
+alcune impostazioni direttamente da programma prima di invocare
+\func{res\_init}. Le costanti che definiscono i vari bit di questo campo, con
+il relativo significato sono illustrate in tab.~\ref{tab:resolver_option}, un
+valore deve essere espresso con un opportuno OR aritmetico di dette costanti;
+ad esempio il valore di default dato dalla costante \const{RES\_DEFAULT} è
+definito come:
+\includecodesnip{listati/resolv_option_def.c}