如何使用libevent库在程序中搜索和删除事件?

时间:2013-06-10 15:33:32

标签: c linux network-programming libevent

在我的程序中,我添加如下事件:

    conn_ev = (struct event *)malloc(sizeof(struct event));
    event_set(conn_ev, connfd, EV_READ, on_recv, conn_ev);
    event_base_set(base, conn_ev);
    if(event_add(conn_ev, NULL) == -1){
            fprintf(stderr, "event_add(conn_ev) error!\n");
            goto EXCEPTION;
    }

稍后,如果满足另一个条件,我需要删除与connfd相关的所有事件, 是否可以通过套接字号搜索事件? 以及如何删除这些事件?

谢谢!

1 个答案:

答案 0 :(得分:1)

您无法直接使用fd搜索事件,但您可以执行以下操作:

          sock = event_get_fd(conn_ev);
          if (sock == sock_of_your_interest)
             event_del(conn_ev);
             free(conn_ev);

event_get_fd()返回分配的套接字,然后检查它是否在您的兴趣列表中,如果是,则删除事件并释放分配的内存。您可以通过使用event_new(),event_free()轻松地将这些内存分配事项留给libevent。希望这会有所帮助。