X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=elemtcp.tex;fp=elemtcp.tex;h=4ad16ac30f6bf9a0be5fad975802d02111e8d871;hp=ca37790b5d43a3be3eea52e4cc431e53ec2ea26d;hb=be0b7b2add1b886196ad5e0847657f85025adfbf;hpb=8798f70c14efde35a211e1a63ff040e0b1b9afef diff --git a/elemtcp.tex b/elemtcp.tex index ca37790..4ad16ac 100644 --- a/elemtcp.tex +++ b/elemtcp.tex @@ -2052,8 +2052,16 @@ 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]