Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何使用libevent bufferevents让应用程序进程等待套接字读取数据?_Sockets_Blocking_Libevent_Libev_Libuv - Fatal编程技术网

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

Sockets 如何使用libevent bufferevents让应用程序进程等待套接字读取数据?,sockets,blocking,libevent,libev,libuv,Sockets,Blocking,Libevent,Libev,Libuv,我第一次使用libevent,在调用read回调之前,试图让我的应用程序不运行时遇到了一个问题。我也在使用bufferevents。本质上,我所做的是试图避免主应用程序循环中的休眠,而是在有数据要从套接字读取时让操作系统唤醒进程(通过libevent)。有人知道怎么做吗?我在libevent的alpha构建中发现,可以将基本事件循环设置为EVLOOP_NO_EXIT_ON_EMPTY,但是从查看libevent代码来看,我相信它只会耗尽我的整个过程。我还读到关于这个问题的文章,说在windows

我第一次使用libevent,在调用read回调之前,试图让我的应用程序不运行时遇到了一个问题。我也在使用bufferevents。本质上,我所做的是试图避免主应用程序循环中的休眠,而是在有数据要从套接字读取时让操作系统唤醒进程(通过libevent)。有人知道怎么做吗?我在libevent的alpha构建中发现,可以将基本事件循环设置为EVLOOP_NO_EXIT_ON_EMPTY,但是从查看libevent代码来看,我相信它只会耗尽我的整个过程。我还读到关于这个问题的文章,说在windows上设置一个套接字来阻塞是个坏主意,这就是为什么我也没有这样做作为解决方案的原因。我也会用libuv和libev来标记这一点,因为它们相似,可能有助于我的解决方案。

您必须使用以下api,有些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);

这是如何解决使用bufferevents的问题的?在进一步研究之后,我认为答案可能是使用libevent的iocp函数,而不是使用bufferevents。我不能完全确定,因为除了看源代码之外,我没有什么可以作为基础。