epoll使用例項

2021-09-30 13:27:24 字數 1922 閱讀 9520

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ip "127.0.0.1"

#define port 8888

#define maxsize 3

int main(int argc, char* ar**)

//防止埠復用

int reuse = 1 ;

setsockopt(sfd, sol_socket, so_reuseaddr, (void*)&reuse, sizeof(reuse));

//初始化socket

memset(&servaddr, 0, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(port) ;

servaddr.sin_addr.s_addr = inet_addr(ip);

//繫結套接字

if(bind(sfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1)

//監聽套接字

if(listen(sfd, 5) == -1)

int epfd = epoll_create(maxsize);

if(epfd == -1)

struct epoll_event ev;

ev.data.fd = sfd;

ev.events = epollin;

if(epoll_ctl(epfd, epoll_ctl_add, sfd, &ev) == -1)

int nfd;

struct epoll_event evlist[maxsize];

//evlist = &ev;

while(1)

for(int i = 0; i < nfd; ++i)

}else

if(readn == 0)

else}}

} }close(epfd);

close(sfd);

return 0;

}

epoll有邊界觸發和水平觸發兩種方式,select/poll只有一種

et會把進來的連線和資料一次給你,如果你一次沒有全部取完下次就不會給你了,lt只要這次沒有被取走下次還能取到,et觸發系統呼叫次數少

兩者的區別:

比如說你從某寶下單買了幾個東西,這幾個東西分別由n個快遞員分別給你送過來。在某一時刻,你開始等快遞。

對於select/poll,就是你在睡覺的時候,收到一條簡訊「你有快遞到了,取一下」,但不知道傳送方是誰(但一定是那n個快遞員中的某人/某幾個人給你發的),所以你必須挨個給那n個快遞員分別打個**,問他們,是不是我的快遞已經到了。

至於select/poll的區別,類似於你和快遞員都分別有兩個手機號,乙個移動,乙個聯通,其區別就在於你用哪個手機號給他們打的問題。

對於epoll,是你收到那條簡訊的時候,看到了傳送方的**號碼,你就可以直接給他打**,問他在哪兒,你好去去快遞。

還可以形象一點

select/poll

飯店服務員(核心)告訴飯店老闆(使用者程式):」現在有客人結賬「

但是這個服務員沒人明確告訴老闆,哪幾桌的客人結帳。老闆得自兒乙個乙個桌子去問:請問是你要結帳?

epoll

飯店服務員(核心)告訴飯店老闆(使用者程式):」1,2,5號客人結賬「

老闆就可以直接去1,2,5號桌收錢了

epoll使用例項說明

之前一直在講如何epoll如何好用,但是並沒有例項來演示epoll的使用,下面我們就看乙個伺服器端使用epoll監聽大量併發鏈結的例子。首先看一下epoll的幾個函式的介紹。1 epoll create函式 intepoll create intsize 2 epoll ctl函式 brief 該函...

epoll模型例項

epoll有兩種模式,edge triggered 簡稱et 和 level triggered 簡稱lt 在採用這兩種模式時要注意的是,如果採用et模式,那麼僅當狀態發生變化時才會通知,而採用lt模式類似於原來的 select poll操作,只要還有沒有處理的事件就會一直通知.以 來說明問題 首先...

epoll監聽檔案 epoll的使用

epoll i o event notification facility 在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不會隨著監聽fd數目的增長而降低效率。因為...