%% othersock.tex
%%
-%% Copyright (C) 2004-2011 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2004-2015 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",
server o viceversa, secondo lo schema illustrato in
fig.~\ref{fig:UDP_packet-exchange}.
-\begin{figure}[htb]
- \centering
- \includegraphics[width=10cm]{img/udp_connection}
+\begin{figure}[!htb]
+ \centering \includegraphics[width=10cm]{img/udp_connection}
\caption{Lo schema di interscambio dei pacchetti per una comunicazione via
UDP.}
\label{fig:UDP_packet-exchange}
Come illustrato in fig.~\ref{fig:UDP_packet-exchange} la struttura generica di
un server UDP prevede, una volta creato il socket, la chiamata a \func{bind}
-per mettersi in ascolto dei dati. Questa è l'unica parte comune con un server
-TCP: non essendovi il concetto di connessione le funzioni \func{listen} ed
+per mettersi in ascolto dei dati, questa è l'unica parte comune con un server
+TCP. Non essendovi il concetto di connessione le funzioni \func{listen} ed
\func{accept} non sono mai utilizzate nel caso di server UDP. La ricezione dei
dati dal client avviene attraverso la funzione \func{recvfrom}, mentre una
eventuale risposta sarà inviata con la funzione \func{sendto}.
\item[\errcode{EOPNOTSUPP}] il valore di \param{flag} non è appropriato per
il tipo di socket usato.
\item[\errcode{EPIPE}] il capo locale della connessione è stato chiuso, si
- riceverà anche un segnale di \const{SIGPIPE}, a meno di non aver impostato
+ riceverà anche un segnale di \signal{SIGPIPE}, a meno di non aver impostato
\const{MSG\_NOSIGNAL} in \param{flags}.
\end{errlist}
ed anche \errval{EFAULT}, \errval{EBADF}, \errval{EINVAL}, \errval{EINTR},
Finora abbiamo tralasciato l'argomento \param{flags}; questo è un intero usato
come maschera binaria che permette di impostare una serie di modalità di
funzionamento della comunicazione attraverso il socket (come
-\const{MSG\_NOSIGNAL} che impedisce l'invio del segnale \const{SIGPIPE} quando
+\const{MSG\_NOSIGNAL} che impedisce l'invio del segnale \signal{SIGPIPE} quando
si è già chiuso il capo locale della connessione). Torneremo con maggiori
dettagli sul significato di questo argomento in sez.~\ref{sec:net_sendmsg},
dove tratteremo le funzioni avanzate dei socket, per il momento ci si può
\funcdecl{ssize\_t recvfrom(int sockfd, const void *buf, size\_t len, int
flags, const struct sockaddr *from, socklen\_t *fromlen)}
- Riceve un messaggio ad un socket.
+ Riceve un messaggio da un socket.
\bodydesc{La funzione restituisce il numero di byte ricevuti in caso di
successo e -1 in caso di errore; nel qual caso \var{errno} assumerà il
UDP al server (di contenuto non specificato), il quale risponderà a inviando a
sua volta un pacchetto UDP contenente la data.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15.6cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UDP_daytime.c}
\end{minipage}
\normalsize
pacchetto di richiesta ed inviare in risposta un pacchetto contenente una
stringa con la data corrente.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15.6cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UDP_daytimed.c}
\end{minipage}
\normalsize
possono avere proviamo allora con un servizio leggermente più complesso come
\textit{echo}.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15.6cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UDP_echo_first.c}
\end{minipage}
\normalsize
chiamata (\texttt{\small 28}) alla funzione \func{ClientEcho} che stavolta
però prende un argomento in più, che è l'indirizzo del socket.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15.6cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UDP_ClientEcho_first.c}
\end{minipage}
\normalsize
riscrivere il nostro client per il servizio \textit{echo} con le modifiche
illustrate in fig.~\ref{fig:UDP_echo_conn_cli}.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15.6cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UDP_echo.c}
\end{minipage}
\normalsize
\func{write} come illustrato dal nuovo codice riportato in
fig.~\ref{fig:UDP_echo_conn_echo_client}.
-\begin{figure}[!htb]
+\begin{figure}[!htbp]
\footnotesize \centering
- \begin{minipage}[c]{15.6cm}
+ \begin{minipage}[c]{\codesamplewidth}
\includecodesample{listati/UDP_ClientEcho.c}
\end{minipage}
\normalsize