X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=elemtcp.tex;h=1962eddd978795e35433e4d043acc23a0126823e;hp=90fcfb942272ba3a92f8f4cb2fbc8b5dba8a8391;hb=46e47e7eec85ac93132762fed65b84e4b7bcb047;hpb=3e8003adb1396080659ef5d34896eb2f573be6cd diff --git a/elemtcp.tex b/elemtcp.tex index 90fcfb9..1962edd 100644 --- a/elemtcp.tex +++ b/elemtcp.tex @@ -1711,7 +1711,7 @@ illustriamo immediatamente. \subsection{Il server: prima versione} \label{sec:TCPsimp_server_main} -La prima versione del server, contenuta nel file \file{TCP\_echod_first.c}, è +La prima versione del server, contenuta nel file \file{TCP\_echod\_first.c}, è riportata in \figref{fig:TCP_echo_server_first_code}. Come abbiamo fatto per il client anche il server è stato diviso in un corpo principale, costituito dalla funzione \code{main}, che è molto simile a quello visto nel precedente @@ -2052,8 +2052,17 @@ manifester La seconda soluzione è più invasiva e richiede di controllare tutte le volte l'errore restituito dalle varie system call, ripetendo la chiamata qualora -questo corrisponda ad \errcode{EINTR}, questo comporta una riscrittura -parziale del server secondo quanto mostrato in +questo corrisponda ad \errcode{EINTR}. Questa soluzione ha però il pregio +della portabilità, infatti lo standard POSIX dice che la funzionalità di +riavvio automatico delle system call, fornita da \const{SA\_RESTART}, è +opzionale, per cui non è detto che essa sia disponibile su qualunque sistema. +Inoltre in certi casi,\footnote{Stevens in \cite{UNP1} accenna che la maggior + parte degli Unix derivati da BSD non fanno ripartire \func{select}, ed + alcuni non fanno ripartire neanche \func{accept} e \func{recvfrom}; nel caso + di Linux questa è disponibile.} anche quando questa è presente, non è detto +possa essere usata con \func{accept}. La portabilità però viene al costo di +una riscrittura parziale del server, secondo quanto mostrato in +\figref{fig:TCP_echo_server_code}. \begin{figure}[!htbp] \footnotesize \centering @@ -2067,6 +2076,9 @@ parziale del server secondo quanto mostrato in \end{figure} + + + \section{I vari scenari critici} \label{sec:TCP_echo_critical}