如何使应用程序进程等到套接字使用libevent bufferevents读取数据?

时间:2014-03-11 22:47:24

标签: sockets blocking libevent libev libuv

我第一次使用libevent并且一直遇到一个问题,试图让我的应用程序在调用read回调之前不运行。我也在使用bufferevents。基本上我正在做的是尝试避免在我的主应用程序循环中休眠,而是当有数据要从套接字读取时,OS唤醒进程(通过libevent)。有人知道怎么做吗?我在libevent的alpha版本中发现你可以将一个基本事件循环设置为EVLOOP_NO_EXIT_ON_EMPTY,但是从查看将用尽我的整个过程的libevent代码我相信。我还在this问题上读到,在Windows上设置套接字阻塞是个坏主意,这也是我没有把它作为解决方案的原因。我会用libuv和libev来标记它,因为它们相似并且可能有助于我的解决方案。

1 个答案:

答案 0 :(得分:0)

你必须使用以下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);