亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kqueue.c

?? log4cxx 0.10 unix下編譯包
?? C
字號:
/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */#include "apr_arch_poll_private.h"#ifdef POLLSET_USES_KQUEUEstatic apr_int16_t get_kqueue_revent(apr_int16_t event, apr_int16_t flags){    apr_int16_t rv = 0;    if (event == EVFILT_READ)        rv |= APR_POLLIN;    if (event == EVFILT_WRITE)        rv |= APR_POLLOUT;    if (flags & EV_EOF)        rv |= APR_POLLHUP;    if (flags & EV_ERROR)        rv |= APR_POLLERR;    return rv;}struct apr_pollset_t{    apr_pool_t *pool;    apr_uint32_t nelts;    apr_uint32_t nalloc;    int kqueue_fd;    struct kevent kevent;    struct kevent *ke_set;    apr_pollfd_t *result_set;    apr_uint32_t flags;#if APR_HAS_THREADS    /* A thread mutex to protect operations on the rings */    apr_thread_mutex_t *ring_lock;#endif    /* A ring containing all of the pollfd_t that are active */    APR_RING_HEAD(pfd_query_ring_t, pfd_elem_t) query_ring;    /* A ring of pollfd_t that have been used, and then _remove'd */    APR_RING_HEAD(pfd_free_ring_t, pfd_elem_t) free_ring;    /* A ring of pollfd_t where rings that have been _remove'd but       might still be inside a _poll */    APR_RING_HEAD(pfd_dead_ring_t, pfd_elem_t) dead_ring;};static apr_status_t backend_cleanup(void *p_){    apr_pollset_t *pollset = (apr_pollset_t *) p_;    close(pollset->kqueue_fd);    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset,                                             apr_uint32_t size,                                             apr_pool_t *p,                                             apr_uint32_t flags){    apr_status_t rv = APR_SUCCESS;    *pollset = apr_palloc(p, sizeof(**pollset));#if APR_HAS_THREADS    if (flags & APR_POLLSET_THREADSAFE &&        ((rv = apr_thread_mutex_create(&(*pollset)->ring_lock,                                       APR_THREAD_MUTEX_DEFAULT,                                       p) != APR_SUCCESS))) {        *pollset = NULL;        return rv;    }#else    if (flags & APR_POLLSET_THREADSAFE) {        *pollset = NULL;        return APR_ENOTIMPL;    }#endif    (*pollset)->nelts = 0;    (*pollset)->nalloc = size;    (*pollset)->flags = flags;    (*pollset)->pool = p;    (*pollset)->ke_set =        (struct kevent *) apr_palloc(p, size * sizeof(struct kevent));    memset((*pollset)->ke_set, 0, size * sizeof(struct kevent));    (*pollset)->kqueue_fd = kqueue();    if ((*pollset)->kqueue_fd == -1) {        return APR_ENOMEM;    }    apr_pool_cleanup_register(p, (void *) (*pollset), backend_cleanup,                              apr_pool_cleanup_null);    (*pollset)->result_set = apr_palloc(p, size * sizeof(apr_pollfd_t));    APR_RING_INIT(&(*pollset)->query_ring, pfd_elem_t, link);    APR_RING_INIT(&(*pollset)->free_ring, pfd_elem_t, link);    APR_RING_INIT(&(*pollset)->dead_ring, pfd_elem_t, link);    return rv;}APR_DECLARE(apr_status_t) apr_pollset_destroy(apr_pollset_t * pollset){    return apr_pool_cleanup_run(pollset->pool, pollset, backend_cleanup);}APR_DECLARE(apr_status_t) apr_pollset_add(apr_pollset_t *pollset,                                          const apr_pollfd_t *descriptor){    apr_os_sock_t fd;    pfd_elem_t *elem;    apr_status_t rv = APR_SUCCESS;    pollset_lock_rings();    if (!APR_RING_EMPTY(&(pollset->free_ring), pfd_elem_t, link)) {        elem = APR_RING_FIRST(&(pollset->free_ring));        APR_RING_REMOVE(elem, link);    }    else {        elem = (pfd_elem_t *) apr_palloc(pollset->pool, sizeof(pfd_elem_t));        APR_RING_ELEM_INIT(elem, link);    }    elem->pfd = *descriptor;    if (descriptor->desc_type == APR_POLL_SOCKET) {        fd = descriptor->desc.s->socketdes;    }    else {        fd = descriptor->desc.f->filedes;    }    if (descriptor->reqevents & APR_POLLIN) {        EV_SET(&pollset->kevent, fd, EVFILT_READ, EV_ADD, 0, 0, elem);        if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0,                   NULL) == -1) {            rv = APR_ENOMEM;        }    }    if (descriptor->reqevents & APR_POLLOUT && rv == APR_SUCCESS) {        EV_SET(&pollset->kevent, fd, EVFILT_WRITE, EV_ADD, 0, 0, elem);        if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0,                   NULL) == -1) {            rv = APR_ENOMEM;        }    }    if (rv == APR_SUCCESS) {        pollset->nelts++;        APR_RING_INSERT_TAIL(&(pollset->query_ring), elem, pfd_elem_t, link);    }    else {        APR_RING_INSERT_TAIL(&(pollset->free_ring), elem, pfd_elem_t, link);    }    pollset_unlock_rings();    return rv;}APR_DECLARE(apr_status_t) apr_pollset_remove(apr_pollset_t *pollset,                                             const apr_pollfd_t *descriptor){    pfd_elem_t *ep;    apr_status_t rv = APR_SUCCESS;    apr_os_sock_t fd;    pollset_lock_rings();    if (descriptor->desc_type == APR_POLL_SOCKET) {        fd = descriptor->desc.s->socketdes;    }    else {        fd = descriptor->desc.f->filedes;    }    if (descriptor->reqevents & APR_POLLIN) {        EV_SET(&pollset->kevent, fd, EVFILT_READ, EV_DELETE, 0, 0, NULL);        if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0,                   NULL) == -1) {            rv = APR_NOTFOUND;        }    }    if (descriptor->reqevents & APR_POLLOUT && rv == APR_SUCCESS) {        EV_SET(&pollset->kevent, fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL);        if (kevent(pollset->kqueue_fd, &pollset->kevent, 1, NULL, 0,                   NULL) == -1) {            rv = APR_NOTFOUND;        }    }    if (!APR_RING_EMPTY(&(pollset->query_ring), pfd_elem_t, link)) {        for (ep = APR_RING_FIRST(&(pollset->query_ring));             ep != APR_RING_SENTINEL(&(pollset->query_ring),                                     pfd_elem_t, link);             ep = APR_RING_NEXT(ep, link)) {            if (descriptor->desc.s == ep->pfd.desc.s) {                APR_RING_REMOVE(ep, link);                APR_RING_INSERT_TAIL(&(pollset->dead_ring),                                     ep, pfd_elem_t, link);                break;            }        }    }    pollset_unlock_rings();    return rv;}APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset,                                           apr_interval_time_t timeout,                                           apr_int32_t *num,                                           const apr_pollfd_t **descriptors){    int ret, i;    struct timespec tv, *tvptr;    apr_status_t rv = APR_SUCCESS;    if (timeout < 0) {        tvptr = NULL;    }    else {        tv.tv_sec = (long) apr_time_sec(timeout);        tv.tv_nsec = (long) apr_time_usec(timeout) * 1000;        tvptr = &tv;    }    ret = kevent(pollset->kqueue_fd, NULL, 0, pollset->ke_set, pollset->nalloc,                tvptr);    (*num) = ret;    if (ret < 0) {        rv = apr_get_netos_error();    }    else if (ret == 0) {        rv = APR_TIMEUP;    }    else {        for (i = 0; i < ret; i++) {            pollset->result_set[i] =                (((pfd_elem_t*)(pollset->ke_set[i].udata))->pfd);            pollset->result_set[i].rtnevents =                get_kqueue_revent(pollset->ke_set[i].filter,                              pollset->ke_set[i].flags);        }        if (descriptors) {            *descriptors = pollset->result_set;        }    }    pollset_lock_rings();    /* Shift all PFDs in the Dead Ring to be Free Ring */    APR_RING_CONCAT(&(pollset->free_ring), &(pollset->dead_ring), pfd_elem_t, link);    pollset_unlock_rings();    return rv;}#endif /* POLLSET_USES_KQUEUE */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu另类欧美亚洲曰本| 久久久久99精品国产片| 97久久久精品综合88久久| 国产精品一区二区无线| 国产自产高清不卡| 国产精品小仙女| 国产成人精品在线看| 国产成人丝袜美腿| av午夜精品一区二区三区| jiyouzz国产精品久久| 99精品久久只有精品| 91香蕉视频污在线| 色先锋aa成人| 欧美日韩国产一区| 日韩午夜在线观看| 久久午夜电影网| 国产精品麻豆欧美日韩ww| 一区精品在线播放| 亚洲高清免费视频| 美女视频黄a大片欧美| 国产精品自拍毛片| 9久草视频在线视频精品| 狠狠色丁香久久婷婷综合丁香| 亚洲午夜激情网页| 奇米精品一区二区三区在线观看一| 色激情天天射综合网| 欧日韩精品视频| 欧美一区二区在线免费播放| 久久日韩精品一区二区五区| 国产精品视频一区二区三区不卡| 亚洲女与黑人做爰| 日韩av一区二区在线影视| 国产剧情在线观看一区二区| 91婷婷韩国欧美一区二区| 538在线一区二区精品国产| 精品日本一线二线三线不卡| 国产精品美女久久久久av爽李琼| 亚洲欧美一区二区不卡| 美女视频第一区二区三区免费观看网站 | 波多野结衣91| 欧美日韩中文一区| 久久精子c满五个校花| 亚洲精品免费在线播放| 六月婷婷色综合| av网站一区二区三区| 欧美一区二视频| 亚洲欧美日韩在线播放| 欧美96一区二区免费视频| 成人毛片视频在线观看| 5858s免费视频成人| 国产精品久久久久久久蜜臀| 视频在线在亚洲| av午夜一区麻豆| 精品国产免费一区二区三区香蕉| 亚洲视频一区二区在线| 欧美精品粉嫩高潮一区二区| 亚洲精品一区二区精华| 亚洲一二三区在线观看| 国产精品1024| 91精品麻豆日日躁夜夜躁| 国产精品福利一区二区| 久久99国产精品久久| 色女孩综合影院| 久久精品日产第一区二区三区高清版| 亚洲成人动漫在线免费观看| 成人黄色777网| 精品国产髙清在线看国产毛片| 一区二区三区精品| 成人性生交大片免费看中文 | 日韩欧美www| 亚洲综合色噜噜狠狠| 国产999精品久久久久久绿帽| 欧美精品粉嫩高潮一区二区| 亚洲美女精品一区| 日韩天堂在线观看| 亚洲精品国产品国语在线app| 九色|91porny| 色综合天天性综合| 成人高清av在线| 精品剧情在线观看| 日韩电影在线观看电影| 日本精品一区二区三区四区的功能| 2017欧美狠狠色| 男女性色大片免费观看一区二区 | 国产成人av电影在线观看| 欧美区在线观看| 亚洲乱码中文字幕综合| 国产成人夜色高潮福利影视| 日韩欧美久久一区| 蜜桃91丨九色丨蝌蚪91桃色| 欧美美女直播网站| 亚洲高清免费视频| 欧美午夜精品免费| 一区二区三区小说| 97se亚洲国产综合在线| 国产精品久久毛片| 不卡视频免费播放| 亚洲欧洲日韩在线| 欧美一区三区四区| 666欧美在线视频| 欧美日韩一区高清| 亚洲午夜电影网| 欧美日韩国产小视频| 亚洲国产日韩综合久久精品| 91国内精品野花午夜精品| 亚洲欧美国产高清| 色8久久人人97超碰香蕉987| 亚洲欧美日韩一区二区| 色视频一区二区| 亚洲大片在线观看| 欧美绝品在线观看成人午夜影视| 天天免费综合色| 日韩欧美电影在线| 国产一区 二区 三区一级| 欧美激情一区在线| 91亚洲资源网| 亚洲午夜精品网| 91麻豆精品国产91久久久更新时间 | 欧美一区二区黄色| 美女性感视频久久| 国产午夜精品一区二区| 成人av资源在线观看| 亚洲九九爱视频| 欧美日韩大陆一区二区| 麻豆视频观看网址久久| 国产亚洲欧美色| 一本一道久久a久久精品综合蜜臀| 亚洲一区二区五区| 欧美一区二区在线看| 国产精品99久久久久久似苏梦涵 | 国产成人av一区二区三区在线| 中文乱码免费一区二区 | 亚洲三级免费电影| 欧美日韩高清一区二区三区| 蜜桃视频一区二区三区| 国产精品三级在线观看| 欧美视频一二三区| 国产在线精品一区在线观看麻豆| 欧美韩日一区二区三区| 欧美日韩日日摸| 国产一二精品视频| 一区二区三区日韩欧美精品| 欧美一区二区三区婷婷月色| 高清av一区二区| 天天操天天干天天综合网| 国产亚洲一区二区三区在线观看| 色综合亚洲欧洲| 激情综合五月天| 最新不卡av在线| 日韩欧美国产不卡| 色综合视频在线观看| 韩日av一区二区| 亚洲综合av网| 国产网站一区二区| 欧美色综合网站| 成人av网站大全| 美女任你摸久久| 一区二区三区免费在线观看| wwwwxxxxx欧美| 欧美日韩一区二区在线视频| 国产成人免费视频精品含羞草妖精| 一区二区免费视频| 久久久久久一级片| 欧美精选一区二区| 99国产精品久久久| 国产又黄又大久久| 五月综合激情网| 中文字幕在线观看一区二区| 欧美一区二区免费观在线| 一本色道久久综合亚洲精品按摩| 极品少妇xxxx偷拍精品少妇| 亚洲国产中文字幕| 国产精品你懂的| 精品福利一二区| 8v天堂国产在线一区二区| 91在线观看免费视频| 国产乱人伦偷精品视频免下载| 婷婷久久综合九色综合伊人色| 中文字幕一区二区不卡| 久久精品日韩一区二区三区| 日韩一级视频免费观看在线| 精品视频在线视频| 在线精品亚洲一区二区不卡| 成人高清av在线| 国产精品一区二区91| 美女诱惑一区二区| 日韩和欧美一区二区| 亚洲影院免费观看| 亚洲免费高清视频在线| 国产精品乱人伦一区二区| 久久久国产精品午夜一区ai换脸| 欧美大胆一级视频| 日韩一级高清毛片| 91精品国产综合久久久久| 欧美性生活一区| 日本乱码高清不卡字幕| 色综合色综合色综合| 91亚洲男人天堂| 99热精品一区二区| 99麻豆久久久国产精品免费|