Lines Matching refs:lev
161 struct evconnlistener_event *lev; in evconnlistener_new() local
181 lev = mm_calloc(1, sizeof(struct evconnlistener_event)); in evconnlistener_new()
182 if (!lev) in evconnlistener_new()
185 lev->base.ops = &evconnlistener_event_ops; in evconnlistener_new()
186 lev->base.cb = cb; in evconnlistener_new()
187 lev->base.user_data = ptr; in evconnlistener_new()
188 lev->base.flags = flags; in evconnlistener_new()
189 lev->base.refcnt = 1; in evconnlistener_new()
191 lev->base.accept4_flags = 0; in evconnlistener_new()
193 lev->base.accept4_flags |= EVUTIL_SOCK_NONBLOCK; in evconnlistener_new()
195 lev->base.accept4_flags |= EVUTIL_SOCK_CLOEXEC; in evconnlistener_new()
198 EVTHREAD_ALLOC_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE); in evconnlistener_new()
201 event_assign(&lev->listener, base, fd, EV_READ|EV_PERSIST, in evconnlistener_new()
202 listener_read_cb, lev); in evconnlistener_new()
205 evconnlistener_enable(&lev->base); in evconnlistener_new()
207 return &lev->base; in evconnlistener_new()
270 evconnlistener_free(struct evconnlistener *lev) in evconnlistener_free() argument
272 LOCK(lev); in evconnlistener_free()
273 lev->cb = NULL; in evconnlistener_free()
274 lev->errorcb = NULL; in evconnlistener_free()
275 if (lev->ops->shutdown) in evconnlistener_free()
276 lev->ops->shutdown(lev); in evconnlistener_free()
277 listener_decref_and_unlock(lev); in evconnlistener_free()
281 event_listener_destroy(struct evconnlistener *lev) in event_listener_destroy() argument
284 EVUTIL_UPCAST(lev, struct evconnlistener_event, base); in event_listener_destroy()
287 if (lev->flags & LEV_OPT_CLOSE_ON_FREE) in event_listener_destroy()
293 evconnlistener_enable(struct evconnlistener *lev) in evconnlistener_enable() argument
296 LOCK(lev); in evconnlistener_enable()
297 lev->enabled = 1; in evconnlistener_enable()
298 if (lev->cb) in evconnlistener_enable()
299 r = lev->ops->enable(lev); in evconnlistener_enable()
302 UNLOCK(lev); in evconnlistener_enable()
307 evconnlistener_disable(struct evconnlistener *lev) in evconnlistener_disable() argument
310 LOCK(lev); in evconnlistener_disable()
311 lev->enabled = 0; in evconnlistener_disable()
312 r = lev->ops->disable(lev); in evconnlistener_disable()
313 UNLOCK(lev); in evconnlistener_disable()
318 event_listener_enable(struct evconnlistener *lev) in event_listener_enable() argument
321 EVUTIL_UPCAST(lev, struct evconnlistener_event, base); in event_listener_enable()
326 event_listener_disable(struct evconnlistener *lev) in event_listener_disable() argument
329 EVUTIL_UPCAST(lev, struct evconnlistener_event, base); in event_listener_disable()
334 evconnlistener_get_fd(struct evconnlistener *lev) in evconnlistener_get_fd() argument
337 LOCK(lev); in evconnlistener_get_fd()
338 fd = lev->ops->getfd(lev); in evconnlistener_get_fd()
339 UNLOCK(lev); in evconnlistener_get_fd()
344 event_listener_getfd(struct evconnlistener *lev) in event_listener_getfd() argument
347 EVUTIL_UPCAST(lev, struct evconnlistener_event, base); in event_listener_getfd()
352 evconnlistener_get_base(struct evconnlistener *lev) in evconnlistener_get_base() argument
355 LOCK(lev); in evconnlistener_get_base()
356 base = lev->ops->getbase(lev); in evconnlistener_get_base()
357 UNLOCK(lev); in evconnlistener_get_base()
362 event_listener_getbase(struct evconnlistener *lev) in event_listener_getbase() argument
365 EVUTIL_UPCAST(lev, struct evconnlistener_event, base); in event_listener_getbase()
370 evconnlistener_set_cb(struct evconnlistener *lev, in evconnlistener_set_cb() argument
374 LOCK(lev); in evconnlistener_set_cb()
375 if (lev->enabled && !lev->cb) in evconnlistener_set_cb()
377 lev->cb = cb; in evconnlistener_set_cb()
378 lev->user_data = arg; in evconnlistener_set_cb()
380 evconnlistener_enable(lev); in evconnlistener_set_cb()
381 UNLOCK(lev); in evconnlistener_set_cb()
385 evconnlistener_set_error_cb(struct evconnlistener *lev, in evconnlistener_set_error_cb() argument
388 LOCK(lev); in evconnlistener_set_error_cb()
389 lev->errorcb = errorcb; in evconnlistener_set_error_cb()
390 UNLOCK(lev); in evconnlistener_set_error_cb()
396 struct evconnlistener *lev = p; in listener_read_cb() local
401 LOCK(lev); in listener_read_cb()
405 evutil_socket_t new_fd = evutil_accept4_(fd, (struct sockaddr*)&ss, &socklen, lev->accept4_flags); in listener_read_cb()
415 if (lev->cb == NULL) { in listener_read_cb()
417 UNLOCK(lev); in listener_read_cb()
420 ++lev->refcnt; in listener_read_cb()
421 cb = lev->cb; in listener_read_cb()
422 user_data = lev->user_data; in listener_read_cb()
423 UNLOCK(lev); in listener_read_cb()
424 cb(lev, new_fd, (struct sockaddr*)&ss, (int)socklen, in listener_read_cb()
426 LOCK(lev); in listener_read_cb()
427 if (lev->refcnt == 1) { in listener_read_cb()
428 int freed = listener_decref_and_unlock(lev); in listener_read_cb()
432 --lev->refcnt; in listener_read_cb()
433 if (!lev->enabled) { in listener_read_cb()
435 UNLOCK(lev); in listener_read_cb()
441 UNLOCK(lev); in listener_read_cb()
444 if (lev->errorcb != NULL) { in listener_read_cb()
445 ++lev->refcnt; in listener_read_cb()
446 errorcb = lev->errorcb; in listener_read_cb()
447 user_data = lev->user_data; in listener_read_cb()
448 UNLOCK(lev); in listener_read_cb()
449 errorcb(lev, user_data); in listener_read_cb()
450 LOCK(lev); in listener_read_cb()
451 listener_decref_and_unlock(lev); in listener_read_cb()
454 UNLOCK(lev); in listener_read_cb()
465 struct evconnlistener_iocp *lev; member
477 iocp_listener_event_add(struct evconnlistener_iocp *lev) in iocp_listener_event_add() argument
479 if (lev->event_added) in iocp_listener_event_add()
482 lev->event_added = 1; in iocp_listener_event_add()
483 event_base_add_virtual_(lev->event_base); in iocp_listener_event_add()
487 iocp_listener_event_del(struct evconnlistener_iocp *lev) in iocp_listener_event_del() argument
489 if (!lev->event_added) in iocp_listener_event_del()
492 lev->event_added = 0; in iocp_listener_event_del()
493 event_base_del_virtual_(lev->event_base); in iocp_listener_event_del()
497 new_accepting_socket(struct evconnlistener_iocp *lev, int family) in new_accepting_socket() argument
517 res->lev = lev; in new_accepting_socket()
522 event_base_get_npriorities(lev->event_base) / 2, in new_accepting_socket()
551 if (!as->lev->base.enabled) in start_accepting()
562 (char *)&as->lev->fd, sizeof(&as->lev->fd)); in start_accepting()
564 if (!(as->lev->base.flags & LEV_OPT_LEAVE_SOCKETS_BLOCKING)) in start_accepting()
567 if (event_iocp_port_associate_(as->lev->port, s, 1) < 0) { in start_accepting()
574 if (ext->AcceptEx(as->lev->fd, s, as->addrbuf, 0, in start_accepting()
591 as->lev->event_base, in start_accepting()
613 struct evconnlistener *lev = &as->lev->base; in accepted_socket_invoke_user_cb() local
622 LOCK(lev); in accepted_socket_invoke_user_cb()
626 listener_decref_and_unlock(lev); in accepted_socket_invoke_user_cb()
630 ++lev->refcnt; in accepted_socket_invoke_user_cb()
635 errorcb = lev->errorcb; in accepted_socket_invoke_user_cb()
642 cb = lev->cb; in accepted_socket_invoke_user_cb()
649 (char *)&as->lev->fd, sizeof(&as->lev->fd)); in accepted_socket_invoke_user_cb()
651 data = lev->user_data; in accepted_socket_invoke_user_cb()
654 UNLOCK(lev); in accepted_socket_invoke_user_cb()
658 errorcb(lev, data); in accepted_socket_invoke_user_cb()
660 cb(lev, sock, sa_remote, socklen_remote, data); in accepted_socket_invoke_user_cb()
663 LOCK(lev); in accepted_socket_invoke_user_cb()
664 if (listener_decref_and_unlock(lev)) in accepted_socket_invoke_user_cb()
678 LOCK(&as->lev->base); in accepted_socket_cb()
683 as->lev->event_base, in accepted_socket_cb()
687 struct evconnlistener *lev = &as->lev->base; in accepted_socket_cb() local
689 listener_decref_and_unlock(lev); in accepted_socket_cb()
708 as->lev->event_base, in accepted_socket_cb()
712 UNLOCK(&as->lev->base); in accepted_socket_cb()
716 iocp_listener_enable(struct evconnlistener *lev) in iocp_listener_enable() argument
720 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base); in iocp_listener_enable()
722 LOCK(lev); in iocp_listener_enable()
733 UNLOCK(lev); in iocp_listener_enable()
738 iocp_listener_disable_impl(struct evconnlistener *lev, int shutdown) in iocp_listener_disable_impl() argument
742 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base); in iocp_listener_disable_impl()
744 LOCK(lev); in iocp_listener_disable_impl()
759 if (shutdown && lev->flags & LEV_OPT_CLOSE_ON_FREE) in iocp_listener_disable_impl()
762 UNLOCK(lev); in iocp_listener_disable_impl()
767 iocp_listener_disable(struct evconnlistener *lev) in iocp_listener_disable() argument
769 return iocp_listener_disable_impl(lev,0); in iocp_listener_disable()
773 iocp_listener_destroy(struct evconnlistener *lev) in iocp_listener_destroy() argument
776 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base); in iocp_listener_destroy()
780 iocp_listener_disable_impl(lev,1); in iocp_listener_destroy()
786 iocp_listener_getfd(struct evconnlistener *lev) in iocp_listener_getfd() argument
789 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base); in iocp_listener_getfd()
793 iocp_listener_getbase(struct evconnlistener *lev) in iocp_listener_getbase() argument
796 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base); in iocp_listener_getbase()
819 struct evconnlistener_iocp *lev; in evconnlistener_new_async() local
839 lev = mm_calloc(1, sizeof(struct evconnlistener_iocp)); in evconnlistener_new_async()
840 if (!lev) { in evconnlistener_new_async()
844 lev->base.ops = &evconnlistener_iocp_ops; in evconnlistener_new_async()
845 lev->base.cb = cb; in evconnlistener_new_async()
846 lev->base.user_data = ptr; in evconnlistener_new_async()
847 lev->base.flags = flags; in evconnlistener_new_async()
848 lev->base.refcnt = 1; in evconnlistener_new_async()
849 lev->base.enabled = 1; in evconnlistener_new_async()
851 lev->port = event_base_get_iocp_(base); in evconnlistener_new_async()
852 lev->fd = fd; in evconnlistener_new_async()
853 lev->event_base = base; in evconnlistener_new_async()
856 if (event_iocp_port_associate_(lev->port, fd, 1) < 0) in evconnlistener_new_async()
859 EVTHREAD_ALLOC_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE); in evconnlistener_new_async()
861 lev->n_accepting = N_SOCKETS_PER_LISTENER; in evconnlistener_new_async()
862 lev->accepting = mm_calloc(lev->n_accepting, in evconnlistener_new_async()
864 if (!lev->accepting) { in evconnlistener_new_async()
868 for (i = 0; i < lev->n_accepting; ++i) { in evconnlistener_new_async()
869 lev->accepting[i] = new_accepting_socket(lev, ss.ss_family); in evconnlistener_new_async()
870 if (!lev->accepting[i]) { in evconnlistener_new_async()
874 if (cb && start_accepting(lev->accepting[i]) < 0) { in evconnlistener_new_async()
876 EnterCriticalSection(&lev->accepting[i]->lock); in evconnlistener_new_async()
877 free_and_unlock_accepting_socket(lev->accepting[i]); in evconnlistener_new_async()
880 ++lev->base.refcnt; in evconnlistener_new_async()
883 iocp_listener_event_add(lev); in evconnlistener_new_async()
885 return &lev->base; in evconnlistener_new_async()
888 mm_free(lev->accepting); in evconnlistener_new_async()
891 EVTHREAD_FREE_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE); in evconnlistener_new_async()
893 mm_free(lev); in evconnlistener_new_async()