1 /*
2  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
3  * Use is subject to license terms.
4  */
5 
6 /*
7  * Copyright (c) 2003-2004, Jouni Malinen <jkmaline@cc.hut.fi>
8  * Sun elects to license this software under the BSD license.
9  * See README for more details.
10  */
11 #ifndef __ELOOP_H
12 #define	__ELOOP_H
13 
14 #ifdef	__cplusplus
15 extern "C" {
16 #endif
17 
18 /* Magic number for eloop_cancel_timeout() */
19 #define	ELOOP_ALL_CTX		(void *) -1
20 #define	MAX_POLLFDS		32
21 
22 struct eloop_sock {
23 	int sock;
24 	void *eloop_data;
25 	void *user_data;
26 	void (*handler)(int, void *, void *);
27 };
28 
29 struct eloop_timeout {
30 	struct timeval time;
31 	void *eloop_data;
32 	void *user_data;
33 	void (*handler)(void *, void *);
34 	struct eloop_timeout *next;
35 };
36 
37 struct eloop_signal {
38 	int sig;
39 	void *user_data;
40 	void (*handler)(int, void *, void *);
41 	int signaled;
42 };
43 
44 struct eloop_data {
45 	void *user_data;
46 
47 	int max_sock, reader_count;
48 	struct eloop_sock *readers;
49 
50 	struct eloop_timeout *timeout;
51 
52 	int signal_count;
53 	struct eloop_signal *signals;
54 	int signaled;
55 
56 	int terminate;
57 };
58 
59 void eloop_init(void *);
60 
61 int eloop_register_read_sock(int,
62 	void (*handler)(int, void *, void *), void *, void *);
63 
64 void eloop_unregister_read_sock(int);
65 
66 int eloop_register_timeout(unsigned int, unsigned int,
67 	void (*handler)(void *, void *), void *, void *);
68 
69 void eloop_cancel_timeout(void (*handler)(void *, void *), void *, void *);
70 int eloop_register_signal(int, void (*handler)(int, void *, void *), void *);
71 
72 void eloop_run(void);
73 void eloop_terminate(void);
74 void eloop_destroy(void);
75 
76 #ifdef __cplusplus
77 }
78 #endif
79 
80 #endif /* __ELOOP_H */
81