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 ...