Indicizzazione di out-of-band
[gapil.git] / socket.tex
index d7c461c0057166e31dc1e44eb35ff43a3c90f8fd..a98b34a7bd85a95605e8361c1f0af92eabb6180c 100644 (file)
@@ -1,6 +1,6 @@
 %% socket.tex
 %%
-%% Copyright (C) 2000-2005 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2006 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",
@@ -37,7 +37,7 @@ I \textit{socket}\footnote{una traduzione letterale potrebbe essere
   \textsl{presa}, ma essendo universalmente noti come \textit{socket}
   utilizzeremo sempre la parola inglese.} sono uno dei principali meccanismi
 di comunicazione utilizzato in ambito Unix, e li abbiamo brevemente incontrati
-in sez.~\ref{sec:ipc_socketpair}, fra i vari meccanismi di intercominazione
+in sez.~\ref{sec:ipc_socketpair}, fra i vari meccanismi di intercomunicazione
 fra processi. Un socket costituisce in sostanza un canale di comunicazione fra
 due processi su cui si possono leggere e scrivere dati analogo a quello di una
 pipe (vedi sez.~\ref{sec:ipc_pipes}) ma, a differenza di questa e degli altri
@@ -83,7 +83,7 @@ che viene chiamato un \textsl{flusso} (in inglese \textit{stream}), mentre
 altri invece li raggruppano in \textsl{pacchetti} (in inglese
 \textit{datagram}) che vengono inviati in blocchi separati.
 
-Un'altro esempio di stile concerne la possibilità che la comunicazione possa o
+Un altro esempio di stile concerne la possibilità che la comunicazione possa o
 meno perdere dati, possa o meno non rispettare l'ordine in cui essi non sono
 inviati, o inviare dei pacchetti più volte (come nel caso di TCP e UDP).
 
@@ -91,9 +91,9 @@ Un terzo esempio di stile di comunicazione concerne le modalit
 avviene, in certi casi essa può 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 \textit{broadcast} come per la
-radio, in cui i pacchetti vengono emessi su appositi ``\textsl{canali}'' dove
-chiunque si collega possa riceverli.
+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.
 
 É chiaro che ciascuno di questi stili comporta una modalità diversa di gestire
 la comunicazione, ad esempio se è inaffidabile occorrerà essere in grado di
@@ -205,10 +205,10 @@ i capi della comunicazione.
        \const{PF\_ECONET}   &19& Acorn Econet                  &    \\
        \const{PF\_ATMSVC}   &20& ATM SVCs                      &    \\
        \const{PF\_SNA}      &22& Linux SNA Project             &    \\
-       \const{PF\_IRDA}     &23& IRDA sockets                  &    \\
-       \const{PF\_PPPOX}    &24& PPPoX sockets                 &    \\
-       \const{PF\_WANPIPE}  &25& Wanpipe API sockets           &    \\
-       \const{PF\_BLUETOOTH}&31& Bluetooth sockets             &    \\
+       \const{PF\_IRDA}     &23& IRDA socket                   &    \\
+       \const{PF\_PPPOX}    &24& PPPoX socket                  &    \\
+       \const{PF\_WANPIPE}  &25& Wanpipe API socket            &    \\
+       \const{PF\_BLUETOOTH}&31& Bluetooth socket              &    \\
        \hline
   \end{tabular}
   \caption{Famiglie di protocolli definiti in Linux.}
@@ -259,7 +259,10 @@ seguenti costanti:
 \item[\const{SOCK\_STREAM}] Provvede un canale di trasmissione dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati vengono ricevuti e trasmessi come un flusso continuo di
-  byte (da cui il nome \textit{stream}).
+  byte (da cui il nome \textit{stream}) e possono essere letti in blocchi di
+  dimensioni qualunque. Può supportare la trasmissione dei cosiddetti dati
+  \itindex{out-of-band} \textit{out-of-band} (vedi
+  sez.~\ref{sec:TCP_urgent_data}).
 \item[\const{SOCK\_DGRAM}] Viene usato per trasmettere pacchetti di dati
   (\textit{datagram}) di lunghezza massima prefissata, indirizzati
   singolarmente. Non esiste una connessione e la trasmissione è effettuata in
@@ -267,8 +270,8 @@ seguenti costanti:
 \item[\const{SOCK\_SEQPACKET}] Provvede un canale di trasmissione di dati
   bidirezionale, sequenziale e affidabile. Opera su una connessione con un
   altro socket. I dati possono vengono trasmessi per pacchetti di dimensione
-  massima fissata, ed devono essere letti integralmente da ciascuna
-  chiamata a \func{read}.
+  massima fissata, e devono essere letti integralmente da ciascuna chiamata a
+  \func{read}.
 \item[\const{SOCK\_RAW}] Provvede l'accesso a basso livello ai protocolli di
   rete e alle varie interfacce. I normali programmi di comunicazione non
   devono usarlo, è riservato all'uso di sistema.
@@ -466,7 +469,7 @@ come struttura (un resto di una implementazione precedente in cui questa era
 una \direct{union} usata per accedere alle diverse classi di indirizzi) che
 direttamente come intero. In \file{netinet/in.h} vengono definite anche alcune
 costanti che identificano alcuni indirizzi speciali, riportati in
