X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=06ba55f78e96f75ffc7b0a9869a933b43f6a816a;hp=d94093e3d7f83462c3b29dceda144a5af72481c2;hb=99fa5a06cd27160cf673e3483ad552d32efa2c05;hpb=4d46f47e3a0e08440812b334f79489d92814e6d2 diff --git a/sockctrl.tex b/sockctrl.tex index d94093e..06ba55f 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -275,7 +275,7 @@ che si esegue una delle altre. 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: @@ -453,8 +453,8 @@ 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\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) @@ -1280,15 +1280,16 @@ strutture di tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. \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 @@ -2054,8 +2055,7 @@ tab.~\ref{tab:sock_opt_socklevel}. \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}& @@ -2247,12 +2247,12 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: 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 @@ -2358,7 +2358,7 @@ programmazione dei socket. Per questo motivo faremo in questa sezione un 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 @@ -2460,11 +2460,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!{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 @@ -2637,12 +2637,11 @@ stesso indirizzo e porta solo se il programma che ha eseguito per primo 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 @@ -2728,7 +2727,7 @@ secondi\footnote{questa è l'unità di misura indicata da POSIX ed adottata da 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} @@ -2743,7 +2742,7 @@ socket che usano il protocollo IPv4.\footnote{come per le precedenti opzioni 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] @@ -3108,7 +3107,7 @@ riportate le varie opzioni disponibili in tab.~\ref{tab:sock_opt_tcplevel}, 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 @@ -3489,7 +3488,7 @@ ridotto di opzioni, riportate in tab.~\ref{tab:sock_opt_udplevel}; anche in 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 @@ -3642,7 +3641,7 @@ il primo campo della struttura, \var{ifr\_name} per specificare il nome 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 @@ -3686,7 +3685,7 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: \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}.\\ @@ -3763,8 +3762,8 @@ Le costanti che identificano le operazioni disponibili sono le seguenti: 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 @@ -3844,7 +3843,7 @@ questo buffer deve essere specificata nel campo \var{ifc\_len} di \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