这是从实际应用考虑的,阻塞跟ET
搭配起来会有问题的
只说读的情况:
ET
只有来数据时才会提醒,因此读数据时,你必须一次性地把缓冲区的数据读完(如果不读完,则缓冲区还残留着未读数据,然后对端又不继续发数据的话,ET
是不会再通知你,也就是说你将永远读不到残留数据)
为了一次性把缓冲区数据读完,你必须要写一个while
循环来read
,直到缓冲区里面数据被读完,
如果设成阻塞的话,你的程序就无法知道数据什么时候被读完,因为当数据读完时,会卡在while
里面的read
,一直在等数据,永远退不出while
如果设成非阻塞,当数据被读完,read就会返回,然后将errno
设成EAGAIN
并退出while
,这才是正确的逻辑
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…