X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=socket.tex;h=74ec560d04db0985fec42564f7ef6015afe130e1;hp=820ae96df423ad23e5780d2c08480ca87efef8aa;hb=ee41e8b34dd560d230966160fb3eb748defc3e46;hpb=089db6406b8f3c725a5830457fd591f9c86eb986 diff --git a/socket.tex b/socket.tex index 820ae96..74ec560 100644 --- a/socket.tex +++ b/socket.tex @@ -1,6 +1,6 @@ %% socket.tex %% -%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2009 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", @@ -8,6 +8,7 @@ %% license is included in the section entitled "GNU Free Documentation %% License". %% + \chapter{Introduzione ai socket} \label{cha:socket_intro} @@ -125,15 +126,15 @@ il suo prototipo -1 in caso di fallimento, nel qual caso la variabile \var{errno} assumerà i valori: \begin{errlist} - \item[\errcode{EPROTONOSUPPORT}] Il tipo di socket o il protocollo scelto non - sono supportati nel dominio. - \item[\errcode{ENFILE}] Il kernel non ha memoria sufficiente a creare una + \item[\errcode{EPROTONOSUPPORT}] il tipo di socket o il protocollo scelto + non sono supportati nel dominio. + \item[\errcode{ENFILE}] il kernel non ha memoria sufficiente a creare una nuova struttura per il socket. - \item[\errcode{EMFILE}] Si è ecceduta la tabella dei file. - \item[\errcode{EACCES}] Non si hanno privilegi per creare un socket nel + \item[\errcode{EMFILE}] si è ecceduta la tabella dei file. + \item[\errcode{EACCES}] non si hanno privilegi per creare un socket nel dominio o con il protocollo specificato. - \item[\errcode{EINVAL}] Protocollo sconosciuto o dominio non disponibile. - \item[\errcode{ENOBUFS}] Non c'è sufficiente memoria per creare il socket + \item[\errcode{EINVAL}] protocollo sconosciuto o dominio non disponibile. + \item[\errcode{ENOBUFS}] non c'è sufficiente memoria per creare il socket (può essere anche \errval{ENOMEM}). \end{errlist} inoltre, a seconda del protocollo usato, potranno essere generati altri @@ -149,9 +150,10 @@ implicitamente dal tipo di socket, per cui di norma questo valore viene messo a zero (con l'eccezione dei \textit{raw socket}). Si noti che la creazione del socket si limita ad allocare le opportune -strutture nel kernel (sostanzialmente una voce nella \textit{file table}) e -non comporta nulla riguardo all'indicazione degli indirizzi remoti o locali -attraverso i quali si vuole effettuare la comunicazione. +strutture nel kernel (sostanzialmente una voce nella \itindex{file~table} +\textit{file table}) e non comporta nulla riguardo all'indicazione degli +indirizzi remoti o locali attraverso i quali si vuole effettuare la +comunicazione. \subsection{Il dominio dei socket} \label{sec:sock_domain} @@ -217,6 +219,8 @@ i capi della comunicazione. \label{tab:net_pf_names} \end{table} +% TODO aggiungere PF_CAN, vedi http://lwn.net/Articles/253425, dal 2.6.25 + L'idea alla base della distinzione fra questi due insiemi di costanti era che una famiglia di protocolli potesse supportare vari tipi di indirizzi, per cui il prefisso \texttt{PF\_} si sarebbe dovuto usare nella creazione dei socket e @@ -242,7 +246,7 @@ Si tenga presente che non tutte le famiglie di protocolli sono utilizzabili dall'utente generico, ad esempio in generale tutti i socket di tipo \const{SOCK\_RAW} possono essere creati solo da processi che hanno i privilegi di amministratore (cioè con user-ID effettivo uguale a zero) o dotati della -\itindex{capabilities}\textit{capability} \const{CAP\_NET\_RAW}. +\itindex{capabilities} \textit{capability} \const{CAP\_NET\_RAW}. \subsection{Il tipo di socket} @@ -467,7 +471,7 @@ altrimenti si avr specifica il \textsl{numero di porta}. I numeri di porta sotto il 1024 sono chiamati \textsl{riservati} in quanto utilizzati da servizi standard e soltanto processi con i privilegi di amministratore (con user-ID effettivo -uguale a zero) o con la \itindex{capabilities}\textit{capability} +uguale a zero) o con la \itindex{capabilities} \textit{capability} \const{CAP\_NET\_BIND\_SERVICE} possono usare la funzione \func{bind} (che vedremo in sez.~\ref{sec:TCP_func_bind}) su queste porte. @@ -551,7 +555,7 @@ il campo \var{sun\_path} deve specificare un indirizzo. Questo ha due forme; può essere un file (di tipo socket) nel filesystem o una stringa univoca (mantenuta in uno spazio di nomi astratto). Nel primo caso l'indirizzo viene specificato come una stringa (terminata da uno zero) corrispondente al -\itindex{pathname}\textit{pathname} del file; nel secondo invece +\itindex{pathname} \textit{pathname} del file; nel secondo invece \var{sun\_path} inizia con uno zero e vengono usati come nome i restanti byte come stringa, senza terminazione. @@ -615,7 +619,7 @@ implementare dei protocolli in user space, agendo direttamente sul livello fisico. In genere comunque si preferisce usare la libreria \file{pcap},\footnote{la libreria è mantenuta insieme al comando \cmd{tcpdump}, informazioni e documentazione si possono trovare sul sito del - progetto \href{http://www.tcpdump.org/}{\texttt{http://www.tcpdump.org/}}.} + progetto \href{http://www.tcpdump.org/}{\textsf{http://www.tcpdump.org/}}.} che assicura la portabilità su altre piattaforme, anche se con funzionalità ridotte. @@ -647,7 +651,7 @@ speciale \const{ETH\_P\_ALL} passeranno sul \textit{packet socket} tutti i pacchetti, qualunque sia il loro protocollo di collegamento. Ovviamente l'uso di questi socket è una operazione privilegiata e può essere effettuati solo da un processo con i privilegi di amministratore (user-ID effettivo nullo) o con -la \itindex{capabilities}\textit{capability} \const{CAP\_NET\_RAW}. +la \itindex{capabilities} \textit{capability} \const{CAP\_NET\_RAW}. Una volta aperto un \textit{packet socket}, tutti i pacchetti del protocollo specificato passeranno attraverso di esso, qualunque sia l'interfaccia da cui @@ -775,7 +779,7 @@ realt Per capire meglio il problema si consideri un intero a 32 bit scritto in una locazione di memoria posta ad un certo indirizzo. Come illustrato in -fig.~\ref{fig:sock_endianess} i singoli bit possono essere disposti un memoria +fig.~\ref{fig:sock_endianess} i singoli bit possono essere disposti in memoria in due modi: a partire dal più significativo o a partire dal meno significativo. Così nel primo caso si troverà il byte che contiene i bit più significativi all'indirizzo menzionato e il byte con i bit meno significativi @@ -856,7 +860,7 @@ il valore del confronto delle due variabili. \subsection{Le funzioni per il riordinamento} \label{sec:sock_func_ord} -Il problema connesso all'endianess\itindex{endianess} è che quando si passano +Il problema connesso \itindex{endianess} all'endianess è che quando si passano dei dati da un tipo di architettura all'altra i dati vengono interpretati in maniera diversa, e ad esempio nel caso dell'intero a 16 bit ci si ritroverà con i due byte in cui è suddiviso scambiati di posto. Per questo motivo si @@ -952,7 +956,7 @@ L'ultima funzione, \func{inet\_ntoa}, converte il valore a 32 bit dell'indirizzo (espresso in \textit{network order}) restituendo il puntatore alla stringa che contiene l'espressione in formato dotted decimal. Si deve tenere presente che la stringa risiede in memoria statica, per cui questa -funzione non è rientrante. +funzione non è \index{funzioni!rientranti} rientrante. \subsection{Le funzioni \func{inet\_pton} e \func{inet\_ntop}} @@ -1024,12 +1028,6 @@ sez.~\ref{sec:IP_ipv6_notation} per IPv6. \index{socket!definizione|)} - -%%% Local Variables: -%%% 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 @@ -1053,4 +1051,11 @@ sez.~\ref{sec:IP_ipv6_notation} per IPv6. % 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 +% LocalWords: numeric EAFNOSUPPORT size ENOSPC ENOAFSUPPORT ADDRSTRLEN ROUTE +% LocalWords: of tcpdump page + + +%%% Local Variables: +%%% mode: latex +%%% TeX-master: "gapil" +%%% End: