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