linux下的epoll函式

2021-08-20 22:16:58 字數 1805 閱讀 2379

epoll是tcp/ip網路程式設計的io服用方法之中一種優於select的函式,相比select,它有兩個優點:

1.無需編寫以監視狀態變化為目的的針對所有檔案描述符的迴圈語句。

2.呼叫對應於select函式的epoll_wait函式時無需每次傳遞監視物件資訊。

下面介紹epoll伺服器端實現中需要的三個函式,希望各位結合epoll函式的優點理解這些函式的功能。

epoll_create:建立儲存epoll檔案描述符的空間。

epoll_ctl:向空間註冊並登出檔案描述符。

epoll_wait:等待檔案描述符發生變化。

此外還需要一種結構體:epoll_event將發生變化的檔案描述符單獨集中到一起。

struct epoll_event

用法:

#include

#include

#include

#include

#include

#include

#include

void error_handling(char *message);

#define buff_size 100

#define epoll_size 30

int main(int argc, char *argv)

//呼叫socket函式建立套接字

sock_server = socket(pf_inet, sock_stream, 0);

if(-1 == sock_server)

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

addr_server.sin_family = af_inet;

addr_server.sin_addr.s_addr = htonl(inaddr_any);

addr_server.sin_port = htons(atoi(argv[1]));

//呼叫bind函式分配ip位址和埠號

if( -1 == bind( sock_server, (struct sockaddr*)&addr_server,

sizeof(addr_server)) )

//監聽埠的連線請求,連線請求等待佇列size為5

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

//epoll

epfd = epoll_create(epoll_size);

//epfd = epoll_create(0); //epoll_wait() error

ep_events = (struct epoll_event*)malloc(sizeof(struct epoll_event)*epoll_size);

event.events = epollin;//監視需用讀取資料事件

event.data.fd=sock_server;

epoll_ctl(epfd, epoll_ctl_add, sock_server, &event);

//while(1)

for(i=0; iif(ep_events[i].data.fd == sock_server)elseelse

}//end of if()

}//end of while

}//end of for

//斷開連線,關閉套接字

close(sock_server);

close(epfd);//

return0;}

void error_handling(char *message)

linux下select和epoll函式總結

多路io轉接伺服器實現的主旨思想是,不再由應用程式自己監視客戶端連線,取而代之由核心替應用程式監視檔案。select函式 int select int nfds,fd set readfds,fd set writefds,fd set exceptfds,struct timeval timeou...

Linux事件觸發 epoll相關函式

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

Linux下I O多路轉接之epoll

linux下i o多路轉接之epoll epoll i o event notification facility 在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。相比於select,epoll最大的好處在於它不...