AP_DECLARE_HOOK(conn_rec *, create_connection,
(apr_pool_t *p, apr_socket_t *csd, int conn_id))
+AP_DECLARE_HOOK(int, add_listeners, (apr_pollfd_t *pollset, apr_socket_t **listensocks, int num_listensocks))
+
#ifdef __cplusplus
}
#endif
APR_HOOK_STRUCT(
APR_HOOK_LINK(pre_connection)
APR_HOOK_LINK(process_connection)
+ APR_HOOK_LINK(add_listeners)
APR_HOOK_LINK(create_connection)
)
+AP_IMPLEMENT_HOOK_RUN_ALL(int,add_listeners,
+ (apr_pollfd_t *pollset, apr_socket_t **listensocks, int num_listensocks),
+ (pollset, listensocks, num_listensocks),OK,DECLINED)
AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_connection,(conn_rec *c),(c),OK,DECLINED)
AP_IMPLEMENT_HOOK_RUN_FIRST(int,process_connection,(conn_rec *c),(c),DECLINED)
AP_IMPLEMENT_HOOK_RUN_FIRST(conn_rec *,create_connection,
return net->c;
}
+static int core_add_listeners(apr_pollfd_t *pollset,
+ apr_socket_t **listensocks, int num_listensocks)
+{
+ int i;
+ ap_listen_rec *lr;
+
+ for (lr = ap_listeners, i = 0; i < num_listensocks; lr = lr->next, i++) {
+ listensocks[i] = lr->sd;
+ apr_poll_socket_add(pollset, listensocks[i], APR_POLLIN);
+ }
+ return OK;
+}
+
static void register_hooks(apr_pool_t *p)
{
ap_hook_post_config(core_post_config,NULL,NULL,APR_HOOK_REALLY_FIRST);
ap_hook_access_checker(do_nothing,NULL,NULL,APR_HOOK_REALLY_LAST);
ap_hook_create_connection(core_create_conn, NULL, NULL, APR_HOOK_REALLY_LAST);
ap_hook_create_request(core_create_req, NULL, NULL, APR_HOOK_MIDDLE);
+ ap_hook_add_listeners(core_add_listeners, NULL, NULL, APR_HOOK_MIDDLE);
APR_OPTIONAL_HOOK(proxy, create_req, core_create_proxy_req, NULL, NULL,
APR_HOOK_MIDDLE);
ap_hook_pre_mpm(ap_create_scoreboard, NULL, NULL, APR_HOOK_MIDDLE);
apr_pool_t *ptrans;
conn_rec *current_conn;
apr_status_t stat = APR_EINIT;
- int sockdes, i;
- ap_listen_rec *lr;
+ int sockdes;
int curr_pollfd, last_pollfd = 0;
apr_pollfd_t *pollset;
apr_socket_t *sd;
ap_sync_scoreboard_image();
+ apr_poll_setup(&pollset, num_listensocks, pchild);
/* Set up the pollfd array */
listensocks = apr_pcalloc(pchild,
sizeof(*listensocks) * (num_listensocks));
- for (lr = ap_listeners, i = 0; i < num_listensocks; lr = lr->next, i++)
- listensocks[i]=lr->sd;
- apr_poll_setup(&pollset, num_listensocks, pchild);
- for (i = 0; i < num_listensocks; i++)
- apr_poll_socket_add(pollset, listensocks[i], APR_POLLIN);
+ ap_run_add_listeners(pollset, listensocks, num_listensocks);
while (!die_now) {
/*