lt:在資料到達之後,無論程式是沒有接收,還是接收了,但沒有接收完,下一輪epoll_wait仍然會提醒應用程式該描述符上有資料,知道資料被接收完。
同一事件僅僅被觸發一次
#include#include#include#include#include#include#include#include#include#include#include#include#define size 100
void setnonblock(int fd)//將檔案描述符設定成非阻塞的
int create_socket()
void et(int fd,struct epoll_event event,int epollfd)
else if(event.events&epollin)
; int n=recv(fd,buff,5,0);
if(n<=0)
close(fd);
epoll_ctl(epollfd,epoll_ctl_del,fd,null);
}printf("%s",buff);
} printf("\n");
send(fd,"ok",2,0);
} else }
void deal_link(struct epoll_event events,int n,int sockfd,int epollfd)
{ int i=0;
for(;i注意:
epoll的ET模式和LT模式
查閱了一些資料,才知道常用的事件處理庫很多都選擇了 lt 模式,包括大家熟知的libevent和boost asio等,為什麼選擇lt呢?那就不得不從et的弊端的弊端說起。et模式下,當有事件發生時,系統只會通知你一次,也就是呼叫epoll wait 返回fd後,不管事件你處理與否,或者處理完全與否...
epoll的ET模式和LT模式
lt模式 epoll預設的工作模式。如果描述符上的事件就緒,但是它的資料沒有處理完,或者沒有處理 epoll下次會提醒他,讓他處理。換個說法,如果fd對應的緩衝區有資料,就會呼叫一次epoll wait,直到資料全部被處理完。et模式 如果描述符上的事件就緒,但是它的資料沒有處理完,或者沒有處理。e...
epoll的ET模式與LT模式
1 include wrap.h 2 include 3 include 4 define max event num 1024 5 define buff size 1067 void delfd int epollfd int fd 815 void addfd int epollfd int ...