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