On Thu, Apr 12, 2012 at 2:53 AM, R.wen Huang <riwen...@gmail.com> wrote:
> 所以使用这些多路复用的时候,fd设置成阻塞或非阻塞都是一样的了?
>
当然不一样。
1. 当事件接口返回的是 stale event 的时候,阻塞模式下的读写将会阻塞。
2. 当事件接口使用的是 epoll ET 的时候,阻塞模式下的读写对于一些类型的 fd 是无法判断何时消耗完当前事件的(因为对于这些类型的
fd,依赖一直读写到 EAGAIN 返回)
3. 阻塞模式的 socket 发起 connect 的时候,无论如何都要阻塞的,因为这个操作是主动发起的,无事件可监听。
4. 如果对于一次读写事件,如果多读取或者多写一次,则对于阻塞模式的 socket 必会阻塞。
基于至少以上原因,阻塞模式的 socket 是很不安全的,有很大的阻塞的可能性(或者在 epoll ET 下有挂起的可能性)。
Regards,
-agentzh