X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=othersock.tex;h=6915f993142bc7a7fe14d3e29dd4e23a38634463;hp=648dc61be2799e0a7f228873751c7e40e5c92cdc;hb=b38fb9f5c8fb8360f7ac296baa8f4a0bdd692d1c;hpb=2354bea32f841874996df139e72aab07b29ba12e diff --git a/othersock.tex b/othersock.tex index 648dc61..6915f99 100644 --- a/othersock.tex +++ b/othersock.tex @@ -1,9 +1,9 @@ %% othersock.tex %% -%% Copyright (C) 2004 Simone Piccardi. Permission is granted to +%% Copyright (C) 2004-2005 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 "Prefazione", +%% Free Software Foundation; with the Invariant Sections being "Un preambolo", %% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the %% license is included in the section entitled "GNU Free Documentation %% License". @@ -54,10 +54,11 @@ utilizzando per il tipo di socket il valore \const{SOCK\_DGRAM}. 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 \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 fig.~\ref{fig:UDP_packet-exchange}. +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 +fig.~\ref{fig:UDP_packet-exchange}. \begin{figure}[htb] \centering @@ -265,8 +266,8 @@ l'indirizzo del mittente del pacchetto che 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 -\index{\textit{value~result~argument}}\textit{value result argument}). Se non -si è interessati a questa informazione, entrambi gli argomenti devono essere +\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}. Una differenza fondamentale del comportamento di queste funzioni rispetto alle @@ -322,9 +323,9 @@ Il passo successivo (\texttt{\small 13--21}) struttura degli indirizzi; prima (\texttt{\small 14}) si cancella completamente la stessa con \func{memset}, (\texttt{\small 15}) poi si imposta la famiglia dell'indirizzo ed infine (\texttt{\small 16} la porta. Infine -(\texttt{\small 18--21}) si ricava l'indirizzo del server da contattare dal -parametro passato a riga di comando, convertendolo con \func{inet\_pton}. Si -noti come questa sezione sia identica a quella del client TCP di +(\texttt{\small 18--21}) si ricava l'indirizzo del server da contattare +dall'argomento passato a riga di comando, convertendolo con \func{inet\_pton}. +Si noti come questa sezione sia identica a quella del client TCP di fig.~\ref{fig:TCP_daytime_client_code}, in quanto la determinazione dell'uso di UDP al posto di TCP è stata effettuata quando si è creato il socket. @@ -694,7 +695,7 @@ illustrate in fig.~\ref{fig:UDP_echo_conn_cli}. Ed in questo caso rispetto alla precedente versione, il solo cambiamento è l'utilizzo (\texttt{\small 17}) della funzione \func{connect} prima della chiamata alla funzione di gestione del protocollo, che a sua volta è stata -modificata eliminando l'indirizzo passato come parametro e sostituendo le +modificata eliminando l'indirizzo passato come argomento e sostituendo le chiamata a \func{sendto} e \func{recvfrom} con chiamate a \func{read} e \func{write} come illustrato dal nuovo codice riportato in fig.~\ref{fig:UDP_echo_conn_echo_client}. @@ -747,13 +748,19 @@ l'interfaccia di programmazione che serve ad utilizzarli resta sempre quella dei socket. +\section{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. + \section{Altri socket} \label{sec:socket_other} Tratteremo in questa sezione gli altri tipi particolari di socket supportati -da Linux, come i \textit{raw socket}, con i quali si possono \textsl{forgiare} -direttamente i pacchetti a tutti i livelli dello stack dei protocolli, o i +da Linux, come quelli relativi a particolare protocolli di trasmissione ed i socket \textit{netlink} che definiscono una interfaccia di comunicazione con il kernel.