anchor.diff:  
   image::images/NonBlockingIO.png[]
   
  -* Para los tres primeros llamados a _recvfrom_ no hay datos y el kernel retorna de forma inmediata con el error _EWOULDBLOCK_.
  +* Para los tres primeros llamados a _recvfrom_ no hay datos y el kernel retorna de forma inmediata con el error _EAGAIN o EWOULDBLOCK_.
   * Para el cuarto llamado, el datagrama esta listo y es copiado en el buffer de la aplicación, ahora _recvfrom_ retorna de forma exitosa. Luego los datos son procesados.
   
   Cuando una aplicación se encuentra en un loop invocando alguna operación nonblocking sin obtener datos, esto se lo conoce como pooling (busy waiting).
  
positive.code: 
  === 5. Asynchronous I/O (AIO)
  
  image::images/AsynchronousIO.png[]
  
  == Comparison of the I/O Models
  
  image::images/ComparisonIO.png[]
negative.code: 
  === 4. Signal-Driven I/O Model (SIGIO)
  
  También podemos decirle al kernel que nos notifique por medio de la señal _SIGIO_ cuando el descriptor esta listo.
  
  image::images/SignalDrivenIO.png[]
  
  