+\begin{figure}[!htb]
+ \footnotesize \centering
+ \begin{minipage}[c]{15cm}
+ \includestruct{listati/epoll_event.h}
+ \end{minipage}
+ \normalsize
+ \caption{La struttura \structd{epoll\_event}, che consente di specificare
+ gli eventi associati ad un file descriptor controllato con
+ \textit{epoll}.}
+ \label{fig:epoll_event}
+\end{figure}
+
+La struttura \struct{epoll\_event} è l'analoga di \struct{pollfd} e come
+quest'ultima serve sia in ingresso (quando usata con \func{epoll\_ctl}) ad
+impostare quali eventi osservare, che in uscita (nei risultati ottenuti con
+\func{epoll\_wait}) per ricevere le notifiche degli eventi avvenuti. La sua
+definizione è riportata in fig.~\ref{fig:epoll_event}; il primo campo,
+\var{events}, è una maschera binaria in cui ciascun bit corrisponde o ad un
+tipo di evento, o una modalità di notifica. Detto campo deve essere
+specificato come OR aritmetico delle costanti riportate in
+tab.~\ref{tab:epoll_events}. Il secondo campo, \var{data}, serve ad indicare a
+quale file descriptor si intende fare riferimento, ed in astratto può
+contenere un valore qualsiasi che permetta di identificarlo, di norma comunque
+si usa come valore lo stesso \param{fd}.
+
+\begin{table}[htb]
+ \centering
+ \footnotesize
+ \begin{tabular}[c]{|l|p{8cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Significato} \\
+ \hline
+ \hline
+ \const{EPOLLIN} & Il file è pronto per le operazioni di lettura
+ (analogo di \const{POLLIN}).\\
+ \const{EPOLLOUT} & Il file è pronto per le operazioni di scrittura
+ (analogo di \const{POLLOUT}).\\
+ \const{EPOLLRDHUP} & l'altro capo di un socket di tipo
+ \const{SOCK\_STREAM} (vedi sez.~\ref{sec:sock_type})
+ ha chiuso la connessione o il capo in scrittura
+ della stessa (vedi sez.~\ref{sec:TCP_shutdown}).\\
+ \const{EPOLLPRI} & Ci sono \itindex{out-of-band} dati urgenti
+ disponibili in lettura (analogo di
+ \const{POLLPRI}); questa condizione viene comunque
+ riportata in uscita, e non è necessaria impostarla
+ in ingresso.\\
+ \const{EPOLLERR} & Si è verificata una condizione di errore
+ (analogo di \const{POLLERR}); questa condizione
+ viene comunque riportata in uscita, e non è
+ necessaria impostarla in ingresso.\\
+ \const{EPOLLHUP} & Si è verificata una condizione di hung-up.\\
+ \const{EPOLLET} & Imposta la notifica in modalità \textit{edge
+ triggered} per il file descriptor associato.\\
+ \const{EPOLLONESHOT}& Imposta la modalità \textit{one-shot} per il file
+ descriptor associato.\footnotemark\\
+ \hline
+ \end{tabular}
+ \caption{Valori del campo \param{events} di \struct{epoll\_event}.}
+ \label{tab:epoll_events}
+\end{table}
+
+\footnotetext{questa modalità è disponibile solo a partire dal kernel 2.6.2.}
+
+Le modalità di utilizzo di \textit{epoll} prevedano che si definisca un
+insieme di file descriptor da tenere sotto controllo su un \textit{epoll
+ descriptor} \param{epfd} con una serie di chiamate a
+\const{EPOLL\_CTL\_ADD}. Il default prevede la notifica in modalità
+\textit{level triggered}, a meno che sul file descriptor non si sia impostata
+la modalità \textit{edge triggered} con \const{EPOLLET}. Si tenga presente
+che è possibile tenere sotto osservazione uno stesso file descriptor su due
+\textit{epoll descriptor} diversi, ed entrambi riceveranno le notifiche, ma la
+pratica è sconsigliata.
+
+Una particolare modalità di notifica è quella impostata con
+\const{EPOLLONESHOT}: quando si è in modalità \textit{edge triggered} l'arrivo
+in rapida successione di dati in blocchi separati causa la generazione di una
+serie di eventi multipli; in questo caso si può utilizzare la modalità
+\textit{one-shot} in cui la notifica viene effettuata solo la prima volta,
+dopo di che il file descriptor osservato, pur restando nella lista di
+\param{epfd}, viene disattivato, e per essere riutilizzato dovrà essere
+riabilitato con una successiva chiamata con \const{EPOLL\_CTL\_MOD}.
+
+
+Infine qualora un file descriptor posto sotto osservazione dovesse essere
+chiuso, esso sarà automaticamente eliminato dall'insieme dei file descriptor
+osservati.