\begin{table}[htb]
\footnotesize
\centering
- \begin{tabular}{l|c|c|c|c|c|}
- \multicolumn{1}{c}{} &\multicolumn{1}{c}{\const{SOCK\_STREAM}}&
- \multicolumn{1}{c}{\const{SOCK\_DGRAM}} &
- \multicolumn{1}{c}{\const{SOCK\_RAW}} &
- \multicolumn{1}{c}{\const{SOCK\_PACKET}}&
- \multicolumn{1}{c}{\const{SOCK\_SEQPACKET}} \\
- \cline{2-6}
+ \begin{tabular}{|l|c|c|c|c|c|}
+ \hline
+ \multicolumn{1}{|c|}{\textbf{Famiglia}}&
+ \multicolumn{5}{|c|}{\textbf{Tipo}}\\
+ \hline
+ \hline
+ &\const{SOCK\_STREAM} &\const{SOCK\_DGRAM} &\const{SOCK\_RAW}&
+ \const{SOCK\_PACKET}&\const{SOCK\_SEQPACKET} \\
+ \hline
\const{PF\_UNIX} & si & si & & & \\
- \cline{2-6}
+ \hline
\const{PF\_INET} & TCP & UDP & IPv4 & & \\
- \cline{2-6}
+ \hline
\const{PF\_INET6} & TCP & UDP & IPv6 & & \\
- \cline{2-6}
+ \hline
\const{PF\_IPX} & & & & & \\
- \cline{2-6}
+ \hline
\const{PF\_NETLINK} & & si & si & & \\
- \cline{2-6}
+ \hline
\const{PF\_X25} & & & & & si \\
- \cline{2-6}
+ \hline
\const{PF\_AX25} & & & & & \\
- \cline{2-6}
+ \hline
\const{PF\_ATMPVC} & & & & & \\
- \cline{2-6}
+ \hline
\const{PF\_APPLETALK} & & si & si & & \\
- \cline{2-6}
+ \hline
\const{PF\_PACKET} & & si & si & & \\
- \cline{2-6}
+ \hline
\end{tabular}
\caption{Combinazioni valide di dominio e tipo di protocollo per la
funzione \func{socket}.}
\begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
- u_int16_t sin_port; /* port in network byte order */
+ in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
- u_int32_t s_addr; /* address in network byte order */
+ in_addr_t s_addr; /* address in network byte order */
};
\end{lstlisting}
\end{minipage}
\begin{minipage}[c]{15cm}
\begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
struct sockaddr_in6 {
- u_int16_t sin6_family; /* AF_INET6 */
- u_int16_t sin6_port; /* port number */
- u_int32_t sin6_flowinfo; /* IPv6 flow information */
+ uint16_t sin6_family; /* AF_INET6 */
+ in_port_t sin6_port; /* port number */
+ uint32_t sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
- u_int32_t sin6_scope_id; /* Scope id (new in 2.4) */
+ uint32_t sin6_scope_id; /* Scope id (new in 2.4) */
};
struct in6_addr {
- unsigned char s6_addr[16]; /* IPv6 address */
+ uint8_t s6_addr[16]; /* IPv6 address */
};
\end{lstlisting}
\end{minipage}
chiamati \textit{local domain} o anche \textit{Unix domain}); essi rispetto ai
precedenti possono essere anche creati in maniera anonima attraverso la
funzione \func{socketpair} (vedi \secref{sec:ipc_socketpair}). Quando però si
-vuole fare riferimento esplicito ad uno di questi socket si deve usare la
-seguente struttura di indirizzi definita nel file di header \file{sys/un.h}.
+vuole fare riferimento esplicito ad uno di questi socket si deve usare una
+struttura degli indirizzi di tipo \struct{sockaddr\_un}, la cui definizione si
+è riportata in \secref{fig:sock_sa_local_struct}.
\begin{figure}[!htb]
\footnotesize \centering
};
\end{lstlisting}
\end{minipage}
- \caption{La struttura degli indirizzi dei socket locali
- \structd{sockaddr\_un}.}
+ \caption{La struttura degli indirizzi dei socket locali (detti anche
+ \textit{unix domain}) \structd{sockaddr\_un} definita in \file{sys/un.h}.}
\label{fig:sock_sa_local_struct}
\end{figure}
In questo caso il campo \var{sun\_family} deve essere \const{AF\_UNIX}, mentre
-il campo \var{sun\_path} deve specificare un indirizzo; questo ha due forme:
+il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme:
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 pathname del file;
-nel secondo invece \var{sun\_path} inizia con uno zero vengono usati i
-restanti byte come stringa (senza terminazione).
+nel secondo invece \var{sun\_path} inizia con uno zero e vengono usati i
+restanti byte come stringa, senza terminazione.
\subsection{La struttura degli indirizzi AppleTalk}
AppleTalk, uno dei primi protocolli di rete usato nel mondo dei personal
computer, usato dalla Apple per connettere fra loro computer e stampanti. Il
kernel supporta solo due strati del protocollo, DDP e AARP, e di norma è
-opportuno usare le funzioni di libreria, si tratta qui questo argomento
-principalmente per mostrare l'uso di un protocollo alternativo.
+opportuno usare le funzioni della libreria \texttt{netatalk}, tratteremo qui
+questo argomento principalmente per mostrare l'uso di un protocollo
+alternativo.
I socket AppleTalk permettono di usare il protocollo DDP, che è un protocollo
a pacchetto, di tipo \const{SOCK\_DGRAM}; l'argomento \param{protocol} di
specificando un tipo \const{SOCK\_RAW}, nel qual caso l'unico valore valido
per \param{protocol} è \func{ATPROTO\_DDP}.
+Gli indirizzi AppleTalk devono essere specificati tramite una struttura
+\struct{sockaddr\_atalk}, la cui definizione è riportata in
+\figref{fig:sock_sa_atalk_struct}; la struttura viene dichiarata includendo il
+file \file{netatalk/at.h}.
+
\begin{figure}[!htb]
\footnotesize \centering
\begin{minipage}[c]{15cm}
\begin{lstlisting}[labelstep=0]{}%,frame=,indent=1cm]{}
struct sockaddr_atalk {
sa_family_t sat_family; /* address family */
- u_char sat_port; /* port */
+ uint8_t sat_port; /* port */
struct at_addr sat_addr; /* net/node */
};
struct at_addr {
- unsigned short s_net;
- unsigned char s_node;
+ uint16_t s_net;
+ uint8_t s_node;
};
\end{lstlisting}
\end{minipage}
\label{fig:sock_sa_atalk_struct}
\end{figure}
-Il campo \var{sut\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
-campo \var{sun\_port} specifica la porta che identifica i vari servizi. Valori
+Il campo \var{sat\_family} deve essere sempre \const{AF\_APPLETALK}, mentre il
+campo \var{sat\_port} specifica la porta che identifica i vari servizi. Valori
inferiori a 129 sono usati per le \textsl{porte riservate}, e possono essere
usati solo da processi con i privilegi di amministratore o con la capability
\const{CAP\_NET\_BIND\_SERVICE}. L'indirizzo remoto è specificato nella
-struttura \var{sun\_addr}, e deve essere in \textit{network order}; esso è
+struttura \var{sat\_addr}, e deve essere in \textit{network order}; esso è
composto da un parte di rete data dal campo \var{s\_net}, che può assumere il
valore \const{AT\_ANYNET}, che indica una rete genrica e vale anche per
indicare la rete su cui si è, il singolo nodo è indicato da \var{s\_node}, e
corrente, ed il valore \const{ATADDR\_BCAST} che indica tutti i nodi della
rete.
-
-
-
-
-\subsection{La struttura degli indirizzi DECnet}
-\label{sec:sock_sa_decnet}
-
-I socket di tipo \const{PF\_DECnet} usano il protocollo DECnet, usato dai VAX
-Digital sotto VMS quando ancora il TCP/IP non era diventato lo standard di
-fatto. Il protocollo è un protocollo chiuso, ed il suo uso attuale è di
-compatibilità con macchine che stanno comunque scomparendo. Lo si riporta solo
-come esempio
+%% \subsection{La struttura degli indirizzi DECnet}
+%% \label{sec:sock_sa_decnet}
+
+%% I socket di tipo \const{PF\_DECnet} usano il protocollo DECnet, usato dai VAX
+%% Digital sotto VMS quando ancora il TCP/IP non era diventato lo standard di
+%% fatto. Il protocollo è un protocollo chiuso, ed il suo uso attuale è limitato
+%% alla comunicazione con macchine che stanno comunque scomparendo. Lo si riporta
+%% solo come esempio