我的 Centos 6 上有两个不同版本的 libevent,libevent 版本 1.4(系统默认)/usr/lib和版本 2.0.21(从头开始构建)/usr/local/lib(我是因为这些文件libevent-1.4.so.2和才得出这个结论的libevent-2.0.so.5)。我需要检查正在使用哪个版本,因为java: event.c:715: event_add: Assertion !(ev->ev_flags & ~(0xf000 | 0x9f))' failed当我运行一个 java 应用程序时收到此错误,该应用程序也依赖于其他一些库(我不知道)。所以我初步的评估是java或者依赖库调用了libevent库。所以我的问题是如何检查系统和java正在使用哪个libevent?
在编译我正在使用libevent库的程序时,我正在使用gcc选项-levent.但是我收到了这个错误 -
/ usr/bin/ld:找不到-levent
我没有对我的系统进行解放,因此我在编译时使用静态链接
gcc -o Hello -static -I libevent-1.4.12-stable/ hello.c -levent
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
提前致谢!
我正在使用 libevent 编写一个事件驱动的应用程序,并且需要使用 libusb-1.0 进行 USB 传输。
我想使用libusb_get_pollfds获取文件描述符列表(在 中fds)并将它们添加到 libevent,如下所示:
const struct libusb_pollfd **fds = libusb_get_pollfds(device->context);
const struct libusb_pollfd *it = *fds;
for(;it != NULL; ++it) {
cout << "Adding fd: " << it->fd << ", " << it->events << endl;
struct event * ev = event_new(base_,
it->fd, it->events | EV_PERSIST,
callbacks::libusb_cb, this);
event_add(ev, 0);
libusb_fds_events.insert(std::make_pair(it->fd, ev));
}
free(fds);
// (...)
// And the callback function:
void callbacks::libusb_cb(evutil_socket_t fd, short what, void *arg) {
Server *s …Run Code Online (Sandbox Code Playgroud) 我有一些关于libevent2及其多线程支持的问题.
libevent是否支持多个线程?我想要实现的是这样的:
是不是可以用libevent做这样的事情?或者还有其他方法来支持多核吗?
非常感谢你
我有以下代码:
#include <stdio.h>
#include <sys/time.h>
#include <event.h>
void say_hello(int fd, short event, void *arg){
printf("Hello\n");
}
int main(int argc, const char* argv[])
{
struct event ev;
struct timeval tv;
tv.tv_sec = 3;
tv.tv_usec = 0;
event_init();
evtimer_set(&ev,say_hello,NULL);
evtimer_add(&ev, &tv);
event_dispatch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是"你好"打印一次,然后程序退出...
我想让它无限期地输出"你好".
这该怎么做?提前谢谢了,
我现在正在使用libevent:
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdio.h>
#include <event2/event.h>
struct event_base *base;
int PORT = 9999;
int BACKLOG = 5;
int create_bind_listen()
{
struct sockaddr_in my_addr;
int yes = 1;
int sock = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));
memset(&my_addr, 0, sizeof(struct sockaddr_in));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(PORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bind(sock, (struct sockaddr*)&my_addr, sizeof(struct sockaddr));
listen(sock, BACKLOG);
return sock;
}
void cb_func(evutil_socket_t fd, short what, void *arg)
{
printf("%d\n", fd);
}
int …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的程序之一链接到libevent。我使用 CMake 作为构建系统。我的项目结构如下:
\n\nmy_project\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 build\n\xe2\x94\x82\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Build stuff\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 software\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 include\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 libraries\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 libevent\n \xe2\x94\x82 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 anotherlibrary\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prog1\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prog2\n \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 prog3\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 CMakeLists.txt\nRun Code Online (Sandbox Code Playgroud)\n\nprog1 的 CMakeList.txt(需要链接到 libevent 的那个)
\n\ncmake_minimum_required(VERSION 2.6)\nproject (prog1)\n\nfile(GLOB prog1\n "*.h"\n "*.cpp"\n)\n\ninclude_directories("${PROJECT_INCLUDE_DIR}/libevent/include")\n\nadd_executable(${PROJECT_NAME} ${prog1})\ntarget_link_libraries(${PROJECT_NAME} event_core)\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我构建项目时,make 找不到 libevent 构建的库。它搜索:libraries/libevent/lib/libevent_core.a这是错误的路径,因为 libevent 在里面构建了它的库:my_project/build/software/libraries/libevent/lib/libevent_core.a
我如何告诉 CMake 在那里搜索库?我已经将以下行添加到我的 Cmake …
我正在尝试监视一个unix套接字("/ tmp/mysocket").
我可以在Node.js中做到这一点:当1)套接字绑定,2)有人连接到套接字,3)数据被发送到套接字和4)套接字断开时,它引发一个事件.
我现在尝试在C/C++中执行此操作:我想监视"/ tmp/mysocket"以查找上述事件.我看过libevent(我最好喜欢使用),但是看到它需要一个IP:端口.有没有办法监控unix套接字?
或者任何人都可以建议另一个C/C++解决方案?
要安装 memcached,我运行:
./configure
Run Code Online (Sandbox Code Playgroud)
从 memcached 服务器位置但我收到错误:
checking for libevent directory... configure: error: libevent is required. You can get it from http://www.monkey.org/~provos/libevent/
If it's already installed, specify its path using --with-libevent=/dir/
Run Code Online (Sandbox Code Playgroud)
因此,我通过从http://www.monkey.org/~provos/libevent/下载并从下载的 libevent 文件夹中运行 ./configure手动安装了 libevent
但是当我尝试命令时:
./configure --with-libevent=/export/home/me/libevent-2.0.21-stable/
Run Code Online (Sandbox Code Playgroud)
我收到同样的错误:
checking for libevent directory... configure: error: libevent is required. You can get it from http://www.monkey.org/~provos/libevent/
If it's already installed, specify its path using --with-libevent=/dir/
Run Code Online (Sandbox Code Playgroud)
如何检查 libevent 的安装位置?我指定的路径正确吗?
当我从防火墙后面安装 memcached 时,我需要手动安装 libevent。
这个问题可能有点偏离主题,但我不知道还能问哪里。我正在阅读此https://github.com/msgpack-rpc/msgpack-rpc/blob/master/spec.md并看到该规范包括能够使用相同的连接发送无序消息。
我之前进行TCP套接字编程的唯一方法是在套接字上同步发送请求,例如,我将打开一个套接字127.0.0.1,通过该套接字向该服务器发送请求并等待响应。当我收到所发送请求的响应时,我会在响应请求后通过调用close()客户端和close()服务器来关闭该连接。
作为背景,我正在开发一个 C++ 项目,libevent该项目要做的事情与 RPC 系统非常相似,所以我想知道我应该在底层传输系统中使用什么请求响应套接字周期。
在 C++ thrift 中,有一个名为open()(大概)的客户端方法,它打开一个连接并保持它打开状态,直到您调用close(). 这在被抽象出来的系统中如何工作?例如,在我上面包含的 messagepack-RPC 链接中。最好的做法是什么?如果没有连接,则打开一个连接,发送请求,并在所有先前的请求得到处理后关闭该连接(在服务器上,close()当所有挂起的请求都得到响应时调用)?或者我们是否必须以某种方式尝试使该连接在超出请求生命周期的一段时间内保持活动状态?服务器和客户端如何知道该时间段是多少?recv()例如,我们是否应该在套接字上注册一个读取事件处理程序并在返回时关闭连接0?
如果这是一个不同系统以不同方式解决的问题,那么有人可以指导我找到一个资源,我可以使用该资源来读取保持连接活动的可能模式(最好是在事件驱动系统中)?例如,我读到 HTTP 服务器始终保持连接打开,这是为什么?保持每个连接打开是否意味着服务器本质上会泄漏内存?
抱歉,这个看似基本的问题,我以前只做过非常简单的 TCP 套接字编程,所以我可能不知道事情是如何完成的。