Lines Matching refs:lev

160 	struct evconnlistener_event *lev;
180 lev = mm_calloc(1, sizeof(struct evconnlistener_event));
181 if (!lev)
184 lev->base.ops = &evconnlistener_event_ops;
185 lev->base.cb = cb;
186 lev->base.user_data = ptr;
187 lev->base.flags = flags;
188 lev->base.refcnt = 1;
190 lev->base.accept4_flags = 0;
192 lev->base.accept4_flags |= EVUTIL_SOCK_NONBLOCK;
194 lev->base.accept4_flags |= EVUTIL_SOCK_CLOEXEC;
197 EVTHREAD_ALLOC_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
200 event_assign(&lev->listener, base, fd, EV_READ|EV_PERSIST,
201 listener_read_cb, lev);
204 evconnlistener_enable(&lev->base);
206 return &lev->base;
264 evconnlistener_free(struct evconnlistener *lev)
266 LOCK(lev);
267 lev->cb = NULL;
268 lev->errorcb = NULL;
269 if (lev->ops->shutdown)
270 lev->ops->shutdown(lev);
271 listener_decref_and_unlock(lev);
275 event_listener_destroy(struct evconnlistener *lev)
278 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
281 if (lev->flags & LEV_OPT_CLOSE_ON_FREE)
287 evconnlistener_enable(struct evconnlistener *lev)
290 LOCK(lev);
291 lev->enabled = 1;
292 if (lev->cb)
293 r = lev->ops->enable(lev);
296 UNLOCK(lev);
301 evconnlistener_disable(struct evconnlistener *lev)
304 LOCK(lev);
305 lev->enabled = 0;
306 r = lev->ops->disable(lev);
307 UNLOCK(lev);
312 event_listener_enable(struct evconnlistener *lev)
315 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
320 event_listener_disable(struct evconnlistener *lev)
323 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
328 evconnlistener_get_fd(struct evconnlistener *lev)
331 LOCK(lev);
332 fd = lev->ops->getfd(lev);
333 UNLOCK(lev);
338 event_listener_getfd(struct evconnlistener *lev)
341 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
346 evconnlistener_get_base(struct evconnlistener *lev)
349 LOCK(lev);
350 base = lev->ops->getbase(lev);
351 UNLOCK(lev);
356 event_listener_getbase(struct evconnlistener *lev)
359 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
364 evconnlistener_set_cb(struct evconnlistener *lev,
368 LOCK(lev);
369 if (lev->enabled && !lev->cb)
371 lev->cb = cb;
372 lev->user_data = arg;
374 evconnlistener_enable(lev);
375 UNLOCK(lev);
379 evconnlistener_set_error_cb(struct evconnlistener *lev,
382 LOCK(lev);
383 lev->errorcb = errorcb;
384 UNLOCK(lev);
390 struct evconnlistener *lev = p;
395 LOCK(lev);
399 evutil_socket_t new_fd = evutil_accept4_(fd, (struct sockaddr*)&ss, &socklen, lev->accept4_flags);
409 if (lev->cb == NULL) {
411 UNLOCK(lev);
414 ++lev->refcnt;
415 cb = lev->cb;
416 user_data = lev->user_data;
417 UNLOCK(lev);
418 cb(lev, new_fd, (struct sockaddr*)&ss, (int)socklen,
420 LOCK(lev);
421 if (lev->refcnt == 1) {
422 int freed = listener_decref_and_unlock(lev);
428 --lev->refcnt;
432 UNLOCK(lev);
435 if (lev->errorcb != NULL) {
436 ++lev->refcnt;
437 errorcb = lev->errorcb;
438 user_data = lev->user_data;
439 UNLOCK(lev);
440 errorcb(lev, user_data);
441 LOCK(lev);
442 listener_decref_and_unlock(lev);
455 struct evconnlistener_iocp *lev;
467 iocp_listener_event_add(struct evconnlistener_iocp *lev)
469 if (lev->event_added)
472 lev->event_added = 1;
473 event_base_add_virtual_(lev->event_base);
477 iocp_listener_event_del(struct evconnlistener_iocp *lev)
479 if (!lev->event_added)
482 lev->event_added = 0;
483 event_base_del_virtual_(lev->event_base);
487 new_accepting_socket(struct evconnlistener_iocp *lev, int family)
507 res->lev = lev;
512 event_base_get_npriorities(lev->event_base) / 2,
541 if (!as->lev->base.enabled)
552 (char *)&as->lev->fd, sizeof(&as->lev->fd));
554 if (!(as->lev->base.flags & LEV_OPT_LEAVE_SOCKETS_BLOCKING))
557 if (event_iocp_port_associate_(as->lev->port, s, 1) < 0) {
564 if (ext->AcceptEx(as->lev->fd, s, as->addrbuf, 0,
581 as->lev->event_base,
603 struct evconnlistener *lev = &as->lev->base;
612 LOCK(lev);
616 listener_decref_and_unlock(lev);
620 ++lev->refcnt;
625 errorcb = lev->errorcb;
632 cb = lev->cb;
639 (char *)&as->lev->fd, sizeof(&as->lev->fd));
641 data = lev->user_data;
644 UNLOCK(lev);
648 errorcb(lev, data);
650 cb(lev, sock, sa_remote, socklen_remote, data);
653 LOCK(lev);
654 if (listener_decref_and_unlock(lev))
668 LOCK(&as->lev->base);
673 as->lev->event_base,
677 struct evconnlistener *lev = &as->lev->base;
679 listener_decref_and_unlock(lev);
698 as->lev->event_base,
702 UNLOCK(&as->lev->base);
706 iocp_listener_enable(struct evconnlistener *lev)
710 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
712 LOCK(lev);
723 UNLOCK(lev);
728 iocp_listener_disable_impl(struct evconnlistener *lev, int shutdown)
732 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
734 LOCK(lev);
749 if (shutdown && lev->flags & LEV_OPT_CLOSE_ON_FREE)
752 UNLOCK(lev);
757 iocp_listener_disable(struct evconnlistener *lev)
759 return iocp_listener_disable_impl(lev,0);
763 iocp_listener_destroy(struct evconnlistener *lev)
766 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
770 iocp_listener_disable_impl(lev,1);
776 iocp_listener_getfd(struct evconnlistener *lev)
779 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
783 iocp_listener_getbase(struct evconnlistener *lev)
786 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
809 struct evconnlistener_iocp *lev;
829 lev = mm_calloc(1, sizeof(struct evconnlistener_iocp));
830 if (!lev) {
834 lev->base.ops = &evconnlistener_iocp_ops;
835 lev->base.cb = cb;
836 lev->base.user_data = ptr;
837 lev->base.flags = flags;
838 lev->base.refcnt = 1;
839 lev->base.enabled = 1;
841 lev->port = event_base_get_iocp_(base);
842 lev->fd = fd;
843 lev->event_base = base;
846 if (event_iocp_port_associate_(lev->port, fd, 1) < 0)
849 EVTHREAD_ALLOC_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
851 lev->n_accepting = N_SOCKETS_PER_LISTENER;
852 lev->accepting = mm_calloc(lev->n_accepting,
854 if (!lev->accepting) {
858 for (i = 0; i < lev->n_accepting; ++i) {
859 lev->accepting[i] = new_accepting_socket(lev, ss.ss_family);
860 if (!lev->accepting[i]) {
864 if (cb && start_accepting(lev->accepting[i]) < 0) {
866 EnterCriticalSection(&lev->accepting[i]->lock);
867 free_and_unlock_accepting_socket(lev->accepting[i]);
870 ++lev->base.refcnt;
873 iocp_listener_event_add(lev);
875 return &lev->base;
878 mm_free(lev->accepting);
881 EVTHREAD_FREE_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
883 mm_free(lev);