title: Why having to use non-blocking fd in a edge triggered epoll function?
body: <p>I read document abount edge triggered epoll function in web as follows:</p>
  
  <pre><code>1. The file descriptor that represents the read side of a pipe (rfd) is registered on the epoll instance.
  2. A pipe writer writes 2 kB of data on the write side of the pipe.
  3. A call to epoll_wait(2) is done that will return rfd as a ready file descriptor.
  4. The pipe reader reads 1 kB of data from rfd.
  5. A call to epoll_wait(2) is done.
  .......
  .......
  </code></pre>
  
  <p>The suggested way to use epoll as an edge-triggered (EPOLLET) interface is as follows:
       i) Use nonblocking file descriptors
      ii) Call epoll_wait for an event only after read(2) or write(2) return EAGAIN.</p>
  
  <p>I understood 2, but I couldn't know why nonblocking file descriptors are used.</p>
  
  <p>Could anyone explain the reason why nonblocking file descriptors are used? 
  Why is it all right to use blocking file descriptors in a level triggered epoll function?</p>