GME
13
|
00001 /* Licensed to the Apache Software Foundation (ASF) under one or more 00002 * contributor license agreements. See the NOTICE file distributed with 00003 * this work for additional information regarding copyright ownership. 00004 * The ASF licenses this file to You under the Apache License, Version 2.0 00005 * (the "License"); you may not use this file except in compliance with 00006 * the License. You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #ifndef APR_POLL_H 00018 #define APR_POLL_H 00019 00023 #include "apr.h" 00024 #include "apr_pools.h" 00025 #include "apr_errno.h" 00026 #include "apr_inherit.h" 00027 #include "apr_file_io.h" 00028 #include "apr_network_io.h" 00029 00030 #if APR_HAVE_NETINET_IN_H 00031 #include <netinet/in.h> 00032 #endif 00033 00034 #ifdef __cplusplus 00035 extern "C" { 00036 #endif /* __cplusplus */ 00037 00047 #define APR_POLLIN 0x001 00048 #define APR_POLLPRI 0x002 00049 #define APR_POLLOUT 0x004 00050 #define APR_POLLERR 0x010 00051 #define APR_POLLHUP 0x020 00052 #define APR_POLLNVAL 0x040 00057 #define APR_POLLSET_THREADSAFE 0x001 00060 #define APR_POLLSET_NOCOPY 0x002 00063 #define APR_POLLSET_WAKEABLE 0x004 00066 #define APR_POLLSET_NODEFAULT 0x010 00074 typedef enum { 00075 APR_POLLSET_DEFAULT, 00076 APR_POLLSET_SELECT, 00077 APR_POLLSET_KQUEUE, 00078 APR_POLLSET_PORT, 00079 APR_POLLSET_EPOLL, 00080 APR_POLLSET_POLL 00081 } apr_pollset_method_e; 00082 00084 typedef enum { 00085 APR_NO_DESC, 00086 APR_POLL_SOCKET, 00087 APR_POLL_FILE, 00088 APR_POLL_LASTDESC 00089 } apr_datatype_e ; 00090 00092 typedef union { 00093 apr_file_t *f; 00094 apr_socket_t *s; 00095 } apr_descriptor; 00096 00098 typedef struct apr_pollfd_t apr_pollfd_t; 00099 00101 struct apr_pollfd_t { 00102 apr_pool_t *p; 00103 apr_datatype_e desc_type; 00104 apr_int16_t reqevents; 00105 apr_int16_t rtnevents; 00106 apr_descriptor desc; 00107 void *client_data; 00108 }; 00109 00110 00111 /* General-purpose poll API for arbitrarily large numbers of 00112 * file descriptors 00113 */ 00114 00116 typedef struct apr_pollset_t apr_pollset_t; 00117 00147 APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset, 00148 apr_uint32_t size, 00149 apr_pool_t *p, 00150 apr_uint32_t flags); 00151 00184 APR_DECLARE(apr_status_t) apr_pollset_create_ex(apr_pollset_t **pollset, 00185 apr_uint32_t size, 00186 apr_pool_t *p, 00187 apr_uint32_t flags, 00188 apr_pollset_method_e method); 00189 00194 APR_DECLARE(apr_status_t) apr_pollset_destroy(apr_pollset_t *pollset); 00195 00222 APR_DECLARE(apr_status_t) apr_pollset_add(apr_pollset_t *pollset, 00223 const apr_pollfd_t *descriptor); 00224 00242 APR_DECLARE(apr_status_t) apr_pollset_remove(apr_pollset_t *pollset, 00243 const apr_pollfd_t *descriptor); 00244 00265 APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset, 00266 apr_interval_time_t timeout, 00267 apr_int32_t *num, 00268 const apr_pollfd_t **descriptors); 00269 00276 APR_DECLARE(apr_status_t) apr_pollset_wakeup(apr_pollset_t *pollset); 00277 00296 APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t numsock, 00297 apr_int32_t *nsds, 00298 apr_interval_time_t timeout); 00299 00304 APR_DECLARE(const char *) apr_pollset_method_name(apr_pollset_t *pollset); 00305 00310 APR_DECLARE(const char *) apr_poll_method_defname(void); 00311 00313 typedef struct apr_pollcb_t apr_pollcb_t; 00314 00325 APR_DECLARE(apr_status_t) apr_pollcb_create(apr_pollcb_t **pollcb, 00326 apr_uint32_t size, 00327 apr_pool_t *p, 00328 apr_uint32_t flags); 00329 00343 APR_DECLARE(apr_status_t) apr_pollcb_create_ex(apr_pollcb_t **pollcb, 00344 apr_uint32_t size, 00345 apr_pool_t *p, 00346 apr_uint32_t flags, 00347 apr_pollset_method_e method); 00348 00366 APR_DECLARE(apr_status_t) apr_pollcb_add(apr_pollcb_t *pollcb, 00367 apr_pollfd_t *descriptor); 00376 APR_DECLARE(apr_status_t) apr_pollcb_remove(apr_pollcb_t *pollcb, 00377 apr_pollfd_t *descriptor); 00378 00385 typedef apr_status_t (*apr_pollcb_cb_t)(void *baton, apr_pollfd_t *descriptor); 00386 00403 APR_DECLARE(apr_status_t) apr_pollcb_poll(apr_pollcb_t *pollcb, 00404 apr_interval_time_t timeout, 00405 apr_pollcb_cb_t func, 00406 void *baton); 00407 00410 #ifdef __cplusplus 00411 } 00412 #endif 00413 00414 #endif /* ! APR_POLL_H */ 00415