%% othersock.tex
%%
-%% Copyright (C) 2004-2006 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2010 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",
%% license is included in the section entitled "GNU Free Documentation
%% License".
%%
+
\chapter{Gli altri tipi di socket}
\label{cha:other_socket}
-Dopo aver trattato in cap.~\ref{cha:TCP_socket} i socket TCP, che costituiscono
-l'esempio più comune dell'interfaccia dei socket, esamineremo in questo
-capitolo gli altri tipi di socket, a partire dai socket UDP, e i socket
+Dopo aver trattato in cap.~\ref{cha:TCP_socket} i socket TCP, che
+costituiscono l'esempio più comune dell'interfaccia dei socket, esamineremo in
+questo capitolo gli altri tipi di socket, a partire dai socket UDP, e i socket
\textit{Unix domain} già incontrati in sez.~\ref{sec:ipc_socketpair}.
Questa differenza comporta ovviamente che anche le modalità con cui si usano i
socket UDP sono completamente diverse rispetto ai socket TCP, ed in
particolare non esistendo il concetto di connessione non esiste il meccanismo
-del \itindex{three~way~handshake}\textit{three way handshake} né quello degli
+del \itindex{three~way~handshake} \textit{three way handshake} né quello degli
stati del protocollo. In realtà tutto quello che avviene nella comunicazione
attraverso dei socket UDP è la trasmissione di un pacchetto da un client ad un
server o viceversa, secondo lo schema illustrato in
I due argomenti \param{from} e \param{fromlen} sono utilizzati per ottenere
l'indirizzo del mittente del pacchetto che è stato ricevuto, e devono essere
-opportunamente inizializzati con i puntatori alle variabili dove la struttura
-contenente quest'ultimo e la relativa lunghezza saranno scritti (si noti che
-\param{fromlen} è un valore intero ottenuto come
-\itindex{value~result~argument}\textit{value result argument}). Se non si è
+opportunamente inizializzati; il primo deve contenere il puntatore alla
+struttura (di tipo \ctyp{sockaddr}) che conterrà l'indirizzo e il secondo il
+puntatore alla variabile con la dimensione di detta struttura. Si tenga
+presente che mentre il contenuto della struttura \ctyp{sockaddr} cui punta
+\param{from} può essere qualunque, la variabile puntata da \param{fromlen}
+deve essere opportunamente inizializzata a \code{sizeof(sockaddr)},
+assicurandosi che la dimensione sia sufficiente a contenere tutti i dati
+dell'indirizzo.\footnote{si ricordi che \ctyp{sockaddr} è un tipo generico che
+ serve ad indicare la struttura corrispondente allo specifico tipo di
+ indirizzo richiesto, il valore di \param{fromlen} pone un limite alla
+ quantità di dati che verranno scritti sulla struttura puntata da
+ \param{from} e se è insufficiente l'indirizzo risulterà corrotto.} Al
+ritorno della funzione si otterranno i dati dell'indirizzo e la sua effettiva
+lunghezza, (si noti che \param{fromlen} è un valore intero ottenuto come
+\itindex{value~result~argument} \textit{value result argument}). Se non si è
interessati a questa informazione, entrambi gli argomenti devono essere
inizializzati al valore \const{NULL}.
+\index{socket!locali|(}
+
+
\section{I socket \textit{Unix domain}}
\label{sec:unix_socket}
+\index{socket!locali|)}
+
+
+\section{Altri socket}
+\label{sec:socket_other}
-\section{I socket \textit{raw}}
+Tratteremo in questa sezione gli altri tipi particolari di socket supportati
+da Linux, come quelli relativi a particolare protocolli di trasmissione, i
+socket \textit{netlink} che definiscono una interfaccia di comunicazione con
+il kernel, ed i \textit{packet socket} che consentono di inviare pacchetti
+direttamente a livello delle interfacce di rete.
+
+\subsection{I socket \textit{raw}}
\label{sec:socket_raw}
Tratteremo in questa sezione i cosiddetti \textit{raw socket}, con i quali si
possono \textsl{forgiare} direttamente i pacchetti a tutti i livelli dello
stack dei protocolli.
+\subsection{I socket \textit{netlink}}
+\label{sec:socket_netlink}
-\section{Altri socket}
-\label{sec:socket_other}
-
-Tratteremo in questa sezione gli altri tipi particolari di socket supportati
-da Linux, come quelli relativi a particolare protocolli di trasmissione ed i
-socket \textit{netlink} che definiscono una interfaccia di comunicazione con
-il kernel.
+\subsection{I \textit{packet socket}}
+\label{sec:packet_socket}
+% articoli interessanti:
+% http://www.linuxjournal.com/article/5617
+% http://www.linuxjournal.com/article/4659
+%
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-master: "gapil"
-%%% End:
% LocalWords: socket cap TCP UDP domain sez NFS DNS stream datagram PF INET to
% LocalWords: IPv tab SOCK DGRAM three way handshake client fig bind listen AF
% LocalWords: ECONNREFUSED value result argument close shutdown daytime nell'
% LocalWords: memset inet pton nread NUL superdemone inetd sniffer daytimed
% LocalWords: INADDR ANY addr echo ClientEcho sendbuff serv VPN tcpdump l'I
-% LocalWords: Stevens destination descriptor raw stack netlink
+% LocalWords: Stevens destination descriptor raw stack netlink packet
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: