static void * devpoll_init(struct event_base *base) { int dpfd, nfiles = NEVENT; struct rlimit rl; struct devpollop *devpollop; /* Disable devpoll when this environment variable is set */ if (getenv("EVENT_NODEVPOLL")) return (NULL); if (!(devpollop = calloc(1, sizeof(struct devpollop)))) return (NULL); if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_cur != RLIM_INFINITY) nfiles = rl.rlim_cur - 1; /* Initialize the kernel queue */ if ((dpfd = open("/dev/poll", O_RDWR)) == -1) { event_warn("open: /dev/poll"); free(devpollop); return (NULL); } devpollop->dpfd = dpfd; /* Initialize fields */ devpollop->events = calloc(nfiles, sizeof(struct pollfd)); if (devpollop->events == NULL) { free(devpollop); close(dpfd); return (NULL); } devpollop->nevents = nfiles; devpollop->fds = calloc(nfiles, sizeof(struct evdevpoll)); if (devpollop->fds == NULL) { free(devpollop->events); free(devpollop); close(dpfd); return (NULL); } devpollop->nfds = nfiles; devpollop->changes = calloc(nfiles, sizeof(struct pollfd)); if (devpollop->changes == NULL) { free(devpollop->fds); free(devpollop->events); free(devpollop); close(dpfd); return (NULL); } evsignal_init(base); return (devpollop); }
static void * epoll_init(struct event_base *base) { int epfd, nfiles = NEVENT; struct rlimit rl; struct epollop *epollop; /* Disable epollueue when this environment variable is set */ if (getenv("EVENT_NOEPOLL")) return (NULL); if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_cur != RLIM_INFINITY) { /* * Solaris is somewhat retarded - it's important to drop * backwards compatibility when making changes. So, don't * dare to put rl.rlim_cur here. */ nfiles = rl.rlim_cur - 1; } /* Initalize the kernel queue */ if ((epfd = epoll_create(nfiles)) == -1) { if (errno != ENOSYS) event_warn("epoll_create"); return (NULL); } FD_CLOSEONEXEC(epfd); if (!(epollop = calloc(1, sizeof(struct epollop)))) return (NULL); epollop->epfd = epfd; /* Initalize fields */ epollop->events = malloc(nfiles * sizeof(struct epoll_event)); if (epollop->events == NULL) { free(epollop); return (NULL); } epollop->nevents = nfiles; epollop->fds = calloc(nfiles, sizeof(struct evepoll)); if (epollop->fds == NULL) { free(epollop->events); free(epollop); return (NULL); } epollop->nfds = nfiles; evsignal_init(base); return (epollop); }
void * epoll_init(void) { int epfd, nfiles = NEVENT; struct rlimit rl; struct epollop *epollop; /* Disable epollueue when this environment variable is set */ if (getenv("EVENT_NOEPOLL")) return (NULL); if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_cur != RLIM_INFINITY) nfiles = rl.rlim_cur; /* Initalize the kernel queue */ if ((epfd = epoll_create(nfiles)) == -1) { event_warn("epoll_create"); return (NULL); } FD_CLOSEONEXEC(epfd); if (!(epollop = calloc(1, sizeof(struct epollop)))) return (NULL); epollop->epfd = epfd; /* Initalize fields */ epollop->events = malloc(nfiles * sizeof(struct epoll_event)); if (epollop->events == NULL) { free(epollop); return (NULL); } epollop->nevents = nfiles; epollop->fds = calloc(nfiles, sizeof(struct evepoll)); if (epollop->fds == NULL) { free(epollop->events); free(epollop); return (NULL); } epollop->nfds = nfiles; evsignal_init(&epollop->evsigmask); return (epollop); }
static void * poll_init(struct event_base *base) { struct pollop *pollop; /* Disable poll when this environment variable is set */ if (evutil_getenv("EVENT_NOPOLL")) return (NULL); if (!(pollop = calloc(1, sizeof(struct pollop)))) return (NULL); evsignal_init(base); return (pollop); }
void * poll_init(void) { struct pollop *pollop; /* Disable poll when this environment variable is set */ if (getenv("EVENT_NOPOLL")) return (NULL); if (!(pollop = calloc(1, sizeof(struct pollop)))) return (NULL); evsignal_init(); return (pollop); }
static void * epoll_init(struct event_base *base) { int epfd, nfiles = NEVENT; struct rlimit rl; struct epollop *epollop; /* Disable epollueue when this environment variable is set */ if (getenv("EVENT_NOEPOLL")) return (NULL); /* Initalize the kernel queue */ if ((epfd = epoll_create(nfiles)) == -1) { if (errno != ENOSYS) event_warn("epoll_create"); return (NULL); } FD_CLOSEONEXEC(epfd); if (!(epollop = calloc(1, sizeof(struct epollop)))) return (NULL); epollop->epfd = epfd; /* Initalize fields */ epollop->events = malloc(nfiles * sizeof(struct epoll_event)); if (epollop->events == NULL) { free(epollop); return (NULL); } epollop->nevents = nfiles; epollop->fds = calloc(nfiles, sizeof(struct evepoll)); if (epollop->fds == NULL) { free(epollop->events); free(epollop); return (NULL); } epollop->nfds = nfiles; evsignal_init(base); return (epollop); }
static void * epoll_init(struct event_base *base) { int epfd; struct epollop *epollop; /* Disable epollueue when this environment variable is set */ if (evutil_getenv("EVENT_NOEPOLL")) return (NULL); /* Initalize the kernel queue */ if ((epfd = epoll_create(32000)) == -1) { if (errno != ENOSYS) event_warn("epoll_create"); return (NULL); } //fcntl(epfd,F_SETFD,1)//将1设置给epfd FD_CLOSEONEXEC(epfd); if (!(epollop = calloc(1, sizeof(struct epollop)))) return (NULL); epollop->epfd = epfd; //将nfd初始值为32大小,nevents同样如此.相应空间也会进行申请 /* Initalize fields */ epollop->events = malloc(INITIAL_NEVENTS * sizeof(struct epoll_event)); if (epollop->events == NULL) { free(epollop); return (NULL); } epollop->nevents = INITIAL_NEVENTS; epollop->fds = calloc(INITIAL_NFILES, sizeof(struct evepoll)); if (epollop->fds == NULL) { free(epollop->events); free(epollop); return (NULL); } epollop->nfds = INITIAL_NFILES; //创建socket pair evsignal_init(base); return (epollop); }
static void * select_init(struct event_base *base) { struct selectop *sop; /* Disable select when this environment variable is set */ if (!issetugid() && getenv("EVENT_NOSELECT")) return (NULL); if (!(sop = calloc(1, sizeof(struct selectop)))) return (NULL); select_resize(sop, howmany(32 + 1, NFDBITS)*sizeof(fd_mask)); evsignal_init(base); return (sop); }
static void * epoll_init(struct event_base *base) { int epfd; struct epollop *epollop; if (evutil_getenv("EVENT_NOEPOLL")) return (NULL); if ((epfd = epoll_create(32000)) == -1) { if (errno != ENOSYS) event_warn("epoll_create"); return (NULL); } FD_CLOSEONEXEC(epfd); if (!(epollop = calloc(1, sizeof(struct epollop)))) return (NULL); epollop->epfd = epfd; epollop->events = malloc(INITIAL_NEVENTS * sizeof(struct epoll_event)); if (epollop->events == NULL) { free(epollop); return (NULL); } epollop->nevents = INITIAL_NEVENTS; epollop->fds = calloc(INITIAL_NFILES, sizeof(struct evepoll)); if (epollop->fds == NULL) { free(epollop->events); free(epollop); return (NULL); } epollop->nfds = INITIAL_NFILES; evsignal_init(base); return (epollop); }
static void* evport_init (struct event_base *base) { struct evport_data *evpd; int i; /* * Disable event ports when this environment variable is set */ if (getenv ("EVENT_NOEVPORT") ) return (NULL); if (! (evpd = calloc (1, sizeof (struct evport_data) ) ) ) return (NULL); if ( (evpd->ed_port = port_create() ) == -1) { free (evpd); return (NULL); } /* * Initialize file descriptor structure */ evpd->ed_fds = calloc (DEFAULT_NFDS, sizeof (struct fd_info) ); if (evpd->ed_fds == NULL) { close (evpd->ed_port); free (evpd); return (NULL); } evpd->ed_nevents = DEFAULT_NFDS; for (i = 0; i < EVENTS_PER_GETN; i++) evpd->ed_pending[i] = -1; evsignal_init (base); return (evpd); }
void * epoll_init(void) { int epfd, nfiles = NEVENT; struct rlimit rl; /* Disable epollueue when this environment variable is set */ if (getenv("EVENT_NOEPOLL")) return (NULL); memset(&epollop, 0, sizeof(epollop)); if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_cur != RLIM_INFINITY) nfiles = rl.rlim_cur; /* Initalize the kernel queue */ if ((epfd = epoll_create(nfiles)) == -1) { log_error("epoll_create"); return (NULL); } epollop.epfd = epfd; /* Initalize fields */ epollop.events = malloc(nfiles * sizeof(struct epoll_event)); if (epollop.events == NULL) return (NULL); epollop.nevents = nfiles; epollop.fds = calloc(nfiles, sizeof(struct evepoll)); if (epollop.fds == NULL) { free(epollop.events); return (NULL); } epollop.nfds = nfiles; evsignal_init(&epollop.evsigmask); return (&epollop); }