#include <stdio.h>
#include <unistd.h>
#include <stdbool.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <main.h>
struct event_ext
{
int fd;
bool epolled;
uint32_t events;
void (*handler)(int fd,void *arg);
void *arg;
};
struct event_ext *epoll_event_create(int fd,uint32_t type,void (*handler)(int,void *), void *arg)
{
struct event_ext *e = calloc(1,sizeof(struct event_ext));
e->fd = fd;
e->events = type;
e->handler = handler;
e->arg = arg;
return e;
}
epoll_add_event int (the epfd int, struct event_ext * EV)
{
struct epoll_event EPV;
int OP;
. 2 // Initialization epoll_event (additional structure to the mount epoll_event)
epv.data.ptr = EV;
epv.events = EV-> Events ;
IF (EV-> epolled)
{
OP = EPOLL_CTL_MOD;
}
the else
{
OP = EPOLL_CTL_ADD;
EV-> = epolled to true;
}
//. 3 epoll_event added to the epoll.
epoll_ctl (the epfd, OP, EV-> FD, & EPV);
0 return;
}
int epoll_del_event(int epfd,struct event_ext *ev)
{
epoll_ctl(epfd,EPOLL_CTL_DEL,ev->fd,NULL);
ev->epolled = false;
return 0;
}
void epoll_event_free(struct event_ext * ev)
{
struct event_ext *e = ev;
free(e);
}
int main()
{
struct epoll_event events[512];
int fds;
int i;
uint32_t event;
struct event_ext *e;
srv_main = calloc(1,sizeof(struct server));
//1. 创建epoll
srv_main->epfd = epoll_create(512);
//2. 加入等待事件
srv_main->cam = cam_sys_init();
srv_main->srv = net_sys_init();
//3. 等待事件发生且处理
while (1)
{
fds = epoll_wait(srv_main->epfd,events,512,1000);
for(i=0;i<fds;i++)
{
event = events[i].events;
e = events[i].data.ptr;
if ((event&EPOLLIN)&&(e->events&EPOLLIN))
e->handler(e->fd,e->arg);
if ((event&EPOLLOUT)&&(e->events&EPOLLOUT))
e->handler(e->fd,e->arg);
if ((event&EPOLLERR)&&(e->events&EPOLLERR))
e->handler(e->fd,e->arg);
}
}
return -1;
}