IO多路復用之epoll(二)

2022-01-23 15:58:45 字數 1137 閱讀 7308

前一篇介紹了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只需...