0

在回调函数on_accept中,我做一个事件conn_ev

    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);
    event_add(conn_ev, NULL);

on_recv有新连接时会触发回调函数。

在回调函数on_recv(int connfd, short event, void *conn_event)中,我有

    conn_ev = (struct event *) conn_event;
    event_set(conn_ev, connfd, EV_WRITE, on_send, conn_ev);
    event_base_set(base, conn_ev);
    event_add(conn_ev, NULL);

所以conn_ev在这个回调函数中修改了。

这里是否有任何可能的问题/陷阱,所以我最好是malloc一个新的 conn_ev?

谢谢!

4

1 回答 1

0

您必须确保在修改之前未使用该事件。如果你在这个特定事件的回调中并且它不是一个持久事件,你可能没问题,但我建议在任何情况下都调用 event_del()。

虽然它可能有效,但您不应使用 malloc() 和 event_set(现已弃用)。请改用 event_new(),或至少将 event_set 替换为 event_assign()。

于 2013-06-10T13:34:29.920 回答