Le impostazioni e lo stato del \textit{resolver} 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 \headfile{resolv.h} ed
+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:
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\footnote{ripreso dai file di dichiarazione
- \headfile{arpa/nameser.h} e \headfile{arpa/nameser\_compat.h}.} che
+ record}. L'elenco delle costanti, ripreso dai file di dichiarazione
+ \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)
\label{fig:sock_addrinfo_struct}
\end{figure}
-Come illustrato la struttura \struct{addrinfo}, la cui definizione\footnote{la
- definizione è ripresa direttamente dal file \headfile{netdb.h} in questa
- struttura viene dichiarata, la pagina di manuale riporta \type{size\_t} come
- tipo di dato per il campo \var{ai\_addrlen}, qui viene usata quanto previsto
- dallo standard POSIX, in cui viene utilizzato \type{socklen\_t}; i due tipi
- di dati sono comunque equivalenti.} è riportata in
-fig.~\ref{fig:sock_addrinfo_struct}, viene usata sia in ingresso, per passare
-dei valori di controllo alla funzione, che in uscita, per ricevere i
-risultati. Il primo campo, \var{ai\_flags}, è una maschera binaria di bit che
+Come illustrato la struttura \struct{addrinfo}, la cui definizione è riportata
+in fig.~\ref{fig:sock_addrinfo_struct}, viene usata sia in ingresso, per
+passare dei valori di controllo alla funzione, che in uscita, per ricevere i
+risultati. La definizione è ripresa direttamente dal file \headfiled{netdb.h}
+in questa struttura viene dichiarata, la pagina di manuale riporta
+\type{size\_t} come tipo di dato per il campo \var{ai\_addrlen}, qui viene
+usata quanto previsto dallo standard POSIX, in cui viene utilizzato
+\type{socklen\_t}; i due tipi di dati sono comunque equivalenti.
+
+Il primo campo, \var{ai\_flags}, è una maschera binaria di bit che
permettono di controllare le varie modalità di risoluzione degli indirizzi,
che viene usato soltanto in ingresso. I tre campi successivi \var{ai\_family},
\var{ai\_socktype}, e \var{ai\_protocol} contengono rispettivamente la
\const{SO\_DONTROUTE}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
Non invia attraverso un gateway.\\
\const{SO\_BROADCAST}&$\bullet$&$\bullet$&$\bullet$&\texttt{int}&
- Attiva o disattiva il \itindex{broadcast}
- \textit{broadcast}.\\
+ Attiva o disattiva il \textit{broadcast}.\\
\const{SO\_SNDBUF} &$\bullet$&$\bullet$& &\texttt{int}&
Imposta dimensione del buffer di trasmissione.\\
\const{SO\_RCVBUF} &$\bullet$&$\bullet$& &\texttt{int}&
di routing del kernel. Prende per \param{optval} un intero usato come valore
logico.
-\item[\const{SO\_BROADCAST}] questa opzione abilita il \itindex{broadcast}
- \textit{broadcast}; quanto abilitata i socket di tipo \const{SOCK\_DGRAM}
- riceveranno i pacchetti inviati all'indirizzo di \textit{broadcast}, e
- potranno scrivere pacchetti su tale indirizzo. Prende per \param{optval} un
- intero usato come valore logico. L'opzione non ha effetti su un socket di
- tipo \const{SOCK\_STREAM}.
+\item[\const{SO\_BROADCAST}] questa opzione abilita il \textit{broadcast};
+ quanto abilitata i socket di tipo \const{SOCK\_DGRAM} riceveranno i
+ pacchetti inviati all'indirizzo di \textit{broadcast}, e potranno scrivere
+ pacchetti su tale indirizzo. Prende per \param{optval} un intero usato come
+ valore logico. L'opzione non ha effetti su un socket di tipo
+ \const{SOCK\_STREAM}.
\item[\const{SO\_SNDBUF}] questa opzione imposta la dimensione del buffer di
trasmissione del socket. Prende per \param{optval} un intero indicante il
approfondimento sul significato delle opzioni generiche più importanti.
-\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|(}
+\constbeg{SO\_KEEPALIVE}
\subsubsection{L'opzione \const{SO\_KEEPALIVE}}
La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di
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!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|)}
+\constend{SO\_KEEPALIVE}
-\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|(}
+\constbeg{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}.}
-% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
-
+\constend{SO\_REUSEADDR}
-\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|)}
+% TODO documentare SO_REUSEPORT, vedi https://lwn.net/Articles/542260/
-\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|(}
+\constbeg{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!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|)}
+\constend{SO\_LINGER}
livello da utilizzare è \const{SOL\_IP} (o l'equivalente \const{IPPROTO\_IP});
si è riportato un elenco di queste opzioni in tab.~\ref{tab:sock_opt_iplevel}.
Le costanti indicanti le opzioni e tutte le altre costanti ad esse collegate
-sono definite in \headfile{netinet/ip.h}, ed accessibili includendo detto
+sono definite in \headfiled{netinet/ip.h}, ed accessibili includendo detto
file.
\begin{table}[!htb]
dove sono elencate le rispettive costanti da utilizzare come valore per
l'argomento \param{optname}. Dette costanti e tutte le altre costanti e
strutture collegate all'uso delle opzioni TCP sono definite in
-\headfile{netinet/tcp.h}, ed accessibili includendo detto file.\footnote{in
+\headfiled{netinet/tcp.h}, ed accessibili includendo detto file.\footnote{in
realtà questo è il file usato dalle librerie; la definizione delle opzioni
effettivamente supportate da Linux si trova nel file
\texttt{include/linux/tcp.h} dei sorgenti del kernel, dal quale si sono
questo caso per poterle utilizzare occorrerà impostare l'opportuno valore per
l'argomento \param{level}, che è \const{SOL\_UDP} (o l'equivalente
\const{IPPROTO\_UDP}). Le costanti che identificano dette opzioni sono
-definite in \headfile{netinet/udp.h}, ed accessibili includendo detto
+definite in \headfiled{netinet/udp.h}, ed accessibili includendo detto
file.\footnote{come per TCP, la definizione delle opzioni effettivamente
supportate dal kernel si trova in realtà nel file
\texttt{include/linux/udp.h}, dal quale si sono estratte le costanti di
dell'interfaccia su cui si vuole operare (ad esempio \texttt{eth0},
\texttt{ppp0}, ecc.), e si inseriscono (o ricevono) i valori relativi alle
diversa caratteristiche e funzionalità nel secondo campo, che come si può
-notare è definito come una \direct{union} proprio in quanto il suo significato
+notare è definito come una \dirct{union} proprio in quanto il suo significato
varia a secondo dell'operazione scelta.
Si tenga inoltre presente che alcune di queste operazioni (in particolare
\hline
\const{IFF\_UP} & L'interfaccia è attiva.\\
\const{IFF\_BROADCAST} & L'interfaccia ha impostato un indirizzo di
- \itindex{broadcast} \textit{broadcast} valido.\\
+ \textit{broadcast} valido.\\
\const{IFF\_DEBUG} & È attivo il flag interno di debug.\\
\const{IFF\_LOOPBACK} & L'interfaccia è una interfaccia di
\textit{loopback}.\\
privilegiata.
\item[\const{SIOCSIFHWBROADCAST}] imposta l'indirizzo \textit{broadcast}
- \itindex{broadcast} hardware dell'interfaccia al valore specificato dal
- campo \var{ifr\_hwaddr}. L'operazione è privilegiata.
+ hardware dell'interfaccia al valore specificato dal campo
+ \var{ifr\_hwaddr}. L'operazione è privilegiata.
\item[\const{SIOCGIFMAP}] legge alcuni parametri hardware (memoria, interrupt,
canali di DMA) del driver dell'interfaccia specificata, restituendo i
\var{ifc\_req}. Qualora il buffer sia stato allocato come una stringa, il suo
indirizzo potrà essere fornito usando il campo \var{ifc\_buf}.\footnote{si
noti che l'indirizzo del buffer è definito in \struct{ifconf} con una
- \direct{union}, questo consente di utilizzare una delle due forme a piacere.}
+ \dirct{union}, questo consente di utilizzare una delle due forme a piacere.}
La funzione restituisce nel buffer indicato una serie di strutture
\struct{ifreq} contenenti nel campo \var{ifr\_name} il nome dell'interfaccia e