我第一次使用libevent,并且一直有一个问题,试图让我的应用程序不运行,直到读取回调被调用。我也在使用bufferevents。从本质上讲,我正在做的是试图避免主应用程序循环中的睡眠,而是让操作系统在有数据要从套接字读取时唤醒进程(通过libevent)。有人知道怎么做吗?我在libevent的alpha构建中发现,您可以将基本事件循环设置为EVLOOP_NO_EXIT_ON_EMPTY,但从libevent代码来看,我相信这只会耗尽我的整个过程。我也读到这个问题,这是一个坏主意,设置一个套接字阻塞窗口,这就是为什么我没有这样做作为一个解决方案。我也会用libuv和libev标记,因为它们很相似,可能有助于我的解决方案。
你必须使用以下api,一些api可能过时,你可以搜索谷歌新的。
struct event_base *base ;
struct event g_eve
base = event_init();
//after binding the socket register your socket for read event using below api
event_set(&g_eve, SockFd, EV_READ | EV_PERSIST, CallbackFunctin, &g_eve);
event_add(&g_eve, NULL);
event_base_dispatch(base);