%% socket.tex
%%
-%% Copyright (C) 2000-2006 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2007 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",
%% license is included in the section entitled "GNU Free Documentation
%% License".
%%
+
\chapter{Introduzione ai socket}
\label{cha:socket_intro}
-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
\label{tab:net_pf_names}
\end{table}
+% TODO aggiungere PF_CAN, vedi http://lwn.net/Articles/253425
+
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
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}
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.
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.
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.
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
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
\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
\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
% LocalWords: strptr struct dest addrptr INADDR NULL pton ntop presentation af
% LocalWords: numeric EAFNOSUPPORT size ENOSPC ENOAFSUPPORT ADDRSTRLEN ROUTE
% LocalWords: of tcpdump
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "gapil"
+%%% End: