summaryrefslogtreecommitdiff
path: root/accel-dp/event.h
blob: fefb099119883d9308eab6090e9379a2712d4375 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#ifndef __EVENT_H__
#define __EVENT_H__

#include <sys/epoll.h>
#include "list.h"

#define EVENT_READ 1
#define EVENT_WRITE 2

struct event_handler {
	struct list_head entry;
	struct list_head entry2;
	struct timespec timeout_ts;
	int fd;
	struct epoll_event epoll_event;
	int (*read)(struct event_handler *);
	int (*write)(struct event_handler *);
	void (*timeout)(struct event_handler *);
	void (*close)(struct event_handler *);
};

struct event_deferred {
	struct event_deferred *next;
	void (*fn)(struct event_deferred *);
};

int event_init(void);
void event_loop();
void event_process(int timeout);
void event_terminate(void);
int event_add_handler(struct event_handler *h, int mode);
int event_enable_handler(struct event_handler *h, int mode);
int event_disable_handler(struct event_handler *h, int mode);
int event_mod_handler(struct event_handler *h, int mode);
int event_del_handler(struct event_handler *h, int close);
void event_set_timeout(struct event_handler *h, int msec);
void event_add_deferred(struct event_deferred *d);

static inline void event_init_handler(struct event_handler *h)
{
	h->entry.next = NULL;
}

#endif