From 5c892b68c1d6e6b949457c96442e6b41236a1913 Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Thu, 30 Mar 2017 10:30:06 +0000 Subject: [PATCH] Roba rimasta indietro --- sockctrl.tex | 83 +++++++++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/sockctrl.tex b/sockctrl.tex index f371f92..a197b90 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -251,9 +251,8 @@ informazione che un server DNS fornisce normalmente. 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} @@ -274,32 +273,35 @@ sono specificati server verrà utilizzato l'indirizzo locale, e se non è 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} @@ -313,12 +315,14 @@ come la precedente viene chiamata automaticamente dalle altre funzioni) è \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 @@ -334,8 +338,7 @@ comportamento del \textit{resolver}. \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 @@ -345,7 +348,7 @@ comportamento del \textit{resolver}. 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.\\ @@ -373,9 +376,9 @@ comportamento del \textit{resolver}. 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 @@ -466,8 +469,8 @@ 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 - \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 @@ -493,7 +496,7 @@ tab.~\ref{tab:DNS_address_class}.\footnote{esisteva in realtà anche una classe 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) @@ -504,7 +507,7 @@ BIND,\footnote{BIND, acronimo di \textit{Berkley Internet Name Domain}, è una (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] @@ -594,7 +597,7 @@ indicarli si è usata la notazione dei file di zona di BIND): 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 -- 2.30.2