我试图制作一个程序,该程序在事件生成的回调中读取文件描述符上的数据。但是一旦它读取了它退出的数据,即 event_base_loop() 只运行一次,我希望它在它读取数据时再次运行。现在我正在使用全局事件完成它,然后在回调函数中再次调用 add_event()
struct event *ev1; //this is the global event variable
void Cb(evutil_socket_t fd, short what,void * arg)
{
char buffer[256];
int rc= recv(fd,buffer,sizeof(buffer),0);
printf("DATA = %s\n",buffer);
event_add(ev1,NULL);
}
void Create_UDP_Socket_Event(int fd)
{
struct event_base *base = event_base_new();
base = event_base_new();
ev1 = event_new(base, fd,EV_READ, cb ,(char *)"");
event_add(ev1,NULL);
int res=event_base_loop(base,0);
}
因为我必须制作一个具有多个 udp 套接字的动态代码,所以我不能使用这种方法,我使用的是 fedora 17,我的编译器是 g++ (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2)