X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=585e3712e22092777a4b6d4420ef063be881524e;hp=13384f354c979dbf0848dbbe8e54d5c2801575d4;hb=6f8e0ca42d3d0b97b5e5747798a1eaffb44e8521;hpb=fa6f00d7ff97c2b7e88a40885be73ae54824f139 diff --git a/sockctrl.tex b/sockctrl.tex index 13384f3..585e371 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -882,17 +882,18 @@ usare la funzione \funcd{gethostbyaddr}, il cui prototipo In questo caso l'argomento \param{addr} dovrà essere il puntatore ad una appropriata struttura contenente il valore dell'indirizzo IP (o IPv6) che si -vuole risolvere. L'uso del tipo \type{char *} per questo argomento è storico, -il dato dovrà essere fornito in una struttura \struct{in\_addr}\footnote{si - ricordi che, come illustrato in fig.~\ref{fig:sock_sa_ipv4_struct}, questo - in realtà corrisponde ad un numero intero, da esprimere comunque in - \textit{network order}, non altrettanto avviene però per \var{in6\_addr}, - pertanto è sempre opportuno inizializzare questi indirizzi con - \func{inet\_pton} (vedi sez.~\ref{sec:sock_conv_func_gen}).} per un -indirizzo IPv4 ed una struttura \struct{in6\_addr} per un indirizzo IPv6, -mentre in \param{len} se ne dovrà specificare la dimensione (rispettivamente 4 -o 16), infine l'argomento \param{type} indica il tipo di indirizzo e dovrà -essere o \const{AF\_INET} o \const{AF\_INET6}. +vuole risolvere. L'uso del tipo \texttt{char *} per questo argomento è +storico, il dato dovrà essere fornito in una struttura +\struct{in\_addr}\footnote{si ricordi che, come illustrato in + fig.~\ref{fig:sock_sa_ipv4_struct}, questo in realtà corrisponde ad un + numero intero, da esprimere comunque in \textit{network order}, non + altrettanto avviene però per \struct{in6\_addr}, pertanto è sempre opportuno + inizializzare questi indirizzi con \func{inet\_pton} (vedi + sez.~\ref{sec:sock_conv_func_gen}).} per un indirizzo IPv4 ed una struttura +\struct{in6\_addr} per un indirizzo IPv6, mentre in \param{len} se ne dovrà +specificare la dimensione (rispettivamente 4 o 16), infine l'argomento +\param{type} indica il tipo di indirizzo e dovrà essere o \const{AF\_INET} o +\const{AF\_INET6}. La funzione restituisce, in caso di successo, un puntatore ad una struttura \struct{hostent}, solo che in questo caso la ricerca viene eseguita @@ -1172,9 +1173,9 @@ rimandando alle rispettive pagine di manuale. \textbf{Informazione}&\multicolumn{3}{|c|}{\textbf{Funzioni}}\\ \hline \hline - indirizzo&\func{sethostent}&\func{gethostent}&\func{endhostent} \\ - servizio &cd te\func{setservent}&\func{getservent}&\func{endservent}\\ - rete &\func{setnetent}&\func{getnetent}&\func{endnetent}\\ + indirizzo &\func{sethostent} &\func{gethostent} &\func{endhostent} \\ + servizio &\func{setservent} &\func{getservent} &\func{endservent}\\ + rete &\func{setnetent} &\func{getnetent} &\func{endnetent}\\ protocollo&\func{setprotoent}&\func{getprotoent}&\func{endprotoent}\\ \hline \end{tabular} @@ -1414,7 +1415,7 @@ corrispondente \const{EAI\_SYSTEM} & c'è stato un errore di sistema, si può controllare \var{errno} per i dettagli. \\ % \hline -% estensioni GNU, trovarne la documentazione +% TODO estensioni GNU, trovarne la documentazione % \const{EAI\_INPROGRESS}& richiesta in corso. \\ % \const{EAI\_CANCELED}& la richiesta è stata cancellata.\\ % \const{EAI\_NOTCANCELED}& la richiesta non è stata cancellata. \\ @@ -2136,7 +2137,7 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: consente però di impostare il timout per l'uso di \func{connect}, per avere il quale si può ricorrere a questa opzione. -% verificare con un programma di test +% TODO verificare il timeout con un programma di test \item[\const{SO\_SNDTIMEO}] l'opzione permette di impostare un tempo massimo sulle operazioni di scrittura su un socket, ed usa gli stessi valori di @@ -2184,21 +2185,21 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: \item[\const{SO\_DEBUG}] questa opzione abilita il debugging delle operazioni dei socket; l'opzione utilizza per \param{optval} un intero usato come valore logico, e può essere utilizzata solo da un processo con i privilegi - di amministratore (in particolare con la \textit{capability} - \const{CAP\_NET\_ADMIN}). L'opzione necessita inoltre dell'opportuno - supporto nel kernel;\footnote{deve cioè essere definita la macro di - preprocessore \macro{SOCK\_DEBUGGING} nel file \file{include/net/sock.h} - dei sorgenti del kernel, questo è sempre vero nei kernel delle serie - superiori alla 2.3, per i kernel delle serie precedenti invece è - necessario aggiungere a mano detta definizione; è inoltre possibile - abilitare anche il tracciamento degli stati del TCP definendo la macro - \macro{STATE\_TRACE} in \file{include/net/tcp.h}.} quando viene - abilitata una serie di messaggi con le informazioni di debug vengono inviati - direttamente al sistema del kernel log.\footnote{si tenga presente che il - comportamento è diverso da quanto avviene con BSD, dove l'opzione opera - solo sui socket TCP, causando la scrittura di tutti i pacchetti inviati - sulla rete su un buffer circolare che viene letto da un apposito - programma, \cmd{trpt}.} + di amministratore (in particolare con la \itindex{capabilities} + \textit{capability} \const{CAP\_NET\_ADMIN}). L'opzione necessita inoltre + dell'opportuno supporto nel kernel;\footnote{deve cioè essere definita la + macro di preprocessore \macro{SOCK\_DEBUGGING} nel file + \file{include/net/sock.h} dei sorgenti del kernel, questo è sempre vero + nei kernel delle serie superiori alla 2.3, per i kernel delle serie + precedenti invece è necessario aggiungere a mano detta definizione; è + inoltre possibile abilitare anche il tracciamento degli stati del TCP + definendo la macro \macro{STATE\_TRACE} in \file{include/net/tcp.h}.} + quando viene abilitata una serie di messaggi con le informazioni di debug + vengono inviati direttamente al sistema del kernel log.\footnote{si tenga + presente che il comportamento è diverso da quanto avviene con BSD, dove + l'opzione opera solo sui socket TCP, causando la scrittura di tutti i + pacchetti inviati sulla rete su un buffer circolare che viene letto da un + apposito programma, \cmd{trpt}.} \item[\const{SO\_REUSEADDR}] questa opzione permette di eseguire la funzione \func{bind} su indirizzi locali che siano già in uso da altri socket; @@ -2264,7 +2265,8 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: valori del campo \textit{type of service} (noto come TOS, vedi sez.~\ref{sec:IP_header}) per i pacchetti uscenti. Per impostare una priorità al di fuori dell'intervallo di valori fra 0 e 6 sono richiesti i - privilegi di amministratore con la capability \const{CAP\_NET\_ADMIN}. + privilegi di amministratore con la \itindex{capabilities} capability + \const{CAP\_NET\_ADMIN}. \item[\const{SO\_ERROR}] questa opzione riceve un errore presente sul socket; può essere utilizzata soltanto con \func{getsockopt} e prende per @@ -2283,7 +2285,7 @@ programmazione dei socket. Per questo motivo faremo in questa sezione un approfondimento sul significato delle opzioni generiche più importanti. -\index{costante!{\tt SO\_KEEPALIVE}|(} +\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|(} \subsubsection{L'opzione \const{SO\_KEEPALIVE}} La prima opzione da approfondire è \const{SO\_KEEPALIVE} che permette di @@ -2365,8 +2367,7 @@ presente per necessariamente ad una reale conclusione della connessione, il problema potrebbe anche essere dovuto ad un problema di routing che perduri per un tempo maggiore di quello impiegato nei vari tentativi di ritrasmissione del -\textit{keep-alive} (anche se questa non è una una condizione molto -probabile). +\textit{keep-alive} (anche se questa non è una condizione molto probabile). Come esempio dell'utilizzo di questa opzione introduciamo all'interno del nostro server per il servizio \textit{echo} la nuova opzione \texttt{-k} che @@ -2385,10 +2386,11 @@ tutte le volte che un processo figlio viene eseguito in risposta ad una 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!{\tt SO\_KEEPALIVE}|)} +\index{costante!{SO\_KEEPALIVE}@{{\tt {SO\_KEEPALIVE}}}|)} -\index{costante!{\tt SO\_REUSEADDR}|(} + +\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|(} \subsubsection{L'opzione \const{SO\_REUSEADDR}} La seconda opzione da approfondire è \const{SO\_REUSEADDR}, che consente di @@ -2560,9 +2562,9 @@ questa opzione.\footnote{Questa restrizione permette di evitare il cosiddetto primo programma a consentirlo, avendo usato fin dall'inizio \const{SO\_REUSEADDR}.} -\index{costante!{\tt SO\_REUSEADDR}|)} +\index{costante!{SO\_REUSEADDR}@{{\tt {SO\_REUSEADDR}}}|)} -\index{costante!{\tt SO\_LINGER}|(} +\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|(} \subsubsection{L'opzione \const{SO\_LINGER}} La terza opzione da approfondire è \const{SO\_LINGER}; essa, come il nome @@ -2648,7 +2650,7 @@ secondi\footnote{questa completamento della trasmissione dei dati sul buffer.} pari al valore specificato in \var{l\_linger}. -\index{costante!{\tt SO\_LINGER}|)} +\index{costante!{SO\_LINGER}@{{\tt {SO\_LINGER}}}|)}