(PECL ev >= 0.2.0)
Los observadores EvIo verifican si un descriptor de fichero (o un socket, o un flujo que pueda ser convertido en descriptor de fichero numérico) está disponible para lectura o escritura en cada iteración del bucle de eventos, o, más precisamente, cuando la lectura no va a bloquear el proceso, y cuando la escritura va a permitir escribir datos. Este comportamiento se denomina nivel de activación porque los eventos se mantienen mientras persista la condición. Para detener la recepción de eventos, simplemente se debe detener el observador.
El número de eventos de lectura/escritura de los observadores por
fd
es ilimitado. Establecer todos los
descriptores de ficheros en modo no bloqueante es generalmente
una buena idea (aunque no es obligatorio).
Otra cosa a tener en cuenta es que es muy fácil recibir
notificaciones falsas de sistema listo para lectura, es decir, la función
de retrollamada puede ser llamada con Ev::READ
pero una subsiguiente read() puede bloquearse
debido a que no hay datos. Es muy simple
encontrarse en esta situación. Por lo tanto, se recomienda siempre
utilizar I/O no bloqueante: una read()
adicional que devuelva EAGAIN
(o similar)
es preferible a un programa que espera la llegada de datos.
Si por alguna razón no es posible ejecutar el
fd
en modo no bloqueante, entonces, por separado,
se debe volver a verificar si el descriptor de fichero está realmente listo.
Algunos usuarios utilizan además SIGALRM
y un temporizador de intervalo, solo para asegurarse de que no haya
bloqueos infinitos.
Se recomienda siempre utilizar el modo no bloqueante.
$fd
,$events
,$callback
,$data
= ?,$priority
= ?$fd
,$events
,$callback
,$data
= null
,$priority
= 0