-tab.~\ref{tab:TCP_ipv4_addr}, che reincontreremo più avanti.
+tab.~\ref{tab:TCP_ipv4_addr}, che rincontreremo più avanti.
 
 Infine occorre sottolineare che sia gli indirizzi che i numeri di porta devono
 essere specificati in quello che viene chiamato \textit{network order}, cioè
@@ -506,11 +509,11 @@ il loro uso 
 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 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à di contenere i dati nelle
-dimensioni di quest'ultima.
+riguardanti il \itindex{multicast} \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à
+di contenere i dati nelle dimensioni di quest'ultima.
 
 
 \subsection{La struttura degli indirizzi locali}
@@ -686,19 +689,20 @@ Il campo \var{sll\_hatype} indica il tipo ARP, come definito in
 \file{linux/if\_arp.h}, mentre il campo \var{sll\_pkttype} indica il tipo di
 pacchetto; entrambi vengono impostati alla ricezione di un pacchetto ed han
 senso solo in questo caso. In particolare \var{sll\_pkttype} può assumere i
-seguenti valori: \var{PACKET\_HOST} per un pacchetto indirizzato alla macchina
-ricevente, \var{PACKET\_BROADCAST} per un pacchetto di broadcast,
-\var{PACKET\_MULTICAST} per un pacchetto inviato ad un indirizzo fisico di
-multicast, \var{PACKET\_OTHERHOST} per un pacchetto inviato ad un'altra
-stazione (e ricevuto su un'interfaccia in modo promiscuo),
-\var{PACKET\_OUTGOING} per un pacchetto originato dalla propria macchina che
+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 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
-troncamento del pacchetto, le funzioni \func{recvmsg}, \func{recv} e
-\func{recvfrom} restituiranno comunque la lunghezza effettiva del pacchetto
-così come arrivato sulla linea.
 
+Si tenga presente infine che in fase di ricezione, anche se si richiede il
+troncamento del pacchetto, le funzioni \func{recv}, \func{recvfrom} e
+\func{recvmsg} (vedi sez.~\ref{sec:net_sendmsg}) restituiranno comunque la
+lunghezza effettiva del pacchetto così come arrivato sulla linea.
 
 %% \subsection{La struttura degli indirizzi DECnet}
 %% \label{sec:sock_sa_decnet}
@@ -834,7 +838,7 @@ accedere al contenuto della prima variabile, ed infine calcola (\texttt{\small
   11}) il valore della seconda assumendo che il primo byte sia quello meno
 significativo (cioè, per quanto visto in fig.~\ref{fig:sock_endianess}, che sia
 \textit{little endian}). Infine la funzione restituisce (\texttt{\small 12})
-il valore del confonto delle due variabili. 
+il valore del confronto delle due variabili. 
 \itindend{endianess}
 
 
@@ -1015,3 +1019,28 @@ sez.~\ref{sec:IP_ipv6_notation} per IPv6.
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
+
+% LocalWords:  socket sez cap BSD SVr XTI Transport Interface TCP stream UDP PF
+% LocalWords:  datagram broadcast descriptor sys int domain type protocol errno
+% LocalWords:  EPROTONOSUPPORT ENFILE kernel EMFILE EACCES EINVAL ENOBUFS raw
+% LocalWords:  ENOMEM table family AF address name glibc UNSPEC LOCAL Local IPv
+% LocalWords:  communication INET protocols ip AX Amateur IPX Novell APPLETALK
+% LocalWords:  Appletalk ddp NETROM NetROM Multiprotocol ATMPVC Access to ATM
+% LocalWords:  PVCs ITU ipv PLP DECnet Reserved for project NETBEUI LLC KEY key
+% LocalWords:  SECURITY Security callback NETLINK interface device netlink Low
+% LocalWords:  PACKET level packet ASH Ash ECONET Acorn Econet ATMSVC SVCs SNA
+% LocalWords:  IRDA PPPOX PPPoX WANPIPE Wanpipe BLUETOOTH Bluetooth POSIX bits
+% LocalWords:  dall'header tab SOCK capabilities capability styles DGRAM read
+% LocalWords:  SEQPACKET RDM sockaddr reference void fig Header uint socklen at
+% LocalWords:  addr netinet port len Stevens unsigned short casting nell'header
+% LocalWords:  BIND SERVICE bind union order big endian flowinfo dell'header ll
+% LocalWords:  multicast multicasting local socketpair sun path filesystem AARP
+% LocalWords:  pathname AppleTalk netatalk personal Apple ATPROTO atalk sat if
+% LocalWords:  ANYNET node ANYNODE ATADDR BCAST pcap IEEE linux ether ETH ALL
+% LocalWords:  sll ifindex ethernet halen MAC hatype ARP arp pkttype HOST recv
+% LocalWords:  OTHERHOST OUTGOING recvfrom recvmsg endianess little endtest Mac
+% LocalWords:  Intel Digital Motorola IBM VME PowerPC l'Intel xABCD ptr htonl
+% LocalWords:  all'endianess htons ntohl ntohs long hostlong hostshort netlong
+% LocalWords:  sort netshort host inet aton ntoa dotted decimal const char src
+% LocalWords:  strptr struct dest addrptr INADDR NULL pton ntop presentation af
+% LocalWords:  numeric EAFNOSUPPORT size ENOSPC ENOAFSUPPORT ADDRSTRLEN