-input in lettura, il secondo, \param{writefds} per verificare la possibilità
-di scrivere ed il terzo, \param{exceptfds}, per verificare l'esistenza di
-eccezioni. I corrispondenti valori dei \textit{file descriptor set} saranno
-modificati di conseguenza per mostrare quale dei file descriptor ha cambiato
-stato.
-
-
-
-
-
-Come accennato l'interfaccia di \func{select} è una estensione aggiunta BSD, e
-poi entrata a far parte di POSIX; allo stesso tempo System V aveva introdotto
-una interfaccia alternativa, basata sulla funzione \func{poll}, il cui
-prototipo è:
+effettuare una lettura, il secondo, \param{writefds}, per verificare la
+possibilità effettuare una scrittura ed il terzo, \param{exceptfds}, per
+verificare l'esistenza di condizioni eccezionali (come i messaggi urgenti su
+un \textit{socket}\index{socket}, vedi \secref{sec:xxx_urgent}).
+
+La funzione inoltre richiede anche di specificare, tramite l'argomento
+\param{n}, un valore massimo del numero dei file descriptor usati
+nell'insieme; si può usare il già citato \macro{FD\_SETSIZE}, oppure il numero
+più alto dei file descriptor usati nei tre insiemi, aumentato di uno.
+
+Infine l'argomento \param{timeout}, specifica un tempo massimo di
+attesa\footnote{il tempo è valutato come \textit{elapsed time}.} prima che la
+funzione ritorni; se settato a \macro{NULL} la funzione attende
+indefinitamente. Si può specificare anche un tempo nullo (cioè una \var{struct
+ timeval} con i campi settati a zero), qualora si voglia semplicemente
+controllare lo stato corrente dei file descriptor.
+
+La funzione restituisce il totale dei file descriptor pronti nei tre insiemi,
+il valore zero indica sempre che si è raggiunto un timeout. Ciascuno dei tre
+insiemi viene sovrascritto per indicare quale file descriptor è pronto per le
+operazioni ad esso relative, in modo da poterlo controllare con la macro
+\macro{FD\_ISSET}. In caso di errore la funzione restituisce -1 e gli insiemi
+non vengono toccati.
+
+In Linux \func{select} modifica anche il valore di \param{timeout}, settandolo
+al tempo restante; questo è utile quando la funzione viene interrotta da un
+segnale, in tal caso infatti si ha un errore di \macro{EINTR}, ed occorre
+rilanciare la funzione; in questo modo non è necessario ricalcolare tutte le
+volte il tempo rimanente.\footnote{questo però può causare problemi di
+ portabilità sia quando si trasporta codice scritto su Linux che legge questo
+ valore, sia quando si usano programmi scritti per altri sistemi che non
+ dispongono di questa caratteristica e ricalcolano \param{timeout} tutte le
+ volte. In genere la caratteristica è disponibile nei sistemi che derivano da
+ System V e non disponibile per quelli che derivano da BSD.}
+
+Come accennato l'interfaccia di \func{select} è una estensione di BSD; anche
+System V ha introdotto una sua interfaccia per getire l'\textit{I/O
+ multiplexing}, basata sulla funzione \func{poll}, il cui prototipo è: