三个函数的区别:
LT模式:在数据到达后,无论程序是没有接收,还是接收了但没有接收完,下一轮epoll_wait仍然会提醒应用程序该描述符上有数据,直到数据被接受完。(设置为阻塞和非阻塞都可以)
ET模式:在数据到达后,无论程序是没有接收,还是接收了但没有接收完,都只提醒一次,下一轮不再提醒应用程序该描述符上有数据。(只能设置为非阻塞)
为什么epoll的ET模式只能设置为非阻塞?
ET 模式是一种边沿触发模型,在它检测到有 I/O 事件时,通过 epoll_wait 调用会得到有事件通知的文件描述符,每于每一个被通知的文件描述符,如可读,则必须将该文件描述符一直读到空,让 errno 返回 EAGAIN 为止,否则下次的 epoll_wait 不会返回余下的数据,会丢掉事件。而如果你的文件描述符如果不是非阻塞的,那这个一直读或一直写势必会在最后一次阻塞。