1 #ifndef _epoll_h_
2 #define _epoll_h_
3
4 #include "sys/queue.h"
5 #include <semaphore.h>
6 #include "msg.h"
7
8 #define MAX_EVENTS 500
9
10 int g_epollFd;
11
12 void *accept_thread_work(void *arg);
13 void *epoll_wait_thread_work(void *arg);
14 void *recv_data_thread_work(void *arg);
15 void *send_data_thread_work(void *arg);
16 void *logic_data_thread_work(void *arg);
17
18 struct myevent_s
19 {
20 int fd;
21 int status; // 1: in epoll wait list, 0 not in
22 msg_header header;
23 char recv_buff[256]; // recv data buffer
24 int recv_len;
25 char send_buff[256];//send data buffer
26 int send_len;
27 long last_active; // last active time
28 };
29
30 struct myevent_s g_Events[MAX_EVENTS+1]; // g_Events[MAX_EVENTS] is used by listen fd
31
32 //recv fd queue
33 struct QUEUE_RECV_FD_ITEM{
34 struct myevent_s* ev;
35 TAILQ_ENTRY(QUEUE_RECV_FD_ITEM) recv_fd_entries;
36 };
37
38 TAILQ_HEAD(,QUEUE_RECV_FD_ITEM) queue_recv_fd_header;
39
40 sem_t bin_sem_recv_fd_produce;
41 sem_t bin_sem_recv_fd_consume;
42
43 pthread_mutex_t queue_recv_fd_mutex;
44
45 //send fd queue
46 struct QUEUE_SEND_FD_ITEM{
47 struct myevent_s* ev;
48 TAILQ_ENTRY(QUEUE_SEND_FD_ITEM) send_fd_entries;
49 };
50
51 TAILQ_HEAD(,QUEUE_SEND_FD_ITEM) queue_send_fd_header;
52
53 sem_t bin_sem_send_fd_produce;
54 sem_t bin_sem_send_fd_consume;
55
56 pthread_mutex_t queue_send_fd_mutex;
57
58 //logic data buff
59 struct QUEUE_LOGIC_DATA_ITEM{
60 struct myevent_s* ev;
61 TAILQ_ENTRY(QUEUE_LOGIC_DATA_ITEM) logic_data_entries;
62 };
63
64 TAILQ_HEAD(,QUEUE_LOGIC_DATA_ITEM) queue_logic_data_header;
65
66 sem_t bin_sem_logic_data_produce;
67 sem_t bin_sem_logic_data_consume;
68
69 pthread_mutex_t queue_logic_data_mutex;
70
71 #endif
72