前一篇介紹了epoll的lt模式,lt模式注意epollout事件在資料全部寫成功後需要取消關注,
或者更改為epollin。
而這次epoll的et模式,要注意的是在讀和寫的過程中要在迴圈中寫完或者讀完所有資料,
確保不要丟掉一些資料。
因為epoll et模式只在兩種邊緣更改的時候觸發,對於讀事件只在核心緩衝區由空變為
非空通知一次使用者,對於寫事件,核心緩衝區只在由滿變為非滿的情況通知使用者一次。
下面是**
int main()
while(1)
if (nready == 0)
continue;
//大小不夠重新開闢
if ((size_t)nready == eventsize)
struct epoll_event * epoll_eventslist2 = (struct epoll_event *)malloc(sizeof(struct epoll_event) *
eventsize *2);
if(epoll_eventslist2)
for (int i = 0; i < nready; ++i)
if (epoll_eventslist[i].data.fd == listenfd)
;if(connfd < 0)
continue;
int ret = 0;
int total = 0;
std::string strtemp;
while(1)
}//endwhile(1)
cout << "end read" <
err_exit("read");
}//endif ret == -1
//連線斷開
if(ret == 0)
//end elif
else //寫事件
else
//end while
if(count == -1)
err_exit("write");
}if(count == 0)
}//end eles 寫事件}}
IO多路復用之epoll(二)
前一篇介紹了epoll的lt模式,lt模式注意epollout事件在資料全部寫成功後需要取消關注,或者更改為epollin。而這次epoll的et模式,要注意的是在讀和寫的過程中要在迴圈中寫完或者讀完所有資料,確保不要丟掉一些資料。因為epoll et模式只在兩種邊緣更改的時候觸發,對於讀事件只在核...
IO多路復用之epoll總結
epoll是在2.6核心中提出的,是之前的select和poll的增強版本。相對於select和poll來說,epoll更加靈活,沒有描述符限制。epoll使用乙個檔案描述符管理多個描述符,將使用者關係的檔案描述符的事件存放到核心的乙個事件表中,這樣在使用者空間和核心空間的copy只需一次。epol...
IO多路復用之epoll總結
1 基本知識 epoll是在2.6核心中提出的,是之前的select和poll的增強版本。相對於select和poll來說,epoll更加靈活,沒有描述符限制。epoll使用乙個檔案描述符管理多個描述符,將使用者關係的檔案描述符的事件存放到核心的乙個事件表中,這樣在使用者空間和核心空間的copy只需...