X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=4cc999d34818865533ddcab50e8c2cadb0ca500f;hp=786ed5538de8addad5d3a9057a96ae17a20c83d0;hb=e323f7e103dac7a264d3ef335d23540719df2623;hpb=24c91128ce2eb232576d32311355d12e2a2bbf27 diff --git a/socket.tex b/socket.tex index 786ed55..4cc999d 100644 --- a/socket.tex +++ b/socket.tex @@ -1,12 +1,16 @@ \chapter{Socket} \label{cha:socket} -I \textit{socket} sono usati come meccanismo di comunicazione fra programmi -utilizzato in ambito unix (e non solo). La creazione di un socket restituisce -un file descriptor analogo a quello di una pipe ma a differenza di questa e -degli altri meccanismi esaminati nel capitolo \ref{cha:ipc} i socket non sono -limitati alla comunicazione fra processi che girano sulla stessa macchina ma -possono effettuare la comunicazione anche attraverso la rete. +Il \textit{socket} (traducibile liberamente come \textsl{manicotto}) è uno dei +principali meccanismi di comunicazione fra programmi utilizzato in ambito unix +(e non solo). Il socket costituisce in sostanza un canale di comunicazione fra +due processi su cui si possono leggere e scrivere dati. + +La creazione di un socket restituisce un file descriptor con un comportamento +analogo a quello di una pipe ma a differenza di questa e degli altri +meccanismi esaminati nel capitolo \ref{cha:ipc} i socket non sono limitati +alla comunicazione fra processi che girano sulla stessa macchina ma possono +effettuare la comunicazione anche attraverso la rete. I socket infatti sono la principale API (\textit{Application Program Interface}) usata nella programmazione di rete. La loro origine risale al @@ -14,9 +18,14 @@ I socket infatti sono la principale API (\textit{Application Program sostanzialmente la stessa con piccole modifiche negli anni successivi. Benché siano state sviluppate interfacce alternative, originate dai sistemi SYSV, come la XTI (\textit{X/Open Transport Interface}) nessuna ha mai raggiunto la -diffusione e la popolarità di quella dei socket (e tantomeno usabilità e +diffusione e la popolarità di quella dei socket (né tantomeno usabilità e flessibilità). +La flessibilità e la genericità dell'interfaccia inoltre ha consentito di +utilizzare i socket con i più disparati meccanismi di comunicazione, e non +solo con la suite dei protocolli TCP/IP, che sarà comunque quella di cui +tratteremo in maniera più estesa. + \section{Concetti base} \label{sec:sock_gen} @@ -61,11 +70,11 @@ tipi di socket, che vengono classificati raggruppandoli in quelli che si chiamano \textsl{domini} (\textit{domains}). La scelta di un dominio equivale in sostanza alla scelta di una famiglia di protocolli. Ciascun dominio ha un suo nome simbolico che convenzionalmente inizia con \texttt{PF\_} (da -\textit{protocol family}, altro nome con cui si indicano i domini). +\textit{Protocol Family}, altro nome con cui si indicano i domini). A ciascun tipo di dominio corrisponde un analogo nome simbolico che inizia per -\texttt{AF\_} (da \textit{Address Family}, nome che useremo anche noi; le man -pages di linux si riferiscono a questi anche come \textit{name space}, nome +\texttt{AF\_} da \textit{Address Family}, nome che useremo anche noi; le man +pages di linux si riferiscono a questi anche come \textit{name space}, (nome che però il manuale della glibc riserva ai domini) e che identifica il formato degli indirizzi usati in quel dominio. @@ -92,7 +101,6 @@ riportate in \ntab. \label{tab:net_pf_names} \end{table} - La scelta di un dominio non comporta però la scelta dello stile di comunicazione, questo infatti viene a dipendere dal protocollo che si andrà ad utilizzare fra quelli disponibili nella famiglia scelta. Le API permettono di