epoll wait的LT 和 ET事件處理模式

2021-07-31 20:29:13 字數 1295 閱讀 9394

epoll對檔案描述操作有兩種預設方式:lt (lever trigger) and et(edge trigger) . lt模式是epoll_wait檢測到socket上有事件發生時,應用程式並不立即處理此事,epoll_wait還會下西再次通知應用程式,直到時間被處理.et模式下epoll_wait檢測到有事件發生時,通知應用程式,應用程式必須立即處理此事,因為後續的epoll_wait條用將不再響應此事,可見,et模式減少了同一事件被觸發的次數,

utili.h:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

ser.c

cli.c:

#include"./utili.h"

#define max_buffer_size 50

int main(int argc,char *argv)

const char * ip = argv[1];

int port = atoi(argv[2]);

struct sockaddr_in server_address;

bzero(&server_address,sizeof(server_address));

server_address.sin_family = af_inet;

server_address.sin_port = htons(port);

inet_pton(af_inet,ip,&server_address.sin_addr);

int sock = socket(af_inet,sock_stream,0);

assert(sock >= 0);

socklen_t len = sizeof(server_address);

int ret = connect(sock,(struct sockaddr*)&server_address,len);

assert(ret>=0);

char buf[max_buffer_size];

while(1)

ret = send(sock,buf,strlen(buf)+1,0);

}close(sock);

return 1;

}tianxintong@txt:~/git/lt_et$

ET和LT觸發方式

et模式只能通過一種方式 圖中紅線 所以et模式下能被喚醒的情況,lt模式下一定也能被喚醒。我們先來討論特殊情況 et模式 再來討論一般情況 lt模式 1 當buffer由不可讀狀態變為可讀的時候,即由空變為不空的時候。2 當有新資料到達時,即buffer中的待讀內容變多的時候。另外補充一點 3 當...

epoll的ET和LT模式

從man手冊中,得到et和lt的具體描述如下 epoll事件有兩種模型 edge triggered et level triggered lt 假如有這樣乙個例子 1.我們已經把乙個用來從管道中讀取資料的檔案控制代碼 rfd 新增到epoll描述符 2.這個時候從管道的另一端被寫入了2kb的資料 ...

LT模式 ET模式

lt 在資料到達之後,無論程式是沒有接收,還是接收了,但沒有接收完,下一輪epoll wait仍然會提醒應用程式該描述符上有資料,知道資料被接收完。同一事件僅僅被觸發一次 include include include include include include include include ...