Lines Matching refs:lev

162 	struct evconnlistener_event *lev;
182 lev = mm_calloc(1, sizeof(struct evconnlistener_event));
183 if (!lev)
186 lev->base.ops = &evconnlistener_event_ops;
187 lev->base.cb = cb;
188 lev->base.user_data = ptr;
189 lev->base.flags = flags;
190 lev->base.refcnt = 1;
192 lev->base.accept4_flags = 0;
194 lev->base.accept4_flags |= EVUTIL_SOCK_NONBLOCK;
196 lev->base.accept4_flags |= EVUTIL_SOCK_CLOEXEC;
199 EVTHREAD_ALLOC_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
202 event_assign(&lev->listener, base, fd, EV_READ|EV_PERSIST,
203 listener_read_cb, lev);
206 evconnlistener_enable(&lev->base);
208 return &lev->base;
266 evconnlistener_free(struct evconnlistener *lev)
268 LOCK(lev);
269 lev->cb = NULL;
270 lev->errorcb = NULL;
271 if (lev->ops->shutdown)
272 lev->ops->shutdown(lev);
273 listener_decref_and_unlock(lev);
277 event_listener_destroy(struct evconnlistener *lev)
280 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
283 if (lev->flags & LEV_OPT_CLOSE_ON_FREE)
289 evconnlistener_enable(struct evconnlistener *lev)
292 LOCK(lev);
293 lev->enabled = 1;
294 if (lev->cb)
295 r = lev->ops->enable(lev);
298 UNLOCK(lev);
303 evconnlistener_disable(struct evconnlistener *lev)
306 LOCK(lev);
307 lev->enabled = 0;
308 r = lev->ops->disable(lev);
309 UNLOCK(lev);
314 event_listener_enable(struct evconnlistener *lev)
317 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
322 event_listener_disable(struct evconnlistener *lev)
325 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
330 evconnlistener_get_fd(struct evconnlistener *lev)
333 LOCK(lev);
334 fd = lev->ops->getfd(lev);
335 UNLOCK(lev);
340 event_listener_getfd(struct evconnlistener *lev)
343 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
348 evconnlistener_get_base(struct evconnlistener *lev)
351 LOCK(lev);
352 base = lev->ops->getbase(lev);
353 UNLOCK(lev);
358 event_listener_getbase(struct evconnlistener *lev)
361 EVUTIL_UPCAST(lev, struct evconnlistener_event, base);
366 evconnlistener_set_cb(struct evconnlistener *lev,
370 LOCK(lev);
371 if (lev->enabled && !lev->cb)
373 lev->cb = cb;
374 lev->user_data = arg;
376 evconnlistener_enable(lev);
377 UNLOCK(lev);
381 evconnlistener_set_error_cb(struct evconnlistener *lev,
384 LOCK(lev);
385 lev->errorcb = errorcb;
386 UNLOCK(lev);
392 struct evconnlistener *lev = p;
397 LOCK(lev);
401 evutil_socket_t new_fd = evutil_accept4_(fd, (struct sockaddr*)&ss, &socklen, lev->accept4_flags);
411 if (lev->cb == NULL) {
413 UNLOCK(lev);
416 ++lev->refcnt;
417 cb = lev->cb;
418 user_data = lev->user_data;
419 UNLOCK(lev);
420 cb(lev, new_fd, (struct sockaddr*)&ss, (int)socklen,
422 LOCK(lev);
423 if (lev->refcnt == 1) {
424 int freed = listener_decref_and_unlock(lev);
430 --lev->refcnt;
434 UNLOCK(lev);
437 if (lev->errorcb != NULL) {
438 ++lev->refcnt;
439 errorcb = lev->errorcb;
440 user_data = lev->user_data;
441 UNLOCK(lev);
442 errorcb(lev, user_data);
443 LOCK(lev);
444 listener_decref_and_unlock(lev);
457 struct evconnlistener_iocp *lev;
469 iocp_listener_event_add(struct evconnlistener_iocp *lev)
471 if (lev->event_added)
474 lev->event_added = 1;
475 event_base_add_virtual_(lev->event_base);
479 iocp_listener_event_del(struct evconnlistener_iocp *lev)
481 if (!lev->event_added)
484 lev->event_added = 0;
485 event_base_del_virtual_(lev->event_base);
489 new_accepting_socket(struct evconnlistener_iocp *lev, int family)
509 res->lev = lev;
514 event_base_get_npriorities(lev->event_base) / 2,
543 if (!as->lev->base.enabled)
554 (char *)&as->lev->fd, sizeof(&as->lev->fd));
556 if (!(as->lev->base.flags & LEV_OPT_LEAVE_SOCKETS_BLOCKING))
559 if (event_iocp_port_associate_(as->lev->port, s, 1) < 0) {
566 if (ext->AcceptEx(as->lev->fd, s, as->addrbuf, 0,
583 as->lev->event_base,
605 struct evconnlistener *lev = &as->lev->base;
614 LOCK(lev);
618 listener_decref_and_unlock(lev);
622 ++lev->refcnt;
627 errorcb = lev->errorcb;
634 cb = lev->cb;
641 (char *)&as->lev->fd, sizeof(&as->lev->fd));
643 data = lev->user_data;
646 UNLOCK(lev);
650 errorcb(lev, data);
652 cb(lev, sock, sa_remote, socklen_remote, data);
655 LOCK(lev);
656 if (listener_decref_and_unlock(lev))
670 LOCK(&as->lev->base);
675 as->lev->event_base,
679 struct evconnlistener *lev = &as->lev->base;
681 listener_decref_and_unlock(lev);
700 as->lev->event_base,
704 UNLOCK(&as->lev->base);
708 iocp_listener_enable(struct evconnlistener *lev)
712 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
714 LOCK(lev);
725 UNLOCK(lev);
730 iocp_listener_disable_impl(struct evconnlistener *lev, int shutdown)
734 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
736 LOCK(lev);
751 if (shutdown && lev->flags & LEV_OPT_CLOSE_ON_FREE)
754 UNLOCK(lev);
759 iocp_listener_disable(struct evconnlistener *lev)
761 return iocp_listener_disable_impl(lev,0);
765 iocp_listener_destroy(struct evconnlistener *lev)
768 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
772 iocp_listener_disable_impl(lev,1);
778 iocp_listener_getfd(struct evconnlistener *lev)
781 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
785 iocp_listener_getbase(struct evconnlistener *lev)
788 EVUTIL_UPCAST(lev, struct evconnlistener_iocp, base);
811 struct evconnlistener_iocp *lev;
831 lev = mm_calloc(1, sizeof(struct evconnlistener_iocp));
832 if (!lev) {
836 lev->base.ops = &evconnlistener_iocp_ops;
837 lev->base.cb = cb;
838 lev->base.user_data = ptr;
839 lev->base.flags = flags;
840 lev->base.refcnt = 1;
841 lev->base.enabled = 1;
843 lev->port = event_base_get_iocp_(base);
844 lev->fd = fd;
845 lev->event_base = base;
848 if (event_iocp_port_associate_(lev->port, fd, 1) < 0)
851 EVTHREAD_ALLOC_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
853 lev->n_accepting = N_SOCKETS_PER_LISTENER;
854 lev->accepting = mm_calloc(lev->n_accepting,
856 if (!lev->accepting) {
860 for (i = 0; i < lev->n_accepting; ++i) {
861 lev->accepting[i] = new_accepting_socket(lev, ss.ss_family);
862 if (!lev->accepting[i]) {
866 if (cb && start_accepting(lev->accepting[i]) < 0) {
868 EnterCriticalSection(&lev->accepting[i]->lock);
869 free_and_unlock_accepting_socket(lev->accepting[i]);
872 ++lev->base.refcnt;
875 iocp_listener_event_add(lev);
877 return &lev->base;
880 mm_free(lev->accepting);
883 EVTHREAD_FREE_LOCK(lev->base.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
885 mm_free(lev);