diff options
Diffstat (limited to 'data/lighttpd/lighttpd-1.4.53/src/fdevent_impl.h')
-rw-r--r-- | data/lighttpd/lighttpd-1.4.53/src/fdevent_impl.h | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/data/lighttpd/lighttpd-1.4.53/src/fdevent_impl.h b/data/lighttpd/lighttpd-1.4.53/src/fdevent_impl.h new file mode 100644 index 000000000..70e8d94f3 --- /dev/null +++ b/data/lighttpd/lighttpd-1.4.53/src/fdevent_impl.h @@ -0,0 +1,154 @@ +#ifndef INCLUDED_FDEVENT_IMPL_H +#define INCLUDED_FDEVENT_IMPL_H +#include "first.h" + +/* select event-system */ + +#if defined(HAVE_EPOLL_CTL) && defined(HAVE_SYS_EPOLL_H) +# define FDEVENT_USE_LINUX_EPOLL +struct epoll_event; /* declaration */ +#endif + +/* MacOS 10.3.x has poll.h under /usr/include/, all other unixes + * under /usr/include/sys/ */ +#if defined HAVE_POLL && (defined(HAVE_SYS_POLL_H) || defined(HAVE_POLL_H)) +# define FDEVENT_USE_POLL +struct pollfd; /* declaration */ +#endif + +#if defined HAVE_SELECT +# ifdef __WIN32 +# include <winsock2.h> +# endif +# define FDEVENT_USE_SELECT +# ifdef HAVE_SYS_SELECT_H +# include <sys/select.h> +# endif +#endif + +#if defined HAVE_SYS_DEVPOLL_H && defined(__sun) +# define FDEVENT_USE_SOLARIS_DEVPOLL +struct pollfd; /* declaration */ +#endif + +#if defined HAVE_PORT_H && defined HAVE_PORT_CREATE && defined(__sun) +# define FDEVENT_USE_SOLARIS_PORT +# include <port.h> +#endif + +#if defined HAVE_SYS_EVENT_H && defined HAVE_KQUEUE +# define FDEVENT_USE_FREEBSD_KQUEUE +struct kevent; /* declaration */ +#endif + +#if defined HAVE_LIBEV +# define FDEVENT_USE_LIBEV +struct ev_loop; /* declaration */ +#endif + +#include "base_decls.h" +#include "fdevent.h" /* (*fdevent_handler) */ + +typedef enum { + FDEVENT_HANDLER_UNSET, + FDEVENT_HANDLER_SELECT, + FDEVENT_HANDLER_POLL, + FDEVENT_HANDLER_LINUX_SYSEPOLL, + FDEVENT_HANDLER_SOLARIS_DEVPOLL, + FDEVENT_HANDLER_SOLARIS_PORT, + FDEVENT_HANDLER_FREEBSD_KQUEUE, + FDEVENT_HANDLER_LIBEV +} fdevent_handler_t; + +typedef struct _fdnode { + fdevent_handler handler; + void *ctx; + void *handler_ctx; + int fd; + int events; +} fdnode; + +/** + * array of unused fd's + * + */ + +#ifdef FDEVENT_USE_POLL +typedef struct { + int *ptr; + + size_t used; + size_t size; +} buffer_int; +#endif + +struct fdevents { + struct server *srv; + fdevent_handler_t type; + + fdnode **fdarray; + fdnode *pendclose; + size_t maxfds; + + #ifdef FDEVENT_USE_LINUX_EPOLL + int epoll_fd; + struct epoll_event *epoll_events; + #endif + #ifdef FDEVENT_USE_POLL + struct pollfd *pollfds; + + size_t size; + size_t used; + + buffer_int unused; + #endif + #ifdef FDEVENT_USE_SELECT + fd_set select_read; + fd_set select_write; + fd_set select_error; + + fd_set select_set_read; + fd_set select_set_write; + fd_set select_set_error; + + int select_max_fd; + #endif + #ifdef FDEVENT_USE_SOLARIS_DEVPOLL + int devpoll_fd; + struct pollfd *devpollfds; + #endif + #ifdef FDEVENT_USE_SOLARIS_PORT + port_event_t *port_events; + #endif + #ifdef FDEVENT_USE_FREEBSD_KQUEUE + int kq_fd; + struct kevent *kq_results; + #endif + #ifdef FDEVENT_USE_SOLARIS_PORT + int port_fd; + #endif + #ifdef FDEVENT_USE_LIBEV + struct ev_loop *libev_loop; + #endif + int (*reset)(struct fdevents *ev); + void (*free)(struct fdevents *ev); + + int (*event_set)(struct fdevents *ev, int fde_ndx, int fd, int events); + int (*event_del)(struct fdevents *ev, int fde_ndx, int fd); + int (*event_get_revent)(struct fdevents *ev, size_t ndx); + int (*event_get_fd)(struct fdevents *ev, size_t ndx); + + int (*event_next_fdndx)(struct fdevents *ev, int ndx); + + int (*poll)(struct fdevents *ev, int timeout_ms); +}; + +int fdevent_select_init(struct fdevents *ev); +int fdevent_poll_init(struct fdevents *ev); +int fdevent_linux_sysepoll_init(struct fdevents *ev); +int fdevent_solaris_devpoll_init(struct fdevents *ev); +int fdevent_solaris_port_init(struct fdevents *ev); +int fdevent_freebsd_kqueue_init(struct fdevents *ev); +int fdevent_libev_init(struct fdevents *ev); + +#endif |