LINUX.ORG.RU

половинка на четвертинку. в принципе работает, но спрадические вызовы exit() в недрах на тот или иной чих заставляют задуматься о жестком рефакторинге :-/

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> но спрадические вызовы exit() в недрах на тот или иной чих

а можно подробнее? Есть ли альтернативы кроме libevent?

true_admin ★★★★★
() автор топика

Смотрел я этот libev. И libevent. Крутил-вертел.. Потом плюнул, выкинул, и написал сам как надо было..

vasily_pupkin ★★★★★
()
Ответ на: комментарий от vasily_pupkin

вот libevent это пройденный этап, щас на libev пишу :).

Просто не охота заморачиваться epoll, kqueue, select если есть уже готовое решение.

Пока плюс в том что автор libev отвечает на письма :).

true_admin ★★★★★
() автор топика
Ответ на: комментарий от redbaron

не умеет ssl, не умеет повторяющиеся события таймера, устаревшая и неполная документация, кривой дизайн(все события описываются одной struct event которой явно не хватает для этого), нельзя задать свою структуру события(если тока через *ev_arg), постоянные новые баги(http://levent.svn.sourceforge.net/viewvc/levent/branches/patches-1.4/libevent...), код требует переписывания местами и вообще сложные для восприятия исходники, кривые макросы которые лучше не смотреть как работают(макросы EVENT_SIGNAL и EVENT_FD не просто так совпадают). Несколько моих знакомых даже патчи коммитили к libevent чтобы лечить болячки :).

Короче, автор libev где-то писал почему он не любит libevent. Вот тут даже немного написано: http://cvs.schmorp.de/libev/README (правда, сильно смахивает на пеар).

Я не хочу сказать что libevent не юзабелен, просто ищу альтернативы у которых меньше груз прошлых лет который мешает развиваться проекту.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

+ практически неприменим в многопоточной среде. или же с бубном и напильником.

ps: а зачем диспатчеру событий уметь SSL :-? это уже уровень выше.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> ps: а зачем диспатчеру событий уметь SSL :-? это уже уровень выше.

это не просто диспатчер, в том-то и дело. Это целый комбайн который много чего умеет. И днс, и http и буфферизированный tcp через low_watermark и high_watermark итп. Тока делает это на примитивном уровне и часто криво. А event loop это тока маленькая часть libevent.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

> это не просто диспатчер, в том-то и дело. Это целый комбайн который много чего умеет. И днс, и http и буфферизированный tcp через low_watermark и high_watermark итп. Тока делает это на примитивном уровне и часто криво. А event loop это тока маленькая часть libevent.

надеюсь, мы говорим об одном и том же проекте? я имею ввиду http://monkey.org/~provos/libevent/

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от klalafuda

> надеюсь, мы говорим об одном и том же проекте?

об одном :). Например, man evdns. В man event рассказано про buffered events и non-blocking http. Есть ещё модули для libevent, тока их не хотят включать в стандартный пакет.

true_admin ★★★★★
() автор топика
Ответ на: комментарий от true_admin

> об одном :)

понятно.

--- log.c ---
void
event_err(int eval, const char *fmt, ...)
{
    va_list ap;

    va_start(ap, fmt);
    _warn_helper(_EVENT_LOG_ERR, errno, fmt, ap);
    va_end(ap);
    exit(eval);
}

void
event_errx(int eval, const char *fmt, ...)
{
    va_list ap;

    va_start(ap, fmt);
    _warn_helper(_EVENT_LOG_ERR, -1, fmt, ap);
    va_end(ap);
    exit(eval);
}
--- log.c ---

$ grep event_err *.c
evdns.c:                event_err(1, "clock_gettime");
event.c:                event_err(1, "%s: calloc", __func__);
event.c:                event_errx(1, "%s: no event mechanism available", __func__);
event.c:                event_errx(1, "%s: could not reinitialize event mechanism",
event.c:                event_err(1, "%s: calloc", __func__);
event.c:                        event_err(1, "%s: malloc", __func__);
event.c:                event_errx(1, "%s: %p(fd %d) not on queue %x", __func__,
event.c:                event_errx(1, "%s: unknown queue %x", __func__, queue);
event.c:                event_errx(1, "%s: %p(fd %d) already on queue %x", __func__,
event.c:                event_errx(1, "%s: unknown queue %x", __func__, queue);
event_tagging.c:                event_err(1, "%s: malloc", __func__);
event_tagging.c:                event_err(1, "%s: calloc", __func__);
evrpc.c:                event_err(1, "%s: failed to register rpc at %s",
http.c:         event_err(1, "%s: malloc(%d)", __func__, new_size + 1);
http.c:         event_errx(1, "%s: illegal connection state %d",
http.c:         event_err(1, "%s: strdup", __func__);
http.c:         event_err(1, "%s: strdup", __func__);
http.c:         event_err(1, "%s: strdup", __func__);
http.c:         event_err(1, "%s: malloc(%lu)", __func__,
http.c:         event_err(1, "%s: strdup", __func__);
http.c:         event_err(1, "%s: calloc", __func__);
http.c:         event_err(1, "%s: strdup", __func__);
http.c:                 event_err(1, "getnameinfo failed");
http.c:                 event_errx(1, "getnameinfo failed: %s", gai_strerror(ni_result));
log.c:event_err(int eval, const char *fmt, ...)
log.c:event_errx(int eval, const char *fmt, ...)
signal.c:               event_err(1, "%s: read", __func__);
signal.c:               event_err(1, "%s: socketpair", __func__);
signal.c:               event_errx(1, "%s: EV_SIGNAL incompatible use", __func__);

после этого в принципе на libevent можно смело ставить осиновый крест.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от true_admin

> Что-нить про libev(http://software.schmorp.de/pkg/libev.html) можешь сказать?

нет, никогда с ней не сталкивался. впрочем, "обилие" документации на домашней страничке несколько настораживает и не вселяет доверия :-/

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.