Monitoring client main program

#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;
}

Guess you like

Origin www.cnblogs.com/free-1122/p/11916853.html