X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=c69c9ee860e0799099c86198a178d593fc81a6ea;hp=58a18a5c6f0155be05bff70faf23f035ec09159a;hb=0c4a9ed958f4797e1cf4dc90e0c0358e302956f5;hpb=ffb12837c5ed8ccc095bc9c88349cd19b5e6b472 diff --git a/socket.tex b/socket.tex index 58a18a5..c69c9ee 100644 --- a/socket.tex +++ b/socket.tex @@ -1,6 +1,6 @@ %% socket.tex %% -%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -262,7 +262,7 @@ utilizzare fra quelli disponibili nella famiglia scelta. L'interfaccia dei socket permette di scegliere lo stile di comunicazione indicando il tipo di socket con l'argomento \param{type} di \func{socket}. Linux mette a disposizione vari tipi di socket (che corrispondono a quelli che il manuale -della \acr{glibc} \cite{glibc} chiama \textit{styles}) identificati dalle +della \acr{glibc} \cite{GlibcMan} chiama \textit{styles}) identificati dalle seguenti costanti:\footnote{le pagine di manuale POSIX riportano solo i primi tre tipi, Linux supporta anche gli altri, come si può verificare nel file \texttt{include/linux/net.h} dei sorgenti del kernel.} @@ -293,10 +293,30 @@ seguenti costanti:\footnote{le pagine di manuale POSIX riportano solo i primi pertanto non ne parleremo ulteriormente.} \end{basedescript} -Si tenga presente che non tutte le combinazioni fra una famiglia di protocolli -e un tipo di socket sono valide, in quanto non è detto che in una famiglia -esista un protocollo per ciascuno dei diversi stili di comunicazione appena -elencati. +A partire dal kernel 2.6.27 l'argomento \param{type} della funzione +\func{socket} assume un significato ulteriore perché può essere utlizzato per +impostare dei flag relativi alle caratteristiche generali del \textit{socket} +non strettamente attinenti all'indicazione del tipo secondo i valori appena +illustrati. Essi infatti possono essere combinati con un OR aritmetico delle +ulteriori costanti: +\begin{basedescript}{\desclabelwidth{2.9cm}\desclabelstyle{\nextlinelabel}} +\item[\const{SOCK\_CLOEXEC}] imposta il flag di \textit{close-on-exec} sul + file descriptor del socket, ottenendo lo stesso effetto del flag + \const{O\_CLOEXEC} di \func{open} (vedi tab.~\ref{tab:open_operation_flag}), + di cui costituisce l'analogo. + +\item[\const{SOCK\_NONBLOCK}] crea il socket in modalità non-bloccante, con + effetti identici ad una successiva chiamata a \func{fcntl} per impostare il + flag di \const{O\_NONBLOCK} sul file descriptor (si faccia di nuovo + riferimenti al significato di quest'ultimo come spiegato in + tab.~\ref{tab:open_operation_flag}). +\end{basedescript} + + +Si tenga presente inoltre che non tutte le combinazioni fra una famiglia di +protocolli e un tipo di socket sono valide, in quanto non è detto che in una +famiglia esista un protocollo per ciascuno dei diversi stili di comunicazione +appena elencati. \begin{table}[htb] \footnotesize @@ -561,9 +581,9 @@ il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme; può essere un file (di tipo socket) nel filesystem o una stringa univoca (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene specificato come una stringa (terminata da uno zero) corrispondente al -\itindex{pathname} \textit{pathname} del file; nel secondo invece -\var{sun\_path} inizia con uno zero e vengono usati come nome i restanti byte -come stringa, senza terminazione. +\textit{pathname} del file; nel secondo invece \var{sun\_path} inizia con uno +zero e vengono usati come nome i restanti byte come stringa, senza +terminazione. \subsection{La struttura degli indirizzi AppleTalk} @@ -841,9 +861,10 @@ nell'indirizzo binario che viene memorizzato nell'opportuna struttura \struct{in\_addr} (si veda fig.~\ref{fig:sock_sa_ipv4_struct}) situata all'indirizzo dato dall'argomento \param{dest} (è espressa in questa forma in modo da poterla usare direttamente con il puntatore usato per passare la -struttura degli indirizzi). La funzione restituisce 0 in caso di successo e 1 -in caso di fallimento. Se usata con \param{dest} inizializzato a \val{NULL} -effettua la validazione dell'indirizzo. +struttura degli indirizzi). La funzione restituisce un valore diverso da zero +se l'indirizzo è valido e la conversione ha successo e 0 in caso contrario. +Se usata con \param{dest} inizializzato a \val{NULL} effettua la validazione +dell'indirizzo. L'ultima funzione, \func{inet\_ntoa}, converte il valore a 32 bit dell'indirizzo (espresso in \textit{network order}) restituendo il puntatore