%% License".
%%
-\chapter{Introduzione ai socket}
+\chapter{I socket}
\label{cha:socket_intro}
In questo capitolo inizieremo a spiegare le caratteristiche salienti della
si utilizzerà per la comunicazione. Per evitare un'introduzione puramente
teorica concluderemo il capitolo con un primo esempio di applicazione.
-\section{Una panoramica}
+\section{Introduzione ai socket}
\label{sec:sock_overview}
-Iniziamo con una descrizione essenziale di cosa sono i \textit{socket} e di
-quali sono i concetti fondamentali da tenere presente quando si ha a che fare
-con essi.
+In questa sezione daremo descrizione essenziale di cosa sono i \textit{socket}
+e di quali sono i concetti fondamentali da tenere presente quando si ha a che
+fare con essi; ne illustreremo poi le caratteristiche e le differenti
+tipologie presenti ed infine tratteremo le modalità con cui possono essere
+creati.
\index{socket!definizione|(}
-\subsection{I \textit{socket}}
+\subsection{Cosa sono \textit{socket}}
\label{sec:sock_socket_def}
I \textit{socket} (una traduzione letterale potrebbe essere \textsl{presa}, ma
solo con l'insieme dei protocolli TCP/IP, anche se questa sarà comunque quella
di cui tratteremo in maniera più estesa.
-
-\subsection{Concetti base}
-\label{sec:sock_gen}
-
Per capire il funzionamento dei socket occorre avere presente il funzionamento
-dei protocolli di rete che su utilizzeranno (vedi cap.~\ref{cha:network}), ma
-l'interfaccia è del tutto generale e benché le problematiche, e quindi le
-modalità di risolvere i problemi, siano diverse a seconda del tipo di
-protocollo di comunicazione usato, le funzioni da usare nella gestione dei
-socket restano le stesse.
+dei protocolli di rete che su utilizzeranno (ed in particolare quelli del
+TCP/IP già illustrati in sez.~\ref{sec:net_tpcip}), ma l'interfaccia è del
+tutto generale e benché le problematiche, e quindi le modalità di risolvere i
+problemi, siano diverse a seconda del tipo di protocollo di comunicazione
+usato, le funzioni da usare nella gestione dei socket restano le stesse.
Per questo motivo una semplice descrizione dell'interfaccia è assolutamente
inutile, in quanto il comportamento di quest'ultima e le problematiche da
affrontare cambiano radicalmente a seconda del tipo di comunicazione usato.
-La scelta di questo tipo (sovente anche detto \textsl{stile}) va infatti ad
-incidere sulla semantica che verrà utilizzata a livello utente per gestire la
-comunicazione cioè su come inviare e ricevere i dati e sul comportamento
-effettivo delle funzioni utilizzate.
+La scelta di questo tipo di comunicazione (sovente anche detto \textsl{stile})
+va infatti ad incidere sulla semantica che verrà utilizzata a livello utente
+per gestire la comunicazione cioè su come inviare e ricevere i dati e sul
+comportamento effettivo delle funzioni utilizzate.
La scelta di uno \textsl{stile} dipende sia dai meccanismi disponibili, sia
dal tipo di comunicazione che si vuole effettuare. Ad esempio alcuni tipi di
essere condotta con una connessione diretta con un solo corrispondente, come
per una telefonata; altri casi possono prevedere una comunicazione come per
lettera, in cui si scrive l'indirizzo su ogni pacchetto, altri ancora una
-comunicazione \itindex{broadcast} \textit{broadcast} come per la radio, in cui
-i pacchetti vengono emessi su appositi ``\textsl{canali}'' dove chiunque si
-collega possa riceverli.
+comunicazione uno a molti come il \textit{broadcast} ed il \textit{multicast},
+in cui i pacchetti possono venire emessi su appositi ``\textsl{canali}'' dove
+chiunque si collega possa riceverli.
-É chiaro che ciascuno di questi diversi aspetti associato ad un tipo di
-comunicazione comporta una modalità diversa di gestire la stessa, ad esempio
-se è inaffidabile occorrerà essere in grado di gestire la perdita o il
-rimescolamento dei dati, se è a pacchetti questi dovranno essere
-opportunamente trattati, ecc.
+É chiaro che ciascuno di questi diversi aspetti è associato ad un tipo di
+comunicazione che comporta una modalità diversa di gestire la stessa, ad
+esempio se la comunicazione è inaffidabile occorrerà essere in grado di
+gestire la perdita o il rimescolamento dei dati, se è a pacchetti questi
+dovranno essere opportunamente trattati, se è uno a molti occorrerà tener
+conto della eventuale unidirezionalità della stessa, ecc.
+
+\index{socket!definizione|)}
-\section{La creazione di un socket}
+\subsection{La creazione di un socket}
\label{sec:sock_creation}
Come accennato l'interfaccia dei socket è estremamente flessibile e permette
in questa sezione vedremo come è possibile creare un socket e come specificare
il tipo di comunicazione che esso deve utilizzare.
-\subsection{La funzione \func{socket}}
-\label{sec:sock_socket}
-
La creazione di un socket avviene attraverso l'uso della funzione di sistema
\funcd{socket}; essa restituisce un \textit{file descriptor} (del tutto
analogo a quelli che si ottengono per i file di dati e le \textit{pipe},
Il campo \var{sin6\_addr} contiene l'indirizzo a 128 bit usato da IPv6,
espresso da un vettore di 16 byte. Infine il campo \var{sin6\_scope\_id} è un
campo introdotto in Linux con il kernel 2.4, per gestire alcune operazioni
-riguardanti il \itindex{multicast} \textit{multicasting}. Si noti infine che
+riguardanti il \textit{multicasting}. Si noti infine che
\struct{sockaddr\_in6} ha una dimensione maggiore della struttura
\struct{sockaddr} generica di fig.~\ref{fig:sock_sa_gen_struct}, quindi
occorre stare attenti a non avere fatto assunzioni riguardo alla possibilità
senso solo in questo caso. In particolare \var{sll\_pkttype} può assumere i
seguenti valori: \const{PACKET\_HOST} per un pacchetto indirizzato alla
macchina ricevente, \const{PACKET\_BROADCAST} per un pacchetto di
-\itindex{broadcast} \textit{broadcast}, \const{PACKET\_MULTICAST} per un
-pacchetto inviato ad un indirizzo fisico di \itindex{multicast}
-\textit{multicast}, \const{PACKET\_OTHERHOST} per un pacchetto inviato ad
-un'altra stazione (e ricevuto su un'interfaccia in \index{modo~promiscuo} modo
-promiscuo), \const{PACKET\_OUTGOING} per un pacchetto originato dalla propria
-macchina che torna indietro sul socket.
+\textit{broadcast}, \const{PACKET\_MULTICAST} per un pacchetto inviato ad un
+indirizzo fisico di \textit{multicast}, \const{PACKET\_OTHERHOST} per un
+pacchetto inviato ad un'altra stazione (e ricevuto su un'interfaccia in
+\index{modo~promiscuo} modo promiscuo), \const{PACKET\_OUTGOING} per un
+pacchetto originato dalla propria macchina che torna indietro sul socket.
Si tenga presente infine che in fase di ricezione, anche se si richiede il
\textit{dotted decimal} per IPv4 e quello descritto in
sez.~\ref{sec:IP_ipv6_notation} per IPv6.
-\index{socket!definizione|)}
